Exemplo n.º 1
0
        public override void Build()
        {
            var async = new AsyncTaskModule(new QueueConfiguration(4, 10));

            var distributor = new DistributorModule(
                new CollectorModel(_distributorHashConfiguration, _hashMapConfiguration, _useHashFile), async,
                new AsyncTasksConfiguration(TimeSpan.FromSeconds(10)));

            var net = new CollectorNetModule(_connectionConfiguration, _connectionTimeoutConfiguration, distributor);

            distributor.SetNetModule(net);

            var back   = new BackgroundModule(_queueConfiguration);
            var loader = new DataLoader(net, _serverPageSize, back);

            var searchModule = new SearchTaskCommonModule(loader, distributor, back);

            CreateApi   = searchModule.CreateApi;
            Distributor = distributor;


            AddModule(back);
            AddModule(net);
            AddModule(loader);
            AddModule(distributor);
            AddModule(searchModule);
            AddModule(async);

            AddModuleDispose(async);
            AddModuleDispose(searchModule);
            AddModuleDispose(loader);
            AddModuleDispose(back);
            AddModuleDispose(net);
            AddModuleDispose(distributor);
        }
Exemplo n.º 2
0
 public DistributorModule(CollectorModel model, AsyncTaskModule asyncTaskModule,
                          AsyncTasksConfiguration asyncPing)
 {
     _model           = model;
     _asyncTaskModule = asyncTaskModule;
     _asyncPing       = asyncPing;
 }
Exemplo n.º 3
0
        public DistributorModule(
            AsyncTasksConfiguration asyncPing,
            AsyncTasksConfiguration asyncCheck,
            DistributorHashConfiguration configuration,
            QueueConfiguration queueConfiguration,
            DistributorNetModule distributorNet,
            ServerId localfordb,
            ServerId localforproxy,
            HashMapConfiguration hashMapConfiguration)
        {
            Contract.Requires(configuration != null);
            Contract.Requires(queueConfiguration != null);
            Contract.Requires(distributorNet != null);
            Contract.Requires(localfordb != null);
            Contract.Requires(localforproxy != null);
            Contract.Requires(asyncPing != null);
            _asyncPing       = asyncPing;
            _asyncTaskModule = new AsyncTaskModule(queueConfiguration);

            _queueConfiguration         = queueConfiguration;
            _modelOfDbWriters           = new WriterSystemModel(configuration, hashMapConfiguration);
            _modelOfAnotherDistributors = new DistributorSystemModel();
            _distributorNet             = distributorNet;
            _localfordb    = localfordb;
            _localforproxy = localforproxy;
            _asyncCheck    = asyncCheck;
            _queue         = GlobalQueue.Queue;
        }
Exemplo n.º 4
0
        public DistributorModule(AsyncTaskModule async, AsyncDbWorkModule asyncDbWork,
                                 WriterNetModule writerNet,
                                 ServerId local,
                                 HashMapConfiguration hashMapConfiguration,
                                 QueueConfiguration configuration,
                                 DbModuleCollection dbModuleCollection,
                                 AsyncTasksConfiguration pingConfiguration = null)
        {
            Contract.Requires(local != null);
            Contract.Requires(writerNet != null);
            Contract.Requires(configuration != null);
            Contract.Requires(asyncDbWork != null);
            Contract.Requires(async != null);
            Contract.Assert(dbModuleCollection != null);

            _async              = async;
            _asyncDbWork        = asyncDbWork;
            _model              = new WriterModel(local, hashMapConfiguration);
            _writerNet          = writerNet;
            _queueConfiguration = configuration;
            _dbModuleCollection = dbModuleCollection;
            _queue              = GlobalQueue.Queue;

            var ping = TimeSpan.FromMinutes(1);

            if (pingConfiguration != null)
            {
                ping = pingConfiguration.TimeoutPeriod;
            }

            _async.AddAsyncTask(
                new AsyncDataPeriod(ping, Ping, AsyncTasksNames.AsyncPing, -1), false);
        }
