Beispiel #1
0
        protected ProxyApi(NetConfiguration netConfiguration, ProxyConfiguration proxyConfiguration,
                           CommonConfiguration commonConfiguration, TimeoutConfiguration timeoutConfiguration)
        {
            Contract.Requires(netConfiguration != null);
            Contract.Requires(proxyConfiguration != null);
            Contract.Requires(commonConfiguration != null);
            Contract.Requires(timeoutConfiguration != null);

            _isStarted = false;
            _isBuild   = false;
            _isDispose = false;

            var server = new ServerId(netConfiguration.Host, netConfiguration.Port);
            var queue  = new QueueConfiguration(commonConfiguration.CountThreads, commonConfiguration.QueueSize);

            var connection = new ConnectionConfiguration(netConfiguration.WcfServiceName,
                                                         netConfiguration.CountConnectionsToSingleServer);
            var proxyCacheConfiguration  = new ProxyCacheConfiguration(proxyConfiguration.ChangeDistributorTimeoutSec);
            var proxyCacheConfiguration2 = new ProxyCacheConfiguration(proxyConfiguration.SyncOperationsTimeoutSec);
            var netReceiveConfiguration  = new NetReceiverConfiguration(netConfiguration.Port, netConfiguration.Host,
                                                                        netConfiguration.WcfServiceName);
            var async   = new AsyncTasksConfiguration(proxyConfiguration.AsyncUpdateTimeout);
            var ping    = new AsyncTasksConfiguration(proxyConfiguration.AsyncPingTimeout);
            var timeout = new ConnectionTimeoutConfiguration(timeoutConfiguration.OpenTimeout,
                                                             timeoutConfiguration.SendTimeout);

            _proxySystem = new ProxySystem(server, queue, connection,
                                           proxyCacheConfiguration, proxyCacheConfiguration2, netReceiveConfiguration, async, ping, timeout);

            _apis = new Dictionary <string, ProxyHandlerBase>();
        }
Beispiel #2
0
        public WriterSystem(ServerId local, QueueConfiguration queueConfiguration,
                            NetReceiverConfiguration receiverConfigurationForWrite,
                            NetReceiverConfiguration receiverConfigurationForCollector,
                            HashMapConfiguration hashMapConfiguration,
                            ConnectionConfiguration connectionConfiguration,
                            RestoreModuleConfiguration transferRestoreConfiguration,
                            RestoreModuleConfiguration initiatorRestoreConfiguration,
                            ConnectionTimeoutConfiguration connectionTimeoutConfiguration,
                            RestoreModuleConfiguration timeoutRestoreConfiguration,
                            bool isNeedRestore = false,
                            QueueConfiguration queueConfigurationRestore = null)
        {
            Contract.Requires(local != null);
            Contract.Requires(queueConfiguration != null);
            Contract.Requires(receiverConfigurationForWrite != null);
            Contract.Requires(receiverConfigurationForCollector != null);
            Contract.Requires(hashMapConfiguration != null);
            Contract.Requires(connectionConfiguration != null);
            Contract.Requires(transferRestoreConfiguration != null);
            Contract.Requires(initiatorRestoreConfiguration != null);

            _queueConfigurationRestore = queueConfigurationRestore ?? new QueueConfiguration(1, 1000);

            _queueConfiguration                = queueConfiguration;
            _receiverConfigurationForWrite     = receiverConfigurationForWrite;
            _receiverConfigurationForCollector = receiverConfigurationForCollector;
            _hashMapConfiguration              = hashMapConfiguration;
            _connectionConfiguration           = connectionConfiguration;
            _initiatorRestoreConfiguration     = initiatorRestoreConfiguration;
            _connectionTimeoutConfiguration    = connectionTimeoutConfiguration;
            _timeoutRestoreConfiguration       = timeoutRestoreConfiguration;
            _isNeedRestore = isNeedRestore;
            _transferRestoreConfiguration = transferRestoreConfiguration;
            _local = local;
        }
Beispiel #3
0
        public ProxySystem(ServerId local, QueueConfiguration queueConfiguration,
                           ConnectionConfiguration connectionConfiguration,
                           ProxyCacheConfiguration cacheConfiguration,
                           ProxyCacheConfiguration asyncCacheConfiguration,
                           NetReceiverConfiguration receiverConfiguration,
                           AsyncTasksConfiguration asyncGetData,
                           AsyncTasksConfiguration asyncPing, ConnectionTimeoutConfiguration connectionTimeoutConfiguration)
        {
            Contract.Requires(queueConfiguration != null);
            Contract.Requires(connectionConfiguration != null);
            Contract.Requires(cacheConfiguration != null);
            Contract.Requires(asyncCacheConfiguration != null);
            Contract.Requires(receiverConfiguration != null);
            Contract.Requires(asyncGetData != null);
            Contract.Requires(local != null);
            Contract.Requires(asyncPing != null);

            _local = local;
            _queueConfiguration       = queueConfiguration;
            _connectionConfiguration  = connectionConfiguration;
            _cacheConfiguration       = cacheConfiguration;
            _asyncCacheConfiguration  = asyncCacheConfiguration;
            _netReceiverConfiguration = receiverConfiguration;
            _asyncGetData             = asyncGetData;
            _asyncPing = asyncPing;
            _connectionTimeoutConfiguration = connectionTimeoutConfiguration;
        }
Beispiel #4
0
        public void Build(int countReplics, int distrServer1, int distrServer12, string hashFile)
        {
            _q = new GlobalQueueInner();
            GlobalQueue.SetQueue(_q);

            var connection = new ConnectionConfiguration("testService", 10);

            var distrconfig = new DistributorHashConfiguration(countReplics);
            var queueconfig = new QueueConfiguration(1, 100);

            _dnet = new DistributorNetModule(connection,
                                             new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));
            Distributor = new DistributorModule(new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                                new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)), distrconfig,
                                                queueconfig, _dnet,
                                                new ServerId("localhost", distrServer1),
                                                new ServerId("localhost", distrServer12),
                                                new HashMapConfiguration(hashFile,
                                                                         HashMapCreationMode.ReadFromFile,
                                                                         1, countReplics, HashFileType.Distributor));

            _dnet.SetDistributor(Distributor);

            _tranc = new TransactionModule(new QueueConfiguration(1, 1000), _dnet, new TransactionConfiguration(4),
                                           distrconfig);
            Main =
                new MainLogicModule(new DistributorTimeoutCache(TimeSpan.FromSeconds(200), TimeSpan.FromSeconds(200)),
                                    Distributor, _tranc);

            var netReceive1 = new NetReceiverConfiguration(distrServer1, "localhost", "testService");
            var netReceive2 = new NetReceiverConfiguration(distrServer12, "localhost", "testService");

            Input     = new InputModuleWithParallel(new QueueConfiguration(2, 100000), Main, _tranc);
            _receiver = new NetDistributorReceiver(Main, Input, Distributor, netReceive1, netReceive2);
        }
