public void HiLo_Async_MultiDb() { using (var store = GetDocumentStore()) { using (var session = store.OpenSession()) { session.Store(new HiloDoc { Max = 64 }, "Raven/Hilo/users"); session.Store(new HiloDoc { Max = 128 }, "Raven/Hilo/products"); session.SaveChanges(); var multiDbHiLo = new AsyncMultiDatabaseHiLoIdGenerator(store, store.Conventions); var generateDocumentKey = multiDbHiLo.GenerateDocumentIdAsync(null, new User()).GetAwaiter().GetResult(); Assert.Equal("users/65-A", generateDocumentKey); generateDocumentKey = multiDbHiLo.GenerateDocumentIdAsync(null, new Product()).GetAwaiter().GetResult(); Assert.Equal("products/129-A", generateDocumentKey); } } }
public void Generate_HiLo_Ids() { using (var store = GetDocumentStore()) { var multiDbHiLo = new AsyncMultiDatabaseHiLoIdGenerator(store); var usersIds = new ConcurrentSet <long>(); var productsIds = new ConcurrentSet <long>(); var count = 10; Parallel.For(0, count, _ => { var id = multiDbHiLo.GenerateNextIdForAsync(null, "Users").GetAwaiter().GetResult(); Assert.True(usersIds.TryAdd(id)); id = multiDbHiLo.GenerateNextIdForAsync(null, "Products").GetAwaiter().GetResult(); Assert.True(productsIds.TryAdd(id)); }); Assert.Equal(count, usersIds.Count); Assert.Equal(count, productsIds.Count); Parallel.For(0, count, _ => { var id = store.HiLoIdGenerator.GenerateNextIdForAsync(null, "Users").GetAwaiter().GetResult(); Assert.True(usersIds.TryAdd(id)); id = store.HiLoIdGenerator.GenerateNextIdForAsync(null, "Products").GetAwaiter().GetResult(); Assert.True(productsIds.TryAdd(id)); id = store.HiLoIdGenerator.GenerateNextIdForAsync(null, typeof(User)).GetAwaiter().GetResult(); Assert.True(usersIds.TryAdd(id)); id = store.HiLoIdGenerator.GenerateNextIdForAsync(null, new Product()).GetAwaiter().GetResult(); Assert.True(productsIds.TryAdd(id)); id = store.HiLoIdGenerator.GenerateNextIdForAsync(null, new User()).GetAwaiter().GetResult(); Assert.True(usersIds.TryAdd(id)); id = store.HiLoIdGenerator.GenerateNextIdForAsync(null, typeof(Product)).GetAwaiter().GetResult(); Assert.True(productsIds.TryAdd(id)); }); Assert.Equal(count * 4, usersIds.Count); Assert.Equal(count * 4, productsIds.Count); } }