public DistributorApi(DistributorNetConfiguration netConfiguration, DistributorConfiguration distributorConfiguration, CommonConfiguration commonConfiguration) : this( netConfiguration, distributorConfiguration, commonConfiguration, new TimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout)) { }
public DistributorApi(DistributorNetConfiguration netConfiguration, DistributorConfiguration distributorConfiguration, CommonConfiguration commonConfiguration, TimeoutConfiguration timeoutConfiguration) { Contract.Requires(netConfiguration != null); Contract.Requires(distributorConfiguration != null); Contract.Requires(commonConfiguration != null); Contract.Requires(timeoutConfiguration != null); var dbServer = new ServerId(netConfiguration.Host, netConfiguration.PortForStorage); var proxyServer = new ServerId(netConfiguration.Host, netConfiguration.PortForProxy); var distrHash = new DistributorHashConfiguration(distributorConfiguration.CountReplics); var queue = new QueueConfiguration(commonConfiguration.CountThreads, commonConfiguration.QueueSize); var connection = new ConnectionConfiguration(netConfiguration.WcfServiceName, netConfiguration.CountConnectionsToSingleServer); var distrCache = new DistributorCacheConfiguration(distributorConfiguration.DataAliveTime, distributorConfiguration.DataAliveAfterUpdate); var dbNetReceive = new NetReceiverConfiguration(netConfiguration.PortForStorage, netConfiguration.Host, netConfiguration.WcfServiceName); var proxyNetReceive = new NetReceiverConfiguration(netConfiguration.PortForProxy, netConfiguration.Host, netConfiguration.WcfServiceName); var transaction = new TransactionConfiguration(commonConfiguration.CountThreads); var hashMap = new HashMapConfiguration(distributorConfiguration.FileWithHashName, HashMapCreationMode.ReadFromFile, 1, distributorConfiguration.CountReplics, HashFileType.Distributor); var asyncPing = new AsyncTasksConfiguration(distributorConfiguration.PingPeriod); var asyncCheck = new AsyncTasksConfiguration(distributorConfiguration.CheckPeriod); var timeou = new ConnectionTimeoutConfiguration(timeoutConfiguration.OpenTimeout, timeoutConfiguration.SendTimeout); _distributorSystem = new DistributorSystem(dbServer, proxyServer, distrHash, queue, connection, distrCache, dbNetReceive, proxyNetReceive, transaction, hashMap, asyncPing, asyncCheck, timeou); _handler = new DistributorHandler(_distributorSystem); }
public void Initialize() { var common = new CommonConfiguration(1, 100); var distrNet = new DistributorNetConfiguration("localhost", distrServer1, distrServer12, "testService", 10); var distrConf = new DistributorConfiguration(1, "TestRestore", TimeSpan.FromMilliseconds(10000000), TimeSpan.FromMilliseconds(500000), TimeSpan.FromMinutes(100), TimeSpan.FromMilliseconds(10000000)); _distr = new DistributorApi(distrNet, distrConf, common); _distr.Build(); var netconfig = new NetConfiguration("localhost", proxyServer, "testService", 10); var toconfig = new ProxyConfiguration(TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(10)); _proxy = new TestGate(netconfig, toconfig, common); _proxy.Build(); _distrTest = new TestDistributorGate(); _writer1 = new TestWriterGate(); _writer2 = new TestWriterGate(); _writer3 = new TestWriterGate(); }
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(); }
public void DistributorApi_ProcessAsyncOperationsFromProxy() { const int proxyServer = 22213; const int distrServer1 = 22214; const int distrServer12 = 22215; const int storageServer = 22216; #region hell var writer = new HashWriter(new HashMapConfiguration("TestClientDistributor", HashMapCreationMode.CreateNew, 1, 1, HashFileType.Distributor)); writer.CreateMap(); writer.SetServer(0, "localhost", storageServer, 157); writer.Save(); 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 common = new CommonConfiguration(1, 100); var proxy = new TestGate(netconfig, toconfig, common); var distrNet = new DistributorNetConfiguration("localhost", distrServer1, distrServer12, "testService", 10); var distrConf = new DistributorConfiguration(1, "TestClientDistributor", TimeSpan.FromMilliseconds(100000), TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(1), TimeSpan.FromMilliseconds(10000)); var distr = new DistributorApi(distrNet, distrConf, common); var storageNet = new StorageNetConfiguration("localhost", storageServer, 157, "testService", 10); var storageConfig = new StorageConfiguration("TestClientDistributor", 1, 10, TimeSpan.FromHours(1), TimeSpan.FromHours(1), TimeSpan.FromHours(1), TimeSpan.FromHours(1), false); var storage = new WriterApi(storageNet, storageConfig, common); #endregion proxy.Build(); proxy.Start(); distr.Build(); distr.Start(); proxy.Int.SayIAmHere("localhost", distrServer1); storage.Build(); storage.AddDbModule(new TestInMemoryDbFactory()); storage.Start(); const int count = 50; for (int i = 0; i < count; i++) { var state = proxy.Int.CreateSync(i, i); Assert.AreEqual(RequestState.Complete, state.State); } for (int i = 0; i < count; i++) { RequestDescription description; var read = proxy.Int.Read(i, out description); Assert.AreEqual(i, read); Assert.AreEqual(RequestState.Complete, description.State); } for (int i = 0; i < count; i++) { var state = proxy.Int.DeleteSync(i); Assert.AreEqual(RequestState.Complete, state.State); } for (int i = 0; i < count; i++) { RequestDescription description; proxy.Int.Read(i, out description); Assert.AreEqual(RequestState.DataNotFound, description.State); } proxy.Dispose(); distr.Dispose(); storage.Dispose(); }
public void Proxy_Restore_HashFromValue() { const int distrServer1 = 22403; const int distrServer12 = 22404; const int st1 = 22405; const int st2 = 22406; const int st3 = 22407; const int st4 = 22408; #region hell var writer = new HashWriter(new HashMapConfiguration("TestHashFromValue", HashMapCreationMode.CreateNew, 2, 2, HashFileType.Distributor)); writer.CreateMap(); writer.SetServer(0, "localhost", st1, st2); writer.SetServer(1, "localhost", st3, st4); writer.Save(); var common = new CommonConfiguration(1, 100); var distrNet = new DistributorNetConfiguration("localhost", distrServer1, distrServer12, "testService", 10); var distrConf = new DistributorConfiguration(1, "TestHashFromValue", TimeSpan.FromMilliseconds(100000), TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(1), TimeSpan.FromMilliseconds(10000)); var distr = new DistributorApi(distrNet, distrConf, common); var storageNet1 = new StorageNetConfiguration("localhost", st1, st2, "testService", 10); var storageNet2 = new StorageNetConfiguration("localhost", st3, st4, "testService", 10); var storageConfig = new StorageConfiguration("TestHashFromValue", 1, 10, TimeSpan.FromHours(1), TimeSpan.FromHours(1), TimeSpan.FromHours(1), TimeSpan.FromHours(1), false); var storage1 = new WriterApi(storageNet1, storageConfig, common); var storage2 = new WriterApi(storageNet2, storageConfig, common); #endregion storage1.Build(); storage2.Build(); distr.Build(); var f1 = new TestInMemoryDbFactory("Int3", new IntHashConvertor()); var f2 = new TestInMemoryDbFactory("Int3", new IntHashConvertor()); storage1.AddDbModule(f1); storage2.AddDbModule(f2); storage1.Start(); _proxy.Start(); distr.Start(); _proxy.Int.SayIAmHere("localhost", distrServer1); const int count = 50; for (int i = 0; i < count; i++) { _proxy.Int3.CreateSync(i, i); _proxy.Int3.CreateSync(i, i); } for (int i = 0; i < count; i++) { RequestDescription result; var value = _proxy.Int3.Read(i, out result); Assert.AreEqual(RequestState.Complete, result.State); Assert.AreEqual(i, value); } Assert.AreEqual(count, f1.Db.Local + f1.Db.Remote); storage2.Start(); storage2.Api.Restore(new ServerAddress("localhost", distrServer12), false); Thread.Sleep(TimeSpan.FromMilliseconds(2000)); Assert.AreEqual(count, f1.Db.Local + f2.Db.Local); Assert.AreEqual(0, f1.Db.Remote); Assert.AreEqual(0, f2.Db.Remote); _proxy.Dispose(); distr.Dispose(); storage1.Dispose(); storage2.Dispose(); }
public void Proxy_CRUD_TwoTables() { const int distrServer1 = 22379; const int distrServer12 = 22380; const int st1 = 22381; const int st2 = 22382; #region hell var writer = new HashWriter(new HashMapConfiguration("Test2Crud", HashMapCreationMode.CreateNew, 1, 1, HashFileType.Distributor)); writer.CreateMap(); writer.SetServer(0, "localhost", st1, st2); writer.Save(); var common = new CommonConfiguration(1, 100); var distrNet = new DistributorNetConfiguration("localhost", distrServer1, distrServer12, "testService", 10); var distrConf = new DistributorConfiguration(1, "Test2Crud", 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("Test2Crud", 1, 10, TimeSpan.FromHours(1), TimeSpan.FromHours(1), TimeSpan.FromHours(1), TimeSpan.FromHours(1), false); var storage = new WriterApi(storageNet, storageConfig, common); #endregion storage.Build(); distr.Build(); var f = new TestInMemoryDbFactory(); var f2 = new TestInMemoryDbFactory("Int2"); storage.AddDbModule(f); storage.AddDbModule(f2); storage.Start(); _proxy.Start(); distr.Start(); _proxy.Int.SayIAmHere("localhost", distrServer1); const int count = 5; for (int i = 0; i < count; i++) { RequestDescription result; _proxy.Int.Read(i, out result); Assert.AreEqual(RequestState.DataNotFound, result.State); _proxy.Int2.Read(i, out result); Assert.AreEqual(RequestState.DataNotFound, result.State); } for (int i = 0; i < count; i++) { RequestDescription result = _proxy.Int.CreateSync(i, i); Assert.AreEqual(RequestState.Complete, result.State); result = _proxy.Int2.CreateSync(i, i); Assert.AreEqual(RequestState.Complete, result.State); } for (int i = 0; i < count; i++) { RequestDescription result; var value = _proxy.Int.Read(i, out result); Assert.AreEqual(RequestState.Complete, result.State); Assert.AreEqual(i, value); value = _proxy.Int2.Read(i, out result); Assert.AreEqual(i, value); } Assert.AreEqual(count, f.Db.Local); Assert.AreEqual(count, f2.Db.Local); _proxy.Dispose(); distr.Dispose(); storage.Dispose(); }