NextId() private method

private NextId ( ) : long
return long
コード例 #1
0
ファイル: HiLoHanging.cs プロジェクト: phinett/ravendb
		public void HiLo_Modified_InReplicated_Scenario()
		{
			const string key = "Raven/Hilo/managers";

			var store1 = CreateStore();
			var store2 = CreateStore();

			TellFirstInstanceToReplicateToSecondInstance();
			TellSecondInstanceToReplicateToFirstInstance();

			var hiLoKeyGenerator = new HiLoKeyGenerator("managers", 2)
			{
				DisableCapacityChanges = true
			};
			for (long i = 0; i < 4; i++)
			{
				Assert.Equal(i + 1, hiLoKeyGenerator.NextId(store1.DatabaseCommands));
			}

			WaitForReplication(store2, key);

			var jsonDocument = store2.DatabaseCommands.Get(key);
			store2.DatabaseCommands.Put(key, null, new RavenJObject
			{
				{"Max", 49}
			}, jsonDocument.Metadata);

			WaitForReplication(store1, key);

			for (long i = 0; i < 4; i++)
			{
				Assert.Equal(i + 50, hiLoKeyGenerator.NextId(store1.DatabaseCommands));
			}
		}
コード例 #2
0
ファイル: HiLoHanging.cs プロジェクト: ReginaBricker/ravendb
		public void HiLo_Modified_InReplicated_Scenario()
		{
			const string key = "Raven/Hilo/managers";

			var store1 = CreateStore(configureStore: store => store.Conventions.FailoverBehavior = FailoverBehavior.ReadFromAllServers);
			var store2 = CreateStore();

			((DocumentStore) store1).GetReplicationInformerForDatabase()
			                        .UpdateReplicationInformationIfNeeded((ServerClient) store1.DatabaseCommands)
			                        .Wait();
			((DocumentStore) store2).GetReplicationInformerForDatabase()
			                        .UpdateReplicationInformationIfNeeded((ServerClient) store2.DatabaseCommands)
			                        .Wait();

			TellFirstInstanceToReplicateToSecondInstance();
			TellSecondInstanceToReplicateToFirstInstance();

			var hiLoKeyGenerator = new HiLoKeyGenerator("managers", 2)
			{
				DisableCapacityChanges = true
			};
			for (long i = 0; i < 4; i++)
			{
				Assert.Equal(i + 1, hiLoKeyGenerator.NextId(store1.DatabaseCommands));
			}

			WaitForReplication(store2, session =>
			{
				var load = session.Load<dynamic>(key);
				return load != null && load.Max == 4;
			});

			var jsonDocument = store2.DatabaseCommands.Get(key);
			store2.DatabaseCommands.Put(key, null, new RavenJObject
			{
				{"Max", 49}
			}, jsonDocument.Metadata);

			WaitForReplication(store1, session => session.Load<dynamic>(key).Max == 49);

			for (long i = 0; i < 4; i++)
			{
				var nextId = hiLoKeyGenerator.NextId(store1.DatabaseCommands);
				Assert.Equal(i + 50, nextId);
			}
		}
コード例 #3
0
ファイル: HiLoToMaxTests.cs プロジェクト: 925coder/ravendb
		public void FromScratch()
		{
			using(var store = NewDocumentStore())
			{
				var generator = new HiLoKeyGenerator("users", 3);
				for (long i = 0; i < 50; i++)
				{
					Assert.Equal(i + 1, generator.NextId(store.DatabaseCommands));
				}
			}
		}
コード例 #4
0
		public void SequentialGeneration_NoClashesOrGaps()
		{
			using (GetNewServer())
			using (var store = new DocumentStore
			{
				Url = "http://localhost:8079"
			}.Initialize())
			{
				var gen = new HiLoKeyGenerator("When_generating_lots_of_keys_concurrently_there_are_no_clashes", 2);
				Test(() => gen.NextId(store.DatabaseCommands), 1, GeneratedIdCount);
			}
		}
コード例 #5
0
ファイル: HiloTests.cs プロジェクト: 925coder/ravendb
		public void HiloCannotGoDown()
		{
			using (var store = NewDocumentStore())
			{
				store.DatabaseCommands.Put(
					"Raven/Hilo/Users", null,
					new RavenJObject
					{
						{"Max", 32}
					},
					new RavenJObject());

				var hiLoKeyGenerator = new HiLoKeyGenerator("Users", 32);

				var ids = new HashSet<long> { hiLoKeyGenerator.NextId(store.DatabaseCommands) };

				store.DatabaseCommands.Put(
					"Raven/Hilo/Users", null,
					new RavenJObject
					{
						{"Max", 12}
					},
					new RavenJObject());


				for (int i = 0; i < 128; i++)
				{
					Assert.True(ids.Add(hiLoKeyGenerator.NextId(store.DatabaseCommands)), "Failed at " + i);
				}

				var list = ids.GroupBy(x => x).Select(g => new
				{
					g.Key,
					Count = g.Count()
				}).Where(x => x.Count > 1).ToList();

				Assert.Empty(list);
			}
		}
コード例 #6
0
ファイル: HiLoToMaxTests.cs プロジェクト: 925coder/ravendb
		public void ConcurrentWillNoGenerateConflicts()
		{
			using (var store = NewDocumentStore())
			{
				var generator1 = new HiLoKeyGenerator("users", 3);
				var generator2 = new HiLoKeyGenerator("users", 3);
				var dic = new Dictionary<long, int>();
				for (long i = 0; i < 50; i++)
				{
					dic.Add(generator1.NextId(store.DatabaseCommands), 1);
					dic.Add(generator2.NextId(store.DatabaseCommands), 1);
				}
			}
		}
コード例 #7
0
ファイル: HiLoToMaxTests.cs プロジェクト: 925coder/ravendb
		public void CanUpgradeFromOldHiLo()
		{
			using (var store = NewDocumentStore())
			{
				store.DatabaseCommands.Put("Raven/Hilo/users", null, 
					RavenJObject.FromObject(new{ ServerHi = 2}), 
					new RavenJObject());

				var generator = new HiLoKeyGenerator("users", 1024);
				for (long i = 0; i < 50; i++)
				{
					Assert.Equal((i + 1) + 1024, generator.NextId(store.DatabaseCommands));
				}
			}
		}
コード例 #8
0
ファイル: HiloTests.cs プロジェクト: 925coder/ravendb
		public void ShouldResolveConflictWithHighestNumber()
		{
			using (var server = GetNewServer())
			using (var store = new DocumentStore
								  {
									  Url = "http://*****:*****@Http-Status-Code"
								,
								409
								},
							{
								"@Http-Status-Description"
								, "Conflicted doc"
								}
							});
				});

				var hiLoKeyGenerator = new HiLoKeyGenerator("Users", 32);
				var nextId = hiLoKeyGenerator.NextId(store.DatabaseCommands);
				Assert.Equal(65, nextId);
			}
		}