예제 #1
0
 public ValuesController(
     IDataRouter router,
     ClusterClient clusterClient,
     NodeStateService node,
     IStateMachine <TestState> stateMachine)
 {
     _clusterClient = clusterClient;
     _router        = (TestDataRouter)router;
     _node          = node;
     _stateMachine  = stateMachine;
 }
예제 #2
0
        /* public static RaftService<TestState> GetTestConsensusCoreNode()
         * {
         *   var moqClusterOptions = new Mock<IOptions<ClusterOptions>>();
         *   moqClusterOptions.Setup(mqo => mqo.Value).Returns(new ClusterOptions()
         *   {
         *       NodeUrls = "localhost:5022",
         *       TestMode = true,
         *       NumberOfShards = 1,
         *       DataTransferTimeoutMs = 1000,
         *       ElectionTimeoutMs = 1000,
         *       LatencyToleranceMs = 1000,
         *       MinimumNodes = 1
         *   });
         *
         *   var moqNodeOptions = new Mock<IOptions<NodeOptions>>();
         *   moqNodeOptions.Setup(mqo => mqo.Value).Returns(new NodeOptions() { });
         *
         *   var serviceProvider = new ServiceCollection()
         *   .AddLogging()
         *   .BuildServiceProvider();
         *
         *   var factory = serviceProvider.GetService<ILoggerFactory>();
         *
         *   var logger = factory.CreateLogger<RaftService<TestState>>();
         *
         *   NodeInMemoryRepository<TestState> inMemoryRepository = new NodeInMemoryRepository<TestState>();
         *   var NodeStorage = new NodeStorage<TestState>(inMemoryRepository) { };
         *   var _dataRouter = new TestDataRouter();
         *   var _stateMachine = new StateMachine<TestState>();
         *   var _connector = new ClusterClient(TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(1000));
         *
         *   return new ConsensusCoreNode<TestState>(moqClusterOptions.Object,
         *   moqNodeOptions.Object,
         *   logger,
         *   _stateMachine,
         *   inMemoryRepository,
         *  _connector,
         *   _dataRouter,
         *   new ShardManager<TestState, IShardRepository>(_stateMachine,
         *       factory.CreateLogger<ShardManager<TestState, IShardRepository>>(),
         *   _connector,
         *   _dataRouter,
         *   moqClusterOptions.Object,
         *       inMemoryRepository),
         *   NodeStorage
         *   );
         * }*/

        public static DataService <TestState> GetTestShardManager()
        {
            var serviceProvider = new ServiceCollection()
                                  .AddLogging()
                                  .BuildServiceProvider();
            var _stateMachine = new StateMachine <TestState>()
            {
            };
            var factory = serviceProvider.GetService <ILoggerFactory>();
            NodeInMemoryRepository <TestState> inMemoryRepository = new NodeInMemoryRepository <TestState>();
            var _dataRouter       = new TestDataRouter();
            var moqClusterOptions = new Mock <IOptions <ClusterOptions> >();

            var moqNodeOptions = new Mock <IOptions <NodeOptions> >();

            moqNodeOptions.Setup(mqo => mqo.Value).Returns(new NodeOptions()
            {
            });
            Guid nodeStorageId = Guid.NewGuid();
            var  NodeStorage   = new NodeStorage <TestState>(factory.CreateLogger <NodeStorage <TestState> >(), inMemoryRepository)
            {
                Id = nodeStorageId
            };
            var nodeStateService = new NodeStateService()
            {
                Id = nodeStorageId
            };
            var services   = new ServiceCollection();
            var provider   = services.BuildServiceProvider();
            var _connector = new ClusterClient(new ClusterConnectionPool <TestState>(_stateMachine, TimeSpan.FromMilliseconds(10000), TimeSpan.FromMilliseconds(1000)), provider, nodeStateService);

            _stateMachine.ApplyLogsToStateMachine(new List <ConsensusCore.Domain.Models.LogEntry>()
            {
                new ConsensusCore.Domain.Models.LogEntry()
                {
                    Commands = new List <BaseCommand>()
                    {
                        new CreateIndex()
                        {
                            Type   = "number",
                            Shards = new List <ShardAllocationMetadata>()
                            {
                                new ShardAllocationMetadata()
                                {
                                    Id = DefaultShardId,
                                    InsyncAllocations = new HashSet <Guid>()
                                    {
                                        nodeStorageId
                                    },
                                    PrimaryAllocation = nodeStorageId,
                                    Type             = "number",
                                    StaleAllocations = new HashSet <Guid>()
                                }
                            }
                        }
                    }
                }
            });

            moqClusterOptions.Setup(mqo => mqo.Value).Returns(new ClusterOptions()
            {
                NodeUrls              = "localhost:5022",
                TestMode              = true,
                NumberOfShards        = 1,
                DataTransferTimeoutMs = 1000,
                ElectionTimeoutMs     = 1000,
                LatencyToleranceMs    = 1000,
                MinimumNodes          = 1
            });


            var manager = new DataService <TestState>(
                factory,
                inMemoryRepository,
                _dataRouter,
                _stateMachine,
                nodeStateService,
                _connector,
                moqClusterOptions.Object,
                inMemoryRepository,
                moqNodeOptions.Object
                );

            return(manager);
        }