예제 #1
0
        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();
        }
예제 #2
0
        public void Writer_Restore_TimeoutDelete()
        {
            #region hell

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

            var storageNet1   = new StorageNetConfiguration("localhost", storageServer1, 157, "testService", 10);
            var storageConfig = new StorageConfiguration("TestRestore", 1, 10,
                                                         TimeSpan.FromMilliseconds(10000),
                                                         TimeSpan.FromMilliseconds(200), TimeSpan.FromMilliseconds(1), TimeSpan.FromSeconds(1), false);

            var factory  = new TestInMemoryDbFactory();
            var storage1 = new WriterApi(storageNet1, storageConfig, new CommonConfiguration(1, 10));

            #endregion

            _proxy.Start();

            _distr.Start();

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

            storage1.Build();
            storage1.AddDbModule(factory);
            storage1.Start();

            const int count = 50;

            for (int i = 0; i < count; i++)
            {
                var wait = _proxy.Int.CreateSync(i, i);

                Assert.AreEqual(RequestState.Complete, wait.State);
            }

            Assert.AreEqual(count, factory.Db.Local);

            for (int i = 0; i < count / 2; i++)
            {
                var wait = _proxy.Int.DeleteSync(i);

                Assert.AreEqual(RequestState.Complete, wait.State);
            }

            Assert.AreEqual(count / 2, factory.Db.Local);
            Assert.AreEqual(count / 2, factory.Db.Deleted);

            Thread.Sleep(4000);

            Assert.AreEqual(count / 2, factory.Db.Local);
            Assert.AreEqual(0, factory.Db.Deleted);

            _proxy.Dispose();
            _distr.Dispose();
            storage1.Dispose();
        }
예제 #3
0
        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();
        }