Beispiel #5
0
 public NetDistributorReceiverForDb(DistributorModule distributorModule,
                                    NetReceiverConfiguration receiverConfiguration)
     : base(receiverConfiguration)
 {
     Contract.Requires(distributorModule != null);
     _distributorModule = distributorModule;
 }
Beispiel #6
0
        public static ServiceHost CreateServer <T>(object server, NetReceiverConfiguration configuration)
        {
            var host = new ServiceHost(server,
                                       new Uri(string.Format("net.tcp://{0}:{1}/{2}", configuration.Host, configuration.Port,
                                                             configuration.Service)));

            var binding = new NetTcpBinding()
            {
                Security               = { Mode = SecurityMode.None },
                MaxBufferSize          = 2147483647,
                MaxReceivedMessageSize = 2147483647
            };
            var contractType = typeof(T);

            host.AddServiceEndpoint(contractType, binding, "");

            var behavior = host.Description.Behaviors.Find <ServiceBehaviorAttribute>();

            behavior.InstanceContextMode   = InstanceContextMode.Single;
            behavior.ConcurrencyMode       = ConcurrencyMode.Multiple;
            behavior.MaxItemsInObjectGraph = 2147483647;
            behavior.ReleaseServiceInstanceOnTransactionComplete = false;

            var test = host.Description.Behaviors.Find <ServiceDebugBehavior>();

            test.IncludeExceptionDetailInFaults = true;

            host.Open();

            return(host);
        }
Beispiel #7
0
 public NetDistributorReceiver(MainLogicModule main, IInputModule input, DistributorModule distributorModule,
                               NetReceiverConfiguration receiverConfigurationForDb,
                               NetReceiverConfiguration receiverConfigurationForFroxy)
 {
     _distributorReceiverForDb    = new NetDistributorReceiverForDb(distributorModule, receiverConfigurationForDb);
     _distributorReceiverForProxy = new NetDistributorReceiverForProxy(main, input, distributorModule,
                                                                       receiverConfigurationForFroxy);
 }
Beispiel #8
0
        public void MainLogicModule_TransactionAnswerResult_ReceiveAnswersFromWriter()
        {
            const int distrServer1 = 22168;
            const int distrServer2 = 23168;

            #region hell

            var connectionConf = new ConnectionConfiguration("testService", 10);

            var distrconfig = new DistributorHashConfiguration(1);
            var queueconfig = new QueueConfiguration(1, 100);
            var dnet        = new DistributorNetModule(connectionConf,
                                                       new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));
            var ddistributor = new DistributorModule(new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                                     new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)), distrconfig,
                                                     queueconfig, dnet,
                                                     new ServerId("localhost", distrServer1),
                                                     new ServerId("localhost", distrServer2),
                                                     new HashMapConfiguration("TestDistributorReceiveAndDbSendAsync",
                                                                              HashMapCreationMode.ReadFromFile,
                                                                              1, 1, HashFileType.Distributor));
            dnet.SetDistributor(ddistributor);

            var tranc = new TransactionModule(new QueueConfiguration(1, 1000), dnet, new TransactionConfiguration(4),
                                              distrconfig);
            var cache = new DistributorTimeoutCache(TimeSpan.FromMilliseconds(2000), TimeSpan.FromMilliseconds(200000));
            var main  = new MainLogicModule(cache, ddistributor, tranc);
            cache.SetMainLogicModule(main);

            var netReceive4  = new NetReceiverConfiguration(distrServer1, "localhost", "testService");
            var netReceive42 = new NetReceiverConfiguration(distrServer2, "localhost", "testService");
            var input        = new InputModuleWithParallel(new QueueConfiguration(2, 100000), main, tranc);
            var receiver4    = new NetDistributorReceiver(main, input,
                                                          ddistributor, netReceive4, netReceive42);

            ddistributor.Start();
            receiver4.Start();

            #endregion

            var t = 0;
            GlobalQueue.Queue.TransactionQueue.Registrate(data => Interlocked.Increment(ref t));
            GlobalQueue.Queue.Start();

            var connection = new SingleConnectionToDistributor(
                new ServerId("localhost", distrServer1), new ConnectionConfiguration("testService", 10),
                new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));
            connection.Connect();

            connection.TransactionAnswerResult(new Transaction("123", "123"));
            Thread.Sleep(TimeSpan.FromMilliseconds(100));
            connection.TransactionAnswerResult(new Transaction("1243", "1423"));
            Thread.Sleep(TimeSpan.FromMilliseconds(100));
            Assert.AreEqual(2, t);

            connection.Dispose();
            receiver4.Dispose();
        }
Beispiel #9
0
 public NetWriterReceiver(InputModule inputModule, DistributorModule distributor,
                          NetReceiverConfiguration receiverConfigurationForWrite,
                          NetReceiverConfiguration receiverConfigurationForCollector)
 {
     _writerReceiverForWrite = new NetWriterReceiverForWrite(inputModule, distributor,
                                                             receiverConfigurationForWrite);
     _writerReceiverForCollector = new NetWriterReceiverForCollector(inputModule, distributor,
                                                                     receiverConfigurationForCollector);
 }
Beispiel #10
0
 public TestProxySystem(ServerId local, QueueConfiguration queueConfiguration,
                        ConnectionConfiguration connectionConfiguration, ProxyCacheConfiguration cacheConfiguration,
                        ProxyCacheConfiguration asyncCacheConfiguration, NetReceiverConfiguration receiverConfiguration,
                        AsyncTasksConfiguration asyncGetData, AsyncTasksConfiguration asyncPing,
                        ConnectionTimeoutConfiguration connectionTimeoutConfiguration)
     : base(
         local, queueConfiguration, connectionConfiguration, cacheConfiguration, asyncCacheConfiguration,
         receiverConfiguration, asyncGetData, asyncPing, connectionTimeoutConfiguration)
 {
 }
Beispiel #11
0
 public NetDistributorReceiverForProxy(MainLogicModule main, IInputModule input, DistributorModule distributorModule,
                                       NetReceiverConfiguration receiverConfiguration) : base(receiverConfiguration)
 {
     Contract.Requires(main != null);
     Contract.Requires(input != null);
     Contract.Requires(distributorModule != null);
     _mainLogic         = main;
     _input             = input;
     _distributorModule = distributorModule;
 }