Exemplo n.º 5
0
        public void Build(int storageServer, string hashFile, int countReplics)
        {
            Q = new GlobalQueueInner();
            GlobalQueue.SetQueue(Q);

            var queueConfiguration   = new QueueConfiguration(1, 1000);
            var hashMapConfiguration = new HashMapConfiguration(hashFile,
                                                                HashMapCreationMode.ReadFromFile, 1, countReplics, HashFileType.Writer);
            var local = new ServerId("localhost", storageServer);

            _net = new WriterNetModule(new ConnectionConfiguration("testService", 10),
                                       new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));

            Db = new DbModuleCollection();
            Db.AddDbModule(new TestDbInMemory());

            _async  = new AsyncTaskModule(new QueueConfiguration(1, 10));
            Restore = new AsyncDbWorkModule(_net, _async, Db,
                                            new RestoreModuleConfiguration(10, TimeSpan.FromMinutes(100)),
                                            new RestoreModuleConfiguration(10, TimeSpan.FromMilliseconds(100)),
                                            new RestoreModuleConfiguration(-1, TimeSpan.FromHours(1), false, TimeSpan.FromHours(1)),
                                            new QueueConfiguration(1, 100), local);

            Distributor = new DistributorModule(_async, Restore, _net, local,
                                                hashMapConfiguration, new QueueConfiguration(2, 10), Db);
            _mainС = new MainLogicModule(Distributor, Db);
            Input  = new InputModule(_mainС, queueConfiguration);
            _netRc = new NetWriterReceiver(Input, Distributor,
                                           new NetReceiverConfiguration(storageServer, "localhost", "testService"),
                                           new NetReceiverConfiguration(1, "fake", "fake"));
        }
Exemplo n.º 6
0
 public InitiatorRestoreModule(RestoreModuleConfiguration configuration, WriterNetModule writerNet,
                               AsyncTaskModule asyncTaskModule) : base(writerNet, asyncTaskModule)
 {
     Contract.Requires(configuration != null);
     _configuration = configuration;
     _lock          = new ReaderWriterLockSlim();
 }
Exemplo n.º 7
0
 public CommonAsyncWorkModule(WriterNetModule writerNet, AsyncTaskModule asyncTaskModule)
 {
     Contract.Requires(writerNet != null);
     Contract.Requires(asyncTaskModule != null);
     _asyncTaskModule = asyncTaskModule;
     WriterNet        = writerNet;
     _isStart         = false;
 }
Exemplo n.º 8
0
 public ProxyDistributorModule(AsyncProxyCache asyncProxyCache, ProxyNetModule net,
                               QueueConfiguration queueConfiguration, ServerId local,
                               AsyncTasksConfiguration asyncGetData, AsyncTasksConfiguration asyncPing)
 {
     _asyncProxyCache        = asyncProxyCache;
     _asynPing               = asyncPing;
     _queueConfiguration     = queueConfiguration;
     _distributorSystemModel = new DistributorSystemModel();
     _asynGetData            = asyncGetData;
     _net   = net;
     _local = local;
     _async = new AsyncTaskModule(queueConfiguration);
     _queue = GlobalQueue.Queue;
 }
Exemplo n.º 9
0
        public TimeoutModule(WriterNetModule net, AsyncTaskModule asyncTaskModule,
                             QueueConfiguration queueConfiguration, DbModuleCollection db,
                             RestoreModuleConfiguration configuration)
            : base(net, asyncTaskModule)
        {
            _queueConfiguration = queueConfiguration;
            _db            = db;
            _queue         = GlobalQueue.Queue.DbTimeoutQueue;
            _deleteTimeout = configuration.DeleteTimeout;

            _asyncTaskModule.AddAsyncTask(
                new AsyncDataPeriod(configuration.PeriodRetry, PeriodMessage,
                                    AsyncTasksNames.TimeoutDelete, -1), configuration.IsForceStart);
        }
