Пример #1
0
		public WhenUsingShardedServers()
		{
			const string server = "localhost";

			const int port1 = 8079;
			const int port2 = 8081;

			path1 = GetPath("TestShardedDb1");
			path2 = GetPath("TestShardedDb2");

			NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(port1);
			NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(port2);

			company1 = new Company { Name = "Company1" };
			company2 = new Company { Name = "Company2" };

			server1 = GetNewServer(port1, path1);
			server2 = GetNewServer(port2, path2);

			shards = new List<IDocumentStore> { 
				new DocumentStore { Identifier="Shard1", Url = "http://" + server +":"+port1}, 
				new DocumentStore { Identifier="Shard2", Url = "http://" + server +":"+port2} 
			}.ToDictionary(x => x.Identifier, x => x);

			shardResolution = MockRepository.GenerateStub<IShardResolutionStrategy>();
			shardResolution.Stub(x => x.GenerateShardIdFor(company1)).Return("Shard1");
			shardResolution.Stub(x => x.GenerateShardIdFor(company2)).Return("Shard2");

			shardResolution.Stub(x => x.MetadataShardIdFor(company1)).Return("Shard1");
			shardResolution.Stub(x => x.MetadataShardIdFor(company2)).Return("Shard1");

			shardStrategy = new ShardStrategy(shards) { ShardResolutionStrategy = shardResolution };
		}
Пример #2
0
        public WhenUsingShardedServers()
        {
            const string server = "localhost";

            const int port1 = 8079;
            const int port2 = 8081;

            company1 = new Company { Name = "Company1" };
            company2 = new Company { Name = "Company2" };

            server1 = GetNewServer(port1);
            server2 = GetNewServer(port2);

            shards = new List<IDocumentStore> {
                new DocumentStore { Identifier="Shard1", Url = "http://" + server +":"+port1},
                new DocumentStore { Identifier="Shard2", Url = "http://" + server +":"+port2}
            }.ToDictionary(x => x.Identifier, x => x);

            shardResolution = MockRepository.GenerateStub<IShardResolutionStrategy>();
            shardResolution.Stub(x => x.GenerateShardIdFor(Arg.Is(company1), Arg<ITransactionalDocumentSession>.Is.Anything)).Return("Shard1");
            shardResolution.Stub(x => x.GenerateShardIdFor(Arg.Is(company2), Arg<ITransactionalDocumentSession>.Is.Anything)).Return("Shard2");

            shardResolution.Stub(x => x.MetadataShardIdFor(company1)).Return("Shard1");
            shardResolution.Stub(x => x.MetadataShardIdFor(company2)).Return("Shard1");

            shardStrategy = new ShardStrategy(shards) { ShardResolutionStrategy = shardResolution };
        }
Пример #3
0
        public void CanGetSingleEntityFromCorrectShardedServer()
        {
            using (var documentStore = new ShardedDocumentStore(shardStrategy).Initialize())
                using (var session = documentStore.OpenAsyncSession())
                {
                    //store item that goes in 2nd shard
                    session.Store(company2);
                    session.SaveChangesAsync().Wait();

                    //get it, should automagically retrieve from 2nd shard
                    shardResolution.Stub(x => x.PotentialShardsFor(null)).IgnoreArguments().Return(new[] { "Shard2" });
                    var loadedCompany = session.LoadAsync <Company>(company2.Id).Result;

                    Assert.NotNull(loadedCompany);
                    Assert.Equal(company2.Name, loadedCompany.Name);
                }
        }
Пример #4
0
        public void Can_get_single_entity_from_correct_sharded_server()
        {
            using (var documentStore = new ShardedDocumentStore(shardStrategy, shards).Initialize())
                using (var session = documentStore.OpenSession())
                {
                    //store item that goes in 2nd shard
                    session.Store(company2);
                    session.SaveChanges();

                    //get it, should automagically retrieve from 2nd shard
                    shardResolution.Stub(x => x.SelectShardIds(null)).IgnoreArguments().Return(new[] { "Shard2" });
                    var loadedCompany = session.Load <Company>(company2.Id);

                    Assert.NotNull(loadedCompany);
                    Assert.Equal(company2.Name, loadedCompany.Name);
                }
        }
Пример #5
0
        public WhenUsingShardedServers()
        {
            const string server = "localhost";

            const int port1 = 8079;
            const int port2 = 8081;

            path1 = GetPath("TestShardedDb1");
            path2 = GetPath("TestShardedDb2");

            NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(port1);
            NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(port2);

            company1 = new Company {
                Name = "Company1"
            };
            company2 = new Company {
                Name = "Company2"
            };

            server1 = GetNewServer(port1, path1);
            server2 = GetNewServer(port2, path2);

            shards = new List <IDocumentStore> {
                new DocumentStore {
                    Identifier = "Shard1", Url = "http://" + server + ":" + port1
                },
                new DocumentStore {
                    Identifier = "Shard2", Url = "http://" + server + ":" + port2
                }
            }.ToDictionary(x => x.Identifier, x => x);

            shardResolution = MockRepository.GenerateStub <IShardResolutionStrategy>();
            shardResolution.Stub(x => x.GenerateShardIdFor(Arg.Is(company1), Arg <ITransactionalDocumentSession> .Is.Anything)).Return("Shard1");
            shardResolution.Stub(x => x.GenerateShardIdFor(Arg.Is(company2), Arg <ITransactionalDocumentSession> .Is.Anything)).Return("Shard2");

            shardResolution.Stub(x => x.MetadataShardIdFor(company1)).Return("Shard1");
            shardResolution.Stub(x => x.MetadataShardIdFor(company2)).Return("Shard1");

            shardStrategy = new ShardStrategy(shards)
            {
                ShardResolutionStrategy = shardResolution
            };
        }