Beispiel #12
0
        public void ProxySystem_Read_ReadFromFakeDistributor_ExpectedData()
        {
            var queue      = new QueueConfiguration(1, 100);
            var connection = new ConnectionConfiguration("testService", 10);
            var ndrc2      = new NetReceiverConfiguration(32192, "localhost", "testService");
            var pcc        = new ProxyCacheConfiguration(TimeSpan.FromSeconds(20000000));

            var proxy = new TestProxySystem(new ServerId("", 1), queue, connection, pcc, pcc,
                                            ndrc2,
                                            new AsyncTasksConfiguration(TimeSpan.FromMinutes(60000)),
                                            new AsyncTasksConfiguration(TimeSpan.FromMinutes(60000)),
                                            new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));

            proxy.Build();
            proxy.Start();

            var distr = new ServerId("localhost", 22194);

            TestHelper.OpenDistributorHost(distr, connection);
            proxy.Distributor.SayIAmHere(distr);

            var provider = new IntHashConvertor();

            var hash        = provider.CalculateHashFromKey(10);
            var transaction = new Transaction(hash, "")
            {
                OperationName = OperationName.Read,
                OperationType = OperationType.Sync
            };

            Task.Factory.StartNew(() =>
            {
                Thread.Sleep(200);
                transaction.Complete();
                var data = new InnerData(transaction)
                {
                    Data = provider.SerializeValue(10)
                };
                proxy.Queue.ProxyDistributorQueue.Add(new ReadOperationCompleteCommand(data));
            });
            try
            {
                UserTransaction userTransaction;
                var             api  = proxy.CreateApi("", false, new IntHashConvertor());
                var             wait = api.Read(10, out userTransaction);

                Assert.AreEqual(10, wait);
                Assert.AreEqual(TransactionState.Complete, userTransaction.State);
            }
            catch (Exception e)
            {
                Assert.Fail(e.Message);
            }
            proxy.Dispose();
        }
Beispiel #13
0
        public void ProxyAndDistributor_Read_DirectReadFromOneServerMock()
        {
            const int storageServer = 22261;

            var writer = new HashWriter(new HashMapConfiguration("TestProxyAndDistributorRead1Servers", HashMapCreationMode.CreateNew, 1, 3, HashFileType.Distributor));

            writer.CreateMap();
            writer.SetServer(0, "localhost", storageServer, 157);
            writer.Save();

            var dhc        = new DistributorHashConfiguration(1);
            var queue      = new QueueConfiguration(1, 100);
            var connection = new ConnectionConfiguration("testService", 10);
            var dcc        = new DistributorCacheConfiguration(TimeSpan.FromMilliseconds(600), TimeSpan.FromMilliseconds(1000));
            var ndrc       = new NetReceiverConfiguration(22260, "localhost", "testService");
            var ndrc12     = new NetReceiverConfiguration(23260, "localhost", "testService");

            var distr = new DistributorSystem(new ServerId("localhost", 22260),
                                              new ServerId("localhost", 23260),
                                              dhc, queue, connection, dcc, ndrc, ndrc12,
                                              new TransactionConfiguration(1),
                                              new HashMapConfiguration("TestProxyAndDistributorRead1Servers",
                                                                       HashMapCreationMode.ReadFromFile, 1, 1, HashFileType.Distributor),
                                              new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                              new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                              new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));

            var server = new ServerId("localhost", 23260);

            distr.Build();

            _proxy.Start();
            distr.Start();

            GlobalQueue.Queue.Start();

            _proxy.Distributor.SayIAmHere(server);

            var s = TestHelper.OpenWriterHost(new ServerId("localhost", storageServer), connection);

            s.retData = TestHelper.CreateEvent(new StoredDataHashCalculator(), 10);

            var api = _proxy.CreateApi("Event", false, new StoredDataHashCalculator());

            UserTransaction transaction;
            var             read = (StoredData)api.Read(10, out transaction);

            Assert.AreEqual(10, read.Id);
            _proxy.Dispose();
            distr.Dispose();
        }
Beispiel #14
0
        public void Initialize()
        {
            var queue      = new QueueConfiguration(1, 100);
            var connection = new ConnectionConfiguration("testService", 10);
            var ndrc2      = new NetReceiverConfiguration(proxyServer, "localhost", "testService");
            var pcc        = new ProxyCacheConfiguration(TimeSpan.FromSeconds(2));

            _proxy = new TestProxySystem(new ServerId("localhost", proxyServer),
                                         queue, connection, pcc, pcc, ndrc2,
                                         new AsyncTasksConfiguration(new TimeSpan()),
                                         new AsyncTasksConfiguration(new TimeSpan()),
                                         new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));

            _proxy.Build();
        }
Beispiel #15
0
        public void ProxySystem_CreateSync_SendSyncDataToFakeDistributor_NoError()
        {
            var queue      = new QueueConfiguration(1, 100);
            var connection = new ConnectionConfiguration("testService", 10);
            var ndrc2      = new NetReceiverConfiguration(32190, "localhost", "testService");
            var pcc        = new ProxyCacheConfiguration(TimeSpan.FromSeconds(20000000));

            var proxy = new TestProxySystem(new ServerId("", 1), queue, connection, pcc, pcc, ndrc2,
                                            new AsyncTasksConfiguration(TimeSpan.FromMinutes(60000)),
                                            new AsyncTasksConfiguration(TimeSpan.FromMinutes(60000)),
                                            new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));

            proxy.Build();
            proxy.Start();

            var distr = new ServerId("localhost", 22190);

            TestHelper.OpenDistributorHost(distr, connection);
            proxy.Distributor.SayIAmHere(distr);

            var provider = new StoredDataHashCalculator();

            var hash        = provider.CalculateHashFromKey(10);
            var transaction = new Transaction(hash, "")
            {
                OperationName = OperationName.Create,
                OperationType = OperationType.Sync
            };

            Task.Factory.StartNew(() =>
            {
                Thread.Sleep(200);
                transaction.Complete();
                proxy.Queue.ProxyDistributorQueue.Add(new OperationCompleteCommand(transaction));
            });
            try
            {
                var api  = proxy.CreateApi("", false, provider);
                var wait = api.CreateSync(10, TestHelper.CreateStoredData(10));
                wait.Wait();
                Assert.AreEqual(TransactionState.Complete, wait.Result.State);
            }
            catch (Exception e)
            {
                Assert.Fail(e.Message);
            }
            proxy.Dispose();
        }
Beispiel #16
0
        public WriterApi(StorageNetConfiguration netConfiguration,
                         StorageConfiguration storageConfiguration, CommonConfiguration commonConfiguration,
                         TimeoutConfiguration timeoutConfiguration, bool isNeedRestore = false,
                         CommonConfiguration restoreConfiguration = null)
        {
            Contract.Requires(netConfiguration != null);
            Contract.Requires(storageConfiguration != null);
            Contract.Requires(commonConfiguration != null);
            Contract.Requires(timeoutConfiguration != null);

            _isStarted = false;
            _isBuild   = false;
            _isDispose = false;

            var server       = new ServerId(netConfiguration.Host, netConfiguration.PortForDitributor);
            var queue        = new QueueConfiguration(commonConfiguration.CountThreads, commonConfiguration.QueueSize);
            var queueRestore = restoreConfiguration == null
                ? new QueueConfiguration(1, 1000)
                : new QueueConfiguration(restoreConfiguration.CountThreads, restoreConfiguration.QueueSize);
            var netReceiveConfiguration = new NetReceiverConfiguration(netConfiguration.PortForDitributor,
                                                                       netConfiguration.Host,
                                                                       netConfiguration.WcfServiceName);
            var netReceiveConfiguration2 = new NetReceiverConfiguration(netConfiguration.PortForCollector,
                                                                        netConfiguration.Host,
                                                                        netConfiguration.WcfServiceName);
            var connection = new ConnectionConfiguration(netConfiguration.WcfServiceName,
                                                         netConfiguration.CountConnectionsToSingleServer);
            var hashMap = new HashMapConfiguration(storageConfiguration.FileWithHashName,
                                                   HashMapCreationMode.ReadFromFile, 1,
                                                   storageConfiguration.CountReplics, HashFileType.Writer);
            var restoreTransfer  = new RestoreModuleConfiguration(1, storageConfiguration.TimeoutSendAnswerInRestore);
            var restoreInitiator = new RestoreModuleConfiguration(storageConfiguration.CountRetryWaitAnswerInRestore,
                                                                  storageConfiguration.TimeoutWaitAnswerInRestore);
            var restoreTimeout = new RestoreModuleConfiguration(-1, storageConfiguration.PeriodStartDelete,
                                                                storageConfiguration.IsForceDelete, storageConfiguration.PeriodDeleteAfterRestore);

            var timeout = new ConnectionTimeoutConfiguration(timeoutConfiguration.OpenTimeout,
                                                             timeoutConfiguration.SendTimeout);

            _writerSystem = new WriterSystem(server, queue, netReceiveConfiguration,
                                             netReceiveConfiguration2, hashMap,
                                             connection, restoreTransfer, restoreInitiator, timeout, restoreTimeout, isNeedRestore, queueRestore);

            _handler = new WriterHandler(_writerSystem);
        }
Beispiel #17
0
        public void Initialize()
        {
            const int proxyServer = 22020;
            var       queue       = new QueueConfiguration(2, 100);
            var       connection  = new ConnectionConfiguration("testService", 10);
            var       ndrc2       = new NetReceiverConfiguration(proxyServer, "localhost", "testService");
            var       pcc         = new ProxyCacheConfiguration(TimeSpan.FromSeconds(20));
            var       pccc2       = new ProxyCacheConfiguration(TimeSpan.FromSeconds(40));

            _proxy = new TestProxySystem(new ServerId("localhost", proxyServer),
                                         queue, connection, pcc, pccc2, ndrc2,
                                         new AsyncTasksConfiguration(new TimeSpan()),
                                         new AsyncTasksConfiguration(new TimeSpan()),
                                         new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));

            _proxy.Build();

            _writer1      = new TestWriterGate();
            _writer2      = new TestWriterGate();
            _distributor1 = new TestDistributorGate();
            _distributor2 = new TestDistributorGate();
        }
Beispiel #18
0
 public DistributorSystem(ServerId localfordb, ServerId localforproxy,
                          DistributorHashConfiguration distributorHashConfiguration,
                          QueueConfiguration queueConfiguration,
                          ConnectionConfiguration connectionConfiguration,
                          DistributorCacheConfiguration cacheConfiguration,
                          NetReceiverConfiguration receiverConfigurationForDb,
                          NetReceiverConfiguration receiverConfigurationForProxy,
                          TransactionConfiguration transactionConfiguration,
                          HashMapConfiguration hashMapConfiguration, AsyncTasksConfiguration pingConfig,
                          AsyncTasksConfiguration checkConfig, ConnectionTimeoutConfiguration connectionTimeoutConfiguration)
 {
     Contract.Requires(distributorHashConfiguration != null);
     Contract.Requires(_queueConfiguration != null);
     Contract.Requires(connectionConfiguration != null);
     Contract.Requires(cacheConfiguration != null);
     Contract.Requires(receiverConfigurationForDb != null);
     Contract.Requires(receiverConfigurationForProxy != null);
     Contract.Requires(transactionConfiguration != null);
     Contract.Requires(localfordb != null);
     Contract.Requires(localforproxy != null);
     Contract.Requires(hashMapConfiguration != null);
     Contract.Requires(pingConfig != null);
     Contract.Requires(checkConfig != null);
     _pingConfig  = pingConfig;
     _checkConfig = checkConfig;
     _connectionTimeoutConfiguration = connectionTimeoutConfiguration;
     _distributorHashConfiguration   = distributorHashConfiguration;
     _hashMapConfiguration           = hashMapConfiguration;
     _queueConfiguration             = queueConfiguration;
     _connectionConfiguration        = connectionConfiguration;
     _cacheConfiguration             = cacheConfiguration;
     _receiverConfigurationForDb     = receiverConfigurationForDb;
     _receiverConfigurationForProxy  = receiverConfigurationForProxy;
     _transactionConfiguration       = transactionConfiguration;
     _localfordb    = localfordb;
     _localforproxy = localforproxy;
 }
Beispiel #19
0
        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);
        }
Beispiel #20
0
        public void InputModuleWithParallel_ProcessAsync_SendToOneServersAndTimeoutInCache_Success()
        {
            const int distrServer1   = 22166;
            const int distrServer2   = 23166;
            const int storageServer1 = 22167;

            var q1 = new GlobalQueueInner();

            var writer =
                new HashWriter(new HashMapConfiguration("testAsyncTrans1S", HashMapCreationMode.CreateNew, 1, 1, HashFileType.Distributor));

            writer.CreateMap();
            writer.SetServer(0, "localhost", storageServer1, 157);
            writer.Save();

            #region hell

            GlobalQueue.SetQueue(q1);

            var connection = new ConnectionConfiguration("testService", 10);

            var distrconfig = new DistributorHashConfiguration(1);
            var queueconfig = new QueueConfiguration(1, 100);
            var dnet        = new DistributorNetModule(connection,
                                                       new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));
            var ddistributor = new DistributorModule(new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                                     new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)), distrconfig,
                                                     queueconfig, dnet,
                                                     new ServerId("localhost", distrServer1),
                                                     new ServerId("localhost", distrServer2),
                                                     new HashMapConfiguration("testAsyncTrans1S",
                                                                              HashMapCreationMode.ReadFromFile,
                                                                              1, 1, HashFileType.Distributor));
            dnet.SetDistributor(ddistributor);

            var tranc = new TransactionModule(new QueueConfiguration(1, 1000), dnet, new TransactionConfiguration(4),
                                              distrconfig);
            var cache = new DistributorTimeoutCache(TimeSpan.FromMilliseconds(2000), TimeSpan.FromMilliseconds(200000));
            var main  = new MainLogicModule(cache, ddistributor, tranc);
            cache.SetMainLogicModule(main);

            var netReceive4  = new NetReceiverConfiguration(distrServer1, "localhost", "testService");
            var netReceive42 = new NetReceiverConfiguration(distrServer2, "localhost", "testService");
            var input        = new InputModuleWithParallel(new QueueConfiguration(2, 100000), main, tranc);
            var receiver4    = new NetDistributorReceiver(main, input, ddistributor, netReceive4, netReceive42);

            #endregion

            var s = TestHelper.OpenWriterHost(new ServerId("localhost", storageServer1),
                                              new ConnectionConfiguration("testService", 10));

            main.Start();
            receiver4.Start();
            input.Start();
            dnet.Start();
            ddistributor.Start();

            q1.Start();

            var       list  = new List <InnerData>();
            const int count = 1;
            for (int i = 1; i < count + 1; i++)
            {
                var ev =
                    new InnerData(new Transaction(HashConvertor.GetString(i.ToString(CultureInfo.InvariantCulture)), "")
                {
                    OperationName = OperationName.Create,
                    OperationType = OperationType.Async
                })
                {
                    Data = CommonDataSerializer.Serialize(i)
                };
                list.Add(ev);
            }

            foreach (var data in list)
            {
                input.ProcessAsync(data);
            }

            Thread.Sleep(TimeSpan.FromMilliseconds(1000));

            Assert.AreEqual(count, s.Value);

            foreach (var data in list)
            {
                var transaction = main.GetTransactionState(data.Transaction.UserTransaction);
                Assert.AreEqual(TransactionState.TransactionInProcess, transaction.State);
            }

            Thread.Sleep(TimeSpan.FromMilliseconds(2000));
            foreach (var data in list)
            {
                var transaction = main.GetTransactionState(data.Transaction.UserTransaction);
                if (transaction.State == TransactionState.DontExist)
                {
                    Thread.Sleep(1000);
                }
                transaction = main.GetTransactionState(data.Transaction.UserTransaction);
                Assert.AreEqual(TransactionState.Error, transaction.State);
            }

            q1.Dispose();

            ddistributor.Dispose();
            dnet.Dispose();
            cache.Dispose();
        }
Beispiel #21
0
 public ProxyNetReceiver(ProxyDistributorModule distributorModule, NetReceiverConfiguration receiverConfiguration)
     : base(receiverConfiguration)
 {
     Contract.Requires(distributorModule != null);
     _distributorModule = distributorModule;
 }
Beispiel #22
0
        public void Writer_ProcessDataFromDistributor_CRUD_TwoWriters()
        {
            const int distrServer1   = 22201;
            const int distrServer12  = 22202;
            const int storageServer1 = 22203;
            const int storageServer2 = 22204;

            var writer =
                new HashWriter(new HashMapConfiguration("TestCreateReadDelete", HashMapCreationMode.CreateNew, 2, 3,
                                                        HashFileType.Distributor));

            writer.CreateMap();
            writer.SetServer(0, "localhost", storageServer1, 157);
            writer.SetServer(1, "localhost", storageServer2, 157);
            writer.Save();

            #region hell

            var connection  = new ConnectionConfiguration("testService", 10);
            var distrconfig = new DistributorHashConfiguration(1);
            var queueconfig = new QueueConfiguration(2, 100);

            var netReceive4  = new NetReceiverConfiguration(distrServer1, "localhost", "testService");
            var netReceive42 = new NetReceiverConfiguration(distrServer12, "localhost", "testService");

            var d = new DistributorSystem(new ServerId("localhost", distrServer1),
                                          new ServerId("localhost", distrServer12),
                                          distrconfig, queueconfig, connection,
                                          new DistributorCacheConfiguration(TimeSpan.FromSeconds(20), TimeSpan.FromSeconds(20)), netReceive4,
                                          netReceive42, new TransactionConfiguration(4),
                                          new HashMapConfiguration("TestCreateReadDelete", HashMapCreationMode.ReadFromFile,
                                                                   1, 1, HashFileType.Distributor), new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                          new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                          new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));

            _writer1.Build(storageServer1, "TestCreateReadDelete", 2);
            _writer2.Build(storageServer2, "TestCreateReadDelete", 2);

            var mem  = _writer1.Db.GetDbModules.First() as TestDbInMemory;
            var mem2 = _writer2.Db.GetDbModules.First() as TestDbInMemory;

            _proxy.Start();

            d.Build();
            d.Start();

            _writer1.Start();
            _writer2.Start();

            _proxy.Distributor.SayIAmHere(new ServerId("localhost", distrServer12));

            #endregion

            const int count = 50;

            var api = _proxy.CreateApi("Int", false, new IntHashConvertor());

            for (int i = 0; i < count; i++)
            {
                var task = api.CreateSync(i, i);
                task.Wait();
                Assert.AreEqual(i + 1, mem.Local + mem2.Local);
            }

            for (int i = 0; i < count; i++)
            {
                UserTransaction user;
                var             data = api.Read(i, out user);
                Assert.AreEqual(i, data);
            }

            for (int i = 0; i < count; i++)
            {
                var task = api.DeleteSync(i);
                task.Wait();
                Assert.AreEqual(count - i - 1, mem.Local + mem2.Local);
            }

            for (int i = 0; i < count; i++)
            {
                UserTransaction user;
                var             data = api.Read(i, out user);
                Assert.IsNull(data);
            }

            _writer2.Dispose();
            _writer1.Dispose();

            d.Dispose();
            _proxy.Dispose();
        }
Beispiel #23
0
        public void ProxyAndDistributor_Read_DirectReadFromOneServer()
        {
            const int storageServer1      = 22462;
            const int distrServerForProxy = 23263;
            const int distrServerForDb    = 22263;

            var writer = new HashWriter(new HashMapConfiguration("TestProxyAndDistributorRead1ServerFull", HashMapCreationMode.CreateNew, 1, 3, HashFileType.Distributor));

            writer.CreateMap();
            writer.SetServer(0, "localhost", storageServer1, 157);
            writer.Save();

            var dhc        = new DistributorHashConfiguration(1);
            var queue      = new QueueConfiguration(1, 100);
            var connection = new ConnectionConfiguration("testService", 10);
            var dcc        = new DistributorCacheConfiguration(TimeSpan.FromMilliseconds(600), TimeSpan.FromMilliseconds(1000));
            var ndrc       = new NetReceiverConfiguration(distrServerForDb, "localhost", "testService");
            var ndrc12     = new NetReceiverConfiguration(distrServerForProxy, "localhost", "testService");

            var distr = new DistributorSystem(new ServerId("localhost", distrServerForDb),
                                              new ServerId("localhost", distrServerForProxy),
                                              dhc, queue, connection, dcc, ndrc, ndrc12,
                                              new TransactionConfiguration(1),
                                              new HashMapConfiguration("TestProxyAndDistributorRead1ServerFull",
                                                                       HashMapCreationMode.ReadFromFile, 1, 1, HashFileType.Distributor),
                                              new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                              new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                              new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));

            var server = new ServerId("localhost", distrServerForProxy);

            var storage = new WriterSystem(new ServerId("localhost", storageServer1), queue,
                                           new NetReceiverConfiguration(storageServer1, "localhost", "testService")
                                           , new NetReceiverConfiguration(1, "fake", "fake"),
                                           new HashMapConfiguration("TestProxyAndDistributorRead1ServerFull",
                                                                    HashMapCreationMode.ReadFromFile, 1, 1, HashFileType.Writer),
                                           connection, new RestoreModuleConfiguration(10, new TimeSpan()),
                                           new RestoreModuleConfiguration(10, new TimeSpan()),
                                           new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout),
                                           new RestoreModuleConfiguration(-1, TimeSpan.FromHours(1), false, TimeSpan.FromHours(1)));

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

            storage.DbModule.AddDbModule(new TestDbInMemory());

            storage.Start();
            _proxy.Start();
            distr.Start();

            GlobalQueue.Queue.Start();

            _proxy.Distributor.SayIAmHere(server);

            const int count = 50;

            var api = _proxy.CreateApi("Int", false, new IntHashConvertor());

            for (int i = 1; i < count; i++)
            {
                var task = api.CreateSync(i, i);
                task.Wait();
                Assert.AreEqual(TransactionState.Complete, task.Result.State);
            }

            for (int i = 1; i < count; i++)
            {
                UserTransaction transaction;
                var             read = (int)api.Read(i, out transaction);

                Assert.AreEqual(i, read);
            }

            _proxy.Dispose();
            distr.Dispose();
            storage.Dispose();
        }
Beispiel #24
0
        public void ClientProxy_CrudOperations()
        {
            const int distrServer1  = 22206;
            const int distrServer12 = 22207;
            const int storageServer = 22208;

            #region hell

            var writer = new HashWriter(new HashMapConfiguration("TestClientProxy", HashMapCreationMode.CreateNew, 1, 1, HashFileType.Distributor));
            writer.CreateMap();
            writer.SetServer(0, "localhost", storageServer, 157);
            writer.Save();

            var distrHash    = new DistributorHashConfiguration(1);
            var queue        = new QueueConfiguration(1, 100);
            var connection   = new ConnectionConfiguration("testService", 10);
            var distrCache   = new DistributorCacheConfiguration(TimeSpan.FromMilliseconds(10000), TimeSpan.FromMilliseconds(1000000));
            var netReceive1  = new NetReceiverConfiguration(distrServer1, "localhost", "testService");
            var netReceive12 = new NetReceiverConfiguration(distrServer12, "localhost", "testService");
            var trans        = new TransactionConfiguration(1);
            var hashMap      = new HashMapConfiguration("TestClientProxy", HashMapCreationMode.ReadFromFile, 1, 1, HashFileType.Writer);
            var async        = new AsyncTasksConfiguration(TimeSpan.FromSeconds(10));

            var distr = new DistributorSystem(new ServerId("localhost", distrServer1),
                                              new ServerId("localhost", distrServer12),
                                              distrHash, queue, connection, distrCache, netReceive1, netReceive12, trans,
                                              new HashMapConfiguration("TestClientProxy", HashMapCreationMode.ReadFromFile, 1, 1,
                                                                       HashFileType.Distributor), async, async,
                                              new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));

            var netReceivedb = new NetReceiverConfiguration(storageServer, "localhost", "testService");
            var restore      = new RestoreModuleConfiguration(4, TimeSpan.FromMinutes(1));

            var storage = new WriterSystem(new ServerId("localhost", storageServer), queue,
                                           netReceivedb, new NetReceiverConfiguration(1, "fake", "fake"), hashMap, connection, restore, restore,
                                           new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout),
                                           new RestoreModuleConfiguration(-1, TimeSpan.FromHours(1), false, TimeSpan.FromHours(1)));

            #endregion

            distr.Build();
            distr.Start();

            _proxy.Int.SayIAmHere("localhost", distrServer12);

            storage.Build();
            storage.DbModule.AddDbModule(new TestDbInMemory());
            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);
            }

            distr.Dispose();
            storage.Dispose();
        }
Beispiel #25
0
 public NetWriterReceiverForCollector(InputModule inputModule, DistributorModule distributor, NetReceiverConfiguration configuration)
     : base(configuration)
 {
     _inputModule = inputModule;
     _distributor = distributor;
 }
Beispiel #26
0
 public NetWriterReceiverForWrite(InputModule inputModule, DistributorModule distributor, NetReceiverConfiguration receiverConfiguration)
     : base(receiverConfiguration)
 {
     Contract.Requires(inputModule != null);
     Contract.Requires(distributor != null);
     _distributor = distributor;
     _inputModule = inputModule;
 }
Beispiel #27
0
        public void ProxyAndDistributor_Create_WriterMock()
        {
            var writer = new HashWriter(new HashMapConfiguration("test5", HashMapCreationMode.CreateNew, 1, 3, HashFileType.Collector));

            writer.CreateMap();
            writer.SetServer(0, "localhost", 21181, 157);
            writer.Save();

            var dhc        = new DistributorHashConfiguration(1);
            var queue      = new QueueConfiguration(1, 100);
            var connection = new ConnectionConfiguration("testService", 10);
            var dcc        = new DistributorCacheConfiguration(TimeSpan.FromMilliseconds(600), TimeSpan.FromMilliseconds(1000));
            var ndrc       = new NetReceiverConfiguration(22222, "localhost", "testService");
            var ndrc12     = new NetReceiverConfiguration(23222, "localhost", "testService");

            var distr = new DistributorSystem(new ServerId("localhost", 22222),
                                              new ServerId("localhost", 23222),
                                              dhc, queue, connection, dcc, ndrc, ndrc12,
                                              new TransactionConfiguration(1),
                                              new HashMapConfiguration("test5", HashMapCreationMode.ReadFromFile, 1, 1, HashFileType.Distributor),
                                              new AsyncTasksConfiguration(TimeSpan.FromMilliseconds(200)),
                                              new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                              new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));

            var server = new ServerId("localhost", 23222);

            try
            {
                distr.Build();

                _proxy.Start();
                distr.Start();

                GlobalQueue.Queue.Start();

                _proxy.Distributor.SayIAmHere(server);

                var api = _proxy.CreateApi("", false, new StoredDataHashCalculator());

                var transaction = api.Create(10, TestHelper.CreateStoredData(10));
                Assert.IsNotNull(transaction);
                Thread.Sleep(200);
                transaction = _proxy.GetTransaction(transaction);
                Assert.IsNotNull(transaction);
                Assert.AreEqual(TransactionState.TransactionInProcess, transaction.State);
                Thread.Sleep(1000);
                transaction = _proxy.GetTransaction(transaction);
                Assert.IsNotNull(transaction);
                Assert.AreEqual(TransactionState.DontExist, transaction.State);

                var server1   = new ServerId("localhost", 21181);
                var netconfig = new ConnectionConfiguration("testService", 1);
                TestHelper.OpenWriterHost(server1, netconfig);

                Thread.Sleep(TimeSpan.FromMilliseconds(1000));

                transaction = api.Create(11, TestHelper.CreateStoredData(11));
                Assert.IsNotNull(transaction);
                Thread.Sleep(200);
                transaction = _proxy.GetTransaction(transaction);
                GlobalQueue.Queue.TransactionQueue.Add(new Transaction(transaction));
                Thread.Sleep(100);
                transaction = _proxy.GetTransaction(transaction);
                Assert.IsNotNull(transaction);
                if (transaction.State == TransactionState.TransactionInProcess)
                {
                    Thread.Sleep(100);
                    transaction = _proxy.GetTransaction(transaction);
                }
                Assert.AreEqual(TransactionState.Complete, transaction.State);
                Thread.Sleep(1000);
                transaction = _proxy.GetTransaction(transaction);
                Assert.IsNotNull(transaction);
                Assert.AreEqual(TransactionState.DontExist, transaction.State);
            }
            finally
            {
                _proxy.Dispose();
                distr.Dispose();
            }
        }
Beispiel #28
0
        public void ProxyAndDistributor_Read_DirectReadFromTwoServer_TwoReplics_LongRead()
        {
            const int storageServer1      = 22281;
            const int storageServer2      = 22282;
            const int distrServerForProxy = 23283;
            const int distrServerForDb    = 22283;

            var writer =
                new HashWriter(new HashMapConfiguration("TestProxyAndDistributorRead2Servers2ReplicsFullLongRead",
                                                        HashMapCreationMode.CreateNew, 2, 3, HashFileType.Distributor));

            writer.CreateMap();
            writer.SetServer(0, "localhost", storageServer1, 157);
            writer.SetServer(1, "localhost", storageServer2, 157);
            writer.Save();

            var dhc        = new DistributorHashConfiguration(2);
            var queue      = new QueueConfiguration(1, 100);
            var connection = new ConnectionConfiguration("testService", 10);
            var dcc        = new DistributorCacheConfiguration(TimeSpan.FromMilliseconds(600), TimeSpan.FromMilliseconds(1000));
            var ndrc       = new NetReceiverConfiguration(distrServerForDb, "localhost", "testService");
            var ndrc12     = new NetReceiverConfiguration(distrServerForProxy, "localhost", "testService");

            var distr = new DistributorSystem(new ServerId("localhost", distrServerForDb),
                                              new ServerId("localhost", distrServerForProxy),
                                              dhc, queue, connection, dcc, ndrc, ndrc12,
                                              new TransactionConfiguration(1),
                                              new HashMapConfiguration("TestProxyAndDistributorRead2Servers2ReplicsFullLongRead",
                                                                       HashMapCreationMode.ReadFromFile, 1, 2, HashFileType.Distributor),
                                              new AsyncTasksConfiguration(TimeSpan.FromSeconds(2)),
                                              new AsyncTasksConfiguration(TimeSpan.FromSeconds(2)),
                                              new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));

            var server = new ServerId("localhost", distrServerForProxy);

            var storage1 = new WriterSystem(new ServerId("localhost", storageServer1), queue,
                                            new NetReceiverConfiguration(storageServer1, "localhost", "testService")
                                            , new NetReceiverConfiguration(1, "fake", "fake"),
                                            new HashMapConfiguration("TestProxyAndDistributorRead2Servers2ReplicsFullLongRead",
                                                                     HashMapCreationMode.ReadFromFile, 1, 1, HashFileType.Writer),
                                            connection, new RestoreModuleConfiguration(10, new TimeSpan()),
                                            new RestoreModuleConfiguration(10, new TimeSpan()),
                                            new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout),
                                            new RestoreModuleConfiguration(-1, TimeSpan.FromHours(1), false, TimeSpan.FromHours(1)));

            var storage2 = new WriterSystem(new ServerId("localhost", storageServer2), queue,
                                            new NetReceiverConfiguration(storageServer2, "localhost", "testService")
                                            , new NetReceiverConfiguration(1, "fake", "fake"),
                                            new HashMapConfiguration("TestProxyAndDistributorRead2Servers2ReplicsFullLongRead",
                                                                     HashMapCreationMode.ReadFromFile, 1, 1, HashFileType.Writer),
                                            connection, new RestoreModuleConfiguration(10, new TimeSpan()),
                                            new RestoreModuleConfiguration(10, new TimeSpan()),
                                            new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout),
                                            new RestoreModuleConfiguration(-1, TimeSpan.FromHours(1), false, TimeSpan.FromHours(1)));

            storage1.Build();
            storage2.Build();
            distr.Build();

            storage1.DbModule.AddDbModule(new TestDbInMemory());
            storage2.DbModule.AddDbModule(new TestDbInMemory());

            _proxy.Start();
            distr.Start();

            _proxy.Distributor.SayIAmHere(server);

            var api = _proxy.CreateApi("Int", false, new IntHashConvertor());

            var task = api.CreateSync(10, 10);

            task.Wait();

            storage1.Start();
            storage2.Start();

            Thread.Sleep(TimeSpan.FromMilliseconds(4000));

            task = api.CreateSync(10, 10);
            task.Wait();
            Assert.AreEqual(TransactionState.Complete, task.Result.State);

            UserTransaction transaction;

            var data = api.Read(10, out transaction);

            Assert.AreEqual(10, data);

            _proxy.Dispose();
            distr.Dispose();
            storage1.Dispose();
            storage2.Dispose();
        }
Beispiel #29
0
        public void ProxyAndDistributor_Create_WriterMock_TwoReplics()
        {
            var writer = new HashWriter(new HashMapConfiguration("test3", HashMapCreationMode.CreateNew, 2, 3, HashFileType.Writer));

            writer.CreateMap();
            writer.SetServer(0, "localhost", 21191, 157);
            writer.SetServer(1, "localhost", 21192, 157);
            writer.Save();

            writer = new HashWriter(new HashMapConfiguration("test4", HashMapCreationMode.CreateNew, 2, 3, HashFileType.Writer));
            writer.CreateMap();
            writer.SetServer(0, "localhost", 21193, 157);
            writer.SetServer(1, "localhost", 21192, 157);
            writer.Save();

            var dhc        = new DistributorHashConfiguration(2);
            var queue      = new QueueConfiguration(1, 100);
            var connection = new ConnectionConfiguration("testService", 10);
            var dcc        = new DistributorCacheConfiguration(TimeSpan.FromMilliseconds(400), TimeSpan.FromMilliseconds(1000));
            var ndrc       = new NetReceiverConfiguration(22223, "localhost", "testService");
            var ndrc12     = new NetReceiverConfiguration(23223, "localhost", "testService");
            var ndrc2      = new NetReceiverConfiguration(22224, "localhost", "testService");
            var ndrc22     = new NetReceiverConfiguration(23224, "localhost", "testService");

            var distr = new DistributorSystem(new ServerId("localhost", 22223),
                                              new ServerId("localhost", 23223),
                                              dhc, queue, connection, dcc, ndrc, ndrc12,
                                              new TransactionConfiguration(1),
                                              new HashMapConfiguration("test3", HashMapCreationMode.ReadFromFile, 1, 1, HashFileType.Distributor),
                                              new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                              new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                              new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));
            var distr2 = new DistributorSystem(new ServerId("localhost", 22224),
                                               new ServerId("localhost", 23224),
                                               dhc, queue, connection, dcc, ndrc2, ndrc22,
                                               new TransactionConfiguration(1),
                                               new HashMapConfiguration("test4", HashMapCreationMode.ReadFromFile, 1, 1, HashFileType.Distributor),
                                               new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                               new AsyncTasksConfiguration(TimeSpan.FromMinutes(5)),
                                               new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));


            var ser  = new ServerId("localhost", 23223);
            var ser2 = new ServerId("localhost", 23224);

            try
            {
                distr.Build();
                distr2.Build();

                _proxy.Start();
                distr.Start();
                distr2.Start();

                _proxy.Distributor.SayIAmHere(ser);
                _proxy.Distributor.SayIAmHere(ser2);

                var server1   = new ServerId("localhost", 21191);
                var server2   = new ServerId("localhost", 21192);
                var server3   = new ServerId("localhost", 21193);
                var netconfig = new ConnectionConfiguration("testService", 1);
                var s1        = TestHelper.OpenWriterHost(server1, netconfig);
                var s2        = TestHelper.OpenWriterHost(server2, netconfig);
                var s3        = TestHelper.OpenWriterHost(server3, netconfig);

                Thread.Sleep(TimeSpan.FromMilliseconds(300));

                var api = _proxy.CreateApi("", false, new StoredDataHashCalculator());

                api.Create(10, TestHelper.CreateStoredData(10));
                api.Create(11, TestHelper.CreateStoredData(11));
                Thread.Sleep(TimeSpan.FromMilliseconds(1000));
                Assert.AreEqual(1, s1.Value);
                Assert.AreEqual(2, s2.Value);
                Assert.AreEqual(1, s3.Value);
            }
            finally
            {
                _proxy.Dispose();
                distr.Dispose();
                distr2.Dispose();
            }
        }
Beispiel #30
0
        public void Writer_Restore_ThreeServers()
        {
            var writer =
                new HashWriter(new HashMapConfiguration("test11", HashMapCreationMode.CreateNew, 3, 3,
                                                        HashFileType.Distributor));

            writer.CreateMap();
            writer.SetServer(0, "localhost", storageServer1, 157);
            writer.SetServer(1, "localhost", storageServer2, 157);
            writer.SetServer(2, "localhost", storageServer3, 157);
            writer.Save();

            #region hell

            var queue      = new QueueConfiguration(2, 100);
            var connection = new ConnectionConfiguration("testService", 10);
            var ndrc2      = new NetReceiverConfiguration(proxyServer, "localhost", "testService");
            var pcc        = new ProxyCacheConfiguration(TimeSpan.FromSeconds(20));
            var pccc2      = new ProxyCacheConfiguration(TimeSpan.FromSeconds(40));

            var proxy = new TestProxySystem(new ServerId("localhost", proxyServer),
                                            queue, connection, pcc, pccc2, ndrc2,
                                            new AsyncTasksConfiguration(new TimeSpan()),
                                            new AsyncTasksConfiguration(new TimeSpan()),
                                            new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout));

            _distrTest.Build(1, distrServer1, distrServer12, "test11");
            _writer1.Build(storageServer1, "test11", 1);
            _writer2.Build(storageServer2, "test11", 1);
            _writer3.Build(storageServer3, "test11", 1);

            #endregion

            #region hell2

            proxy.Build();
            proxy.Start();

            _distrTest.Start();
            _writer1.Start();

            proxy.Distributor.SayIAmHere(new ServerId("localhost", distrServer12));

            Thread.Sleep(TimeSpan.FromMilliseconds(200));

            int count   = 50;
            int counter = 0;

            var api = proxy.CreateApi("Int", false, new IntHashConvertor());

            for (int i = 0; i < count; i++)
            {
                bool flag = false;

                while (!flag && counter < 3)
                {
                    var task = api.CreateSync(i + 1, i + 1);
                    task.Wait();
                    flag = true;
                    if (task.Result.IsError)
                    {
                        counter++;
                        flag = false;
                    }
                }
            }
            Assert.AreEqual(2, counter);

            #endregion

            var mem  = _writer1.Db.GetDbModules.First() as TestDbInMemory;
            var mem2 = _writer2.Db.GetDbModules.First() as TestDbInMemory;
            var mem3 = _writer3.Db.GetDbModules.First() as TestDbInMemory;

            if (count > 1)
            {
                Assert.AreNotEqual(count, mem.Local);
                Assert.AreNotEqual(count, mem.Remote);
            }
            Assert.AreEqual(count, mem.Local + mem.Remote);

            _writer2.Start();
            _writer3.Start();

            _writer2.Distributor.Restore(new ServerId("localhost", distrServer1), false);

            Thread.Sleep(TimeSpan.FromMilliseconds(4000));

            _writer3.Distributor.Restore(new ServerId("localhost", distrServer1), false);

            Thread.Sleep(TimeSpan.FromMilliseconds(3000));

            Assert.AreEqual(0, mem.Remote);
            Assert.AreEqual(0, mem2.Remote);
            Assert.AreEqual(0, mem3.Remote);
            Assert.AreEqual(count, mem.Local + mem2.Local + mem3.Local);
            Assert.AreEqual(false, _writer1.Restore.IsNeedRestore);
            Assert.AreEqual(false, _writer2.Restore.IsNeedRestore);
            Assert.AreEqual(false, _writer3.Restore.IsNeedRestore);

            _distrTest.Dispose();
            _writer1.Dispose();
            _writer2.Dispose();
            _writer3.Dispose();

            proxy.Dispose();
        }