Exemplo n.º 10
0
        public TransferRestoreModule(RestoreModuleConfiguration configuration, WriterNetModule writerNet,
                                     AsyncTaskModule asyncTaskModule, DbModuleCollection db, ServerId local,
                                     QueueConfiguration queueConfiguration)
            : base(writerNet, asyncTaskModule)
        {
            Contract.Requires(configuration != null);
            Contract.Requires(db != null);
            Contract.Requires(local != null);
            Contract.Requires(queueConfiguration != null);

            _queue              = GlobalQueue.Queue;
            _db                 = db;
            _configuration      = configuration;
            _local              = local;
            _queueConfiguration = queueConfiguration;
        }
Exemplo n.º 11
0
        public void AsyncTaskModule_Dispose_StopAsyncTaskAfterNumberOfRetry()
        {
            var          test   = new AsyncTaskModule(new QueueConfiguration(2, -1));
            int          value  = 0;
            const string name1  = "test1";
            var          async1 = new AsyncDataPeriod(TimeSpan.FromMilliseconds(100), async => Interlocked.Increment(ref value),
                                                      name1, 4);

            test.Start();

            test.AddAsyncTask(async1, true);
            Thread.Sleep(TimeSpan.FromMilliseconds(800));
            Assert.AreEqual(4, value);

            test.Dispose();
        }
Exemplo n.º 12
0
        public override void Build()
        {
            var q = new GlobalQueueInner();

            GlobalQueue.SetQueue(q);

            var db = new DbModuleCollection();

            var net = new WriterNetModule(_connectionConfiguration, _connectionTimeoutConfiguration);

            var async   = new AsyncTaskModule(_queueConfiguration);
            var restore = new AsyncDbWorkModule(net, async, db, _initiatorRestoreConfiguration,
                                                _transferRestoreConfiguration, _timeoutRestoreConfiguration,
                                                _queueConfigurationRestore, _local, _isNeedRestore);

            var distributor = new DistributorModule(async, restore, net, _local, _hashMapConfiguration,
                                                    _queueConfiguration, db);

            Distributor = distributor;
            DbModule    = db;

            var main     = new MainLogicModule(distributor, db);
            var input    = new InputModule(main, _queueConfiguration);
            var receiver = new NetWriterReceiver(input, distributor, _receiverConfigurationForWrite,
                                                 _receiverConfigurationForCollector);

            AddModule(distributor);
            AddModule(input);
            AddModule(db);
            AddModule(async);
            AddModule(restore);
            AddModule(main);
            AddModule(receiver);
            AddModule(q);

            AddModuleDispose(receiver);
            AddModuleDispose(restore);
            AddModuleDispose(async);
            AddModuleDispose(q);
            AddModuleDispose(input);
            AddModuleDispose(main);
            AddModuleDispose(distributor);
            AddModuleDispose(db);
            AddModuleDispose(net);
        }
Exemplo n.º 13
0
        public void AsyncTaskModule_AddAsyncTask_AmountOfOperations_2Tasks()
        {
            var          test   = new AsyncTaskModule(new QueueConfiguration(2, -1));
            int          value  = 0;
            const string name1  = "test1";
            const string name2  = "test2";
            var          async1 = new AsyncDataPeriod(TimeSpan.FromMilliseconds(500), async => Interlocked.Increment(ref value),
                                                      name1, -1);
            var async2 = new AsyncDataPeriod(TimeSpan.FromMilliseconds(500), async => Interlocked.Increment(ref value),
                                             name2, -1);

            test.Start();

            test.AddAsyncTask(async1, true);
            test.AddAsyncTask(async2, true);
            Thread.Sleep(TimeSpan.FromMilliseconds(300));
            Assert.AreEqual(2, value);

            Thread.Sleep(TimeSpan.FromMilliseconds(500));
            Assert.AreEqual(4, value);

            test.Dispose();
        }
Exemplo n.º 14
0
        public AsyncDbWorkModule(WriterNetModule writerNet, AsyncTaskModule async, DbModuleCollection db,
                                 RestoreModuleConfiguration initiatorConfiguration,
                                 RestoreModuleConfiguration transferConfiguration,
                                 RestoreModuleConfiguration timeoutConfiguration,
                                 QueueConfiguration queueConfiguration, ServerId local, bool isNeedRestore = false)
        {
            Contract.Requires(initiatorConfiguration != null);
            Contract.Requires(transferConfiguration != null);
            Contract.Requires(timeoutConfiguration != null);
            Contract.Requires(queueConfiguration != null);
            Contract.Requires(db != null);
            Contract.Requires(writerNet != null);
            Contract.Requires(async != null);
            Contract.Requires(local != null);

            _stateHelper = new RestoreStateHelper(isNeedRestore);

            _initiatorRestore = new InitiatorRestoreModule(initiatorConfiguration, writerNet, async);
            _transfer         = new TransferRestoreModule(transferConfiguration, writerNet, async,
                                                          db, local, queueConfiguration);
            _timeout = new TimeoutModule(writerNet, async, queueConfiguration,
                                         db, timeoutConfiguration);
        }
Exemplo n.º 15
0
        public void CollectorNet_ReadFromWriter()
        {
            const int proxyServer   = 22337;
            const int distrServer1  = 22338;
            const int distrServer12 = 22339;
            const int st1           = 22335;
            const int st2           = 22336;

            #region hell

            var writer = new HashWriter(new HashMapConfiguration("TestCollectorNet", HashMapCreationMode.CreateNew, 1, 1, HashFileType.Distributor));
            writer.CreateMap();
            writer.SetServer(0, "localhost", st1, st2);
            writer.Save();

            var common = new CommonConfiguration(1, 100);

            var netconfig = new NetConfiguration("localhost", proxyServer, "testService", 10);
            var toconfig  = new ProxyConfiguration(TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(1),
                                                   TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(10));

            var proxy = new TestGate(netconfig, toconfig, common);

            var distrNet = new DistributorNetConfiguration("localhost",
                                                           distrServer1, distrServer12, "testService", 10);
            var distrConf = new DistributorConfiguration(1, "TestCollectorNet",
                                                         TimeSpan.FromMilliseconds(100000), TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(1), TimeSpan.FromMilliseconds(10000));

            var distr = new DistributorApi(distrNet, distrConf, common);

            var storageNet    = new StorageNetConfiguration("localhost", st1, st2, "testService", 10);
            var storageConfig = new StorageConfiguration("TestCollectorNet", 1, 10, TimeSpan.FromHours(1), TimeSpan.FromHours(1),
                                                         TimeSpan.FromHours(1), TimeSpan.FromHours(1), false);

            var storage     = new WriterApi(storageNet, storageConfig, common);
            var async       = new AsyncTaskModule(new QueueConfiguration(4, 10));
            var distributor =
                new DistributorModule(new CollectorModel(new DistributorHashConfiguration(1),
                                                         new HashMapConfiguration("TestCollectorNet", HashMapCreationMode.ReadFromFile, 1, 1,
                                                                                  HashFileType.Collector)), async, new AsyncTasksConfiguration(TimeSpan.FromMinutes(1)));

            var net = new CollectorNetModule(new ConnectionConfiguration("testService", 10),
                                             new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout), distributor);

            distributor.SetNetModule(net);

            var back   = new BackgroundModule(new QueueConfiguration(5, 10));
            var loader = new DataLoader(net, 100, back);

            var parser = new TestIntParser();
            parser.SetCommandsHandler(
                new UserCommandsHandler <TestCommand, Type, TestCommand, int, int, TestDbReader>(
                    new TestUserCommandCreator(), new TestMetaDataCommandCreator()));
            var merge = new OrderMerge(loader, parser);

            var searchModule = new SearchTaskModule("Int", merge, loader, distributor, back, parser);

            storage.Build();
            proxy.Build();
            distr.Build();

            storage.AddDbModule(new TestInMemoryDbFactory());

            storage.Start();
            proxy.Start();
            distr.Start();

            searchModule.Start();
            distributor.Start();
            merge.Start();
            back.Start();
            net.Start();
            async.Start();

            #endregion

            proxy.Int.SayIAmHere("localhost", distrServer1);

            const int count = 20;

            for (int i = 0; i < count; i++)
            {
                var request = proxy.Int.CreateSync(i, i);
                Assert.AreEqual(RequestState.Complete, request.State);
            }

            var reader = searchModule.CreateReader("asc", -1, 20);
            reader.Start();

            for (int i = 0; i < count; i++)
            {
                Assert.IsTrue(reader.IsCanRead);

                reader.ReadNext();

                Assert.AreEqual(i, reader.GetValue(0));
            }
            reader.ReadNext();
            Assert.IsFalse(reader.IsCanRead);

            reader.Dispose();
            back.Dispose();
            net.Dispose();

            storage.Dispose();
            proxy.Dispose();
            distr.Dispose();
            async.Dispose();
        }
Exemplo n.º 16
0
        public void SearchTaskModule_CreateReader_UnlimitDataReadAndUserPage()
        {
            var       server1  = new ServerId("", 1);
            var       server2  = new ServerId("", 2);
            var       server3  = new ServerId("", 3);
            const int pageSize = 5;
            var       writer   = new HashWriter(new HashMapConfiguration("TestCollector4", HashMapCreationMode.CreateNew, 3, 3, HashFileType.Distributor));

            writer.CreateMap();
            writer.SetServer(0, server1.RemoteHost, server1.Port, 157);
            writer.SetServer(1, server2.RemoteHost, server2.Port, 157);
            writer.SetServer(2, server3.RemoteHost, server3.Port, 157);
            writer.Save();

            var loader = new TestDataLoader(pageSize);
            var parser = new TestIntParser();

            parser.SetCommandsHandler(
                new UserCommandsHandler <TestCommand, Type, TestCommand, int, int, TestDbReader>(
                    new TestUserCommandCreator(), new TestMetaDataCommandCreator()));
            var merge       = new OrderMerge(loader, parser);
            var async       = new AsyncTaskModule(new QueueConfiguration(4, 10));
            var distributor =
                new DistributorModule(new CollectorModel(new DistributorHashConfiguration(1),
                                                         new HashMapConfiguration("TestCollector4", HashMapCreationMode.ReadFromFile, 1, 1,
                                                                                  HashFileType.Writer)), async, new AsyncTasksConfiguration(TimeSpan.FromMinutes(1)));
            var back = new BackgroundModule(new QueueConfiguration(5, 10));

            var searchModule = new SearchTaskModule("", merge, loader, distributor, back, parser);

            #region hell

            loader.Data.Add(server1, new List <SearchData>
            {
                TestHelper.CreateData(1),
                TestHelper.CreateData(2),
                TestHelper.CreateData(4),
                TestHelper.CreateData(5),
                TestHelper.CreateData(6),
                TestHelper.CreateData(7),
                TestHelper.CreateData(8),
            });

            loader.Data.Add(server2, new List <SearchData>
            {
                TestHelper.CreateData(4),
                TestHelper.CreateData(5),
                TestHelper.CreateData(6),
                TestHelper.CreateData(7),
                TestHelper.CreateData(8),
                TestHelper.CreateData(9),
                TestHelper.CreateData(10),
                TestHelper.CreateData(11),
            });

            loader.Data.Add(server3, new List <SearchData>
            {
                TestHelper.CreateData(2),
                TestHelper.CreateData(3),
                TestHelper.CreateData(5),
                TestHelper.CreateData(7),
                TestHelper.CreateData(8),
                TestHelper.CreateData(9),
                TestHelper.CreateData(10),
                TestHelper.CreateData(11),
                TestHelper.CreateData(12),
                TestHelper.CreateData(13),
            });

            #endregion

            searchModule.Start();
            distributor.Start();
            merge.Start();
            back.Start();
            async.Start();

            var reader = searchModule.CreateReader("asc", -1, 5);
            reader.Start();

            const int count = 13;
            for (int i = 0; i < count; i++)
            {
                Assert.IsTrue(reader.IsCanRead);

                reader.ReadNext();

                Assert.AreEqual(i + 1, reader.GetValue(0));
            }
            reader.ReadNext();
            Assert.IsFalse(reader.IsCanRead);

            reader.Dispose();
            async.Dispose();
            back.Dispose();
        }