Exemple #1
0
 public PolicyProvider(
     ILoggerFactory factory,
     IIdentityProvider identityProvider,
     IPeersProvider peersProvider,
     DataManager dataManager)
 {
     _logger           = factory.CreateLogger <PolicyProvider>();
     _dataManager      = dataManager;
     _identityProvider = identityProvider;
     _peersprovider    = peersProvider;
 }
Exemple #2
0
 public FollowerTests()
 {
     _rules         = new Rules();
     _settings      = new InMemorySettingsBuilder().Build();
     _random        = new RandomDelay();
     _log           = new InMemoryLog();
     _peers         = new List <IPeer>();
     _fsm           = new InMemoryStateMachine();
     _peersProvider = new InMemoryPeersProvider(_peers);
     _currentState  = new CurrentState(Guid.NewGuid().ToString(), 0, default(string), -1, -1, default(string));
 }
Exemple #3
0
 public ConfigProvider(
     IAssemblyProvider assemblyProvider,
     IPolicyProvider policyProvider,
     IIdentityProvider identityProvider,
     IPeersProvider peersProvider,
     MQSetting mQSetting)
 {
     _settings         = new InMemorySettings();
     _assemblyProvider = assemblyProvider;
     _identityProvider = identityProvider;
     _policyProvider   = policyProvider;
     _peersProvider    = peersProvider;
     _mQSetting        = mQSetting;
 }
Exemple #4
0
 public FollowerTests()
 {
     _logger        = new Mock <ILogger>();
     _loggerFactory = new Mock <ILoggerFactory>();
     _loggerFactory.Setup(x => x.CreateLogger(It.IsAny <string>())).Returns(_logger.Object);
     _rules         = new Rules(_loggerFactory.Object, new NodeId(default(string)));
     _settings      = new InMemorySettingsBuilder().Build();
     _random        = new RandomDelay();
     _log           = new InMemoryLog();
     _peers         = new List <IPeer>();
     _fsm           = new InMemoryStateMachine();
     _peersProvider = new InMemoryPeersProvider(_peers);
     _currentState  = new CurrentState(Guid.NewGuid().ToString(), 0, default(string), -1, -1, default(string));
     _node          = new NothingNode();
 }
Exemple #5
0
 public Node(
     IFiniteStateMachine fsm,
     ILog log,
     ISettings settings,
     IPeersProvider peersProvider)
 {
     //dont think rules should be injected at the moment..EEK UNCLE BOB
     _rules         = new Rules();
     _fsm           = fsm;
     _log           = log;
     _random        = new RandomDelay();
     _settings      = settings;
     _peersProvider = peersProvider;
     _getPeers      = state => {
         var peers = _peersProvider.Get();
         var peersThatAreNotThisServer = peers.Where(p => p?.Id != state.Id).ToList();
         return(peersThatAreNotThisServer);
     };
 }
Exemple #6
0
 public Node(
     IFiniteStateMachine fsm,
     ILog log,
     ISettings settings,
     IPeersProvider peersProvider,
     ILoggerFactory loggerFactory)
 {
     _loggerFactory = loggerFactory;
     _logger        = _loggerFactory.CreateLogger <Node>();
     _fsm           = fsm;
     _log           = log;
     _random        = new RandomDelay();
     _settings      = settings;
     _peersProvider = peersProvider;
     _getPeers      = state => {
         var peers = _peersProvider.Get();
         var peersThatAreNotThisServer = peers.Where(p => p?.Id != state.Id).ToList();
         return(peersThatAreNotThisServer);
     };
 }
Exemple #7
0
        /// <summary>
        /// Open opens the store. If enableSingle is set, and there are no existing peers,
        /// then this node becomes the first node, and therefore leader, of the cluster.
        /// </summary>
        /// <param name="enableSingle"></param>
        public void Open(bool enableSingle)
        {
            lock (closedMu)
            {
                if (closed)
                {
                    throw new StoreInvalidStateException();
                }
                logger.LogInformation($"opening store with node ID {ID}");
                logger.LogInformation($"ensuring directory at {Path} exists");
                var di = Directory.CreateDirectory(Path);
                //di.GetAccessControl().SetAccessRule(new FileSystemAccessRule()) //TODO: Set perms to 0755

                // Create underlying database.
                createDatabase();


                // Get utility connection to database.
                dbConn = db.Connect();

                conns.Add(defaultConnID, new StoreConnection(dbConn, this, defaultConnID, TimeSpan.Zero, TimeSpan.Zero));

                // Is this a brand new node?
                var raftLogDbPath = System.IO.Path.Combine(Path, "raft.db");
                var newNode       = !File.Exists(raftLogDbPath);
                raftLog = new Raft.SQLiteLog(raftLogDbPath, new NodeId(ID), Logging.LoggerFactory);

                /*
                 *              // Create Raft-compatible network layer.
                 *              raftTn = raft.NewNetworkTransport(NewTransport(ln),
                 *      connectionPoolCount, connectionTimeout, nil);
                 *
                 *              // Get the Raft configuration for this store.
                 *              var config = raftConfig();
                 *
                 *              config.LocalID = raft.ServerID(s.raftID);
                 *
                 *              config.Logger = log.New(os.Stderr, "[raft] ", log.LstdFlags);
                 *
                 *              // Create the snapshot store. This allows Raft to truncate the log.
                 *              snapshots, err:= raft.NewFileSnapshotStore(s.raftDir, retainSnapshotCount, os.Stderr)
                 *
                 *  if err != nil {
                 *                  return fmt.Errorf("file snapshot store: %s", err)
                 *
                 *  }
                 *
                 *              // Create the log store and stable store.
                 *              s.boltStore, err = raftboltdb.NewBoltStore(filepath.Join(s.raftDir, "raft.db"))
                 *
                 *  if err != nil {
                 *                  return fmt.Errorf("new bolt store: %s", err)
                 *
                 *  }
                 *              s.raftStable = s.boltStore
                 *
                 *  s.raftLog, err = raft.NewLogCache(raftLogCacheSize, s.boltStore)
                 *
                 *  if err != nil {
                 *                  return fmt.Errorf("new cached store: %s", err)
                 *
                 *  }
                 */
                raftPeers = new PeersProvider();
                // Instantiate the Raft system.
                raft = new Node(this, raftLog, raftSettings, raftPeers, Logging.LoggerFactory);
                // ra, err:= raft.NewRaft(config, s, s.raftLog, s.raftStable, snapshots, s.raftTn)

                //     if err != nil {
                //     return fmt.Errorf("new raft: %s", err)

                //     }

                /*
                 *
                 *          if enableSingle && newNode {
                 *              s.logger.Printf("bootstrap needed")
                 *
                 *
                 *  configuration:= raft.Configuration{
                 *              Servers: []raft.Server{
                 *                      {
                 *                      ID: config.LocalID,
                 *              Address: raftTn.LocalAddr(),
                 *          },
                 *      },
                 *  }
                 *              ra.BootstrapCluster(configuration)
                 *
                 *
                 * }
                 *          else
                 *          {
                 *              logger.Printf("no bootstrap needed")
                 *
                 *
                 * }
                 *
                 *          raft = ra
                 */
                // Start connection monitoring
                checkConnections();
            }
        }