public async Task New_transformer_will_overwrite_index_tombstones() { using (var store = GetDocumentStore()) { const string name = "FooBar"; var userByNameIndex = new UserByNameIndex(name); userByNameIndex.Execute(store); store.DatabaseCommands.DeleteIndex(name); var usernameToUpperTransformer = new UsernameToUpperTransformer(name); usernameToUpperTransformer.Execute(store); var databaseStore = await Server.ServerStore.DatabasesLandlord.TryGetOrCreateResourceStore(store.DefaultDatabase); TransactionOperationContext context; using (databaseStore.ConfigurationStorage.ContextPool.AllocateOperationContext(out context)) using (var tx = context.OpenReadTransaction()) { var metadata = databaseStore.IndexMetadataPersistence.GetIndexMetadataByName(tx.InnerTransaction, context, name); Assert.Equal(1, metadata.ChangeVector.Length); //sanity check /* * transformers and etags share the same tombstone, * so if transformer created, then deleted, then index created under the same name as transformer, the change vector * which represents history of the object will be preserved */ Assert.Equal(3, metadata.ChangeVector[0].Etag); } } }
public void Can_replicate_multiple_transformers() { using (var source = GetDocumentStore()) using (var destination = GetDocumentStore()) { var usernameToUpperTransformer = new UsernameToUpperTransformer(); usernameToUpperTransformer.Execute(source); var usernameToLowerTransformer = new UsernameToLowerTransformer(); usernameToLowerTransformer.Execute(source); SetupReplication(source, destination); var sw = Stopwatch.StartNew(); var transformerNames = new string[0]; var timeout = Debugger.IsAttached ? 60 * 1000000 : 3000; while (sw.ElapsedMilliseconds < timeout && transformerNames.Length != 2) { transformerNames = destination.DatabaseCommands.GetTransformers(0, 1024).Select(x => x.Name).ToArray(); } Assert.NotNull(transformerNames); //precaution Assert.Equal(2, transformerNames.Length); Assert.True(transformerNames.Contains(usernameToUpperTransformer.TransformerName)); Assert.True(transformerNames.Contains(usernameToLowerTransformer.TransformerName)); } }
public void Index_and_transformer_metadata_storage_should_enforce_name_uniqueness_for_writing_transformer_then_index() { using (var store = GetDocumentStore()) { var usernameToUpperTransformer = new UsernameToUpperTransformer("FooBar"); usernameToUpperTransformer.Execute(store); var userByNameIndex = new UserByNameIndex("FooBar"); Assert.Throws <ErrorResponseException>(() => userByNameIndex.Execute(store)); } }
public async Task Manually_removed_indexes_would_remove_metadata_on_startup() { var pathPrefix = Guid.NewGuid().ToString(); var databasePath = String.Empty; var indexesPath = String.Empty; try { var userByAgeIndex = new UserByAgeIndex(); var userByNameIndex = new UserByNameIndex(); var usernameToUpperTransformer = new UsernameToUpperTransformer(); DocumentDatabase databaseStore; using (var store = GetDocumentStore(path: pathPrefix)) { userByNameIndex.Execute(store); userByAgeIndex.Execute(store); usernameToUpperTransformer.Execute(store); databaseStore = await Server.ServerStore.DatabasesLandlord.TryGetOrCreateResourceStore(store.DefaultDatabase); TransactionOperationContext context; using (databaseStore.ConfigurationStorage.ContextPool.AllocateOperationContext(out context)) using (var tx = context.OpenReadTransaction()) { Assert.NotNull( databaseStore.IndexMetadataPersistence.GetIndexMetadataByName(tx.InnerTransaction, context, userByNameIndex.IndexName)); Assert.NotNull( databaseStore.IndexMetadataPersistence.GetIndexMetadataByName(tx.InnerTransaction, context, userByAgeIndex.IndexName)); Assert.NotNull( databaseStore.IndexMetadataPersistence.GetIndexMetadataByName(tx.InnerTransaction, context, usernameToUpperTransformer.TransformerName)); } } indexesPath = databaseStore.Configuration.Indexing.IndexStoragePath; databasePath = databaseStore.Configuration.Core.DataDirectory; foreach (var indexFolder in Directory.GetDirectories(indexesPath)) { IOExtensions.DeleteDirectory(indexFolder); } using (var store = GetDocumentStore(path: pathPrefix)) { databaseStore = await Server.ServerStore.DatabasesLandlord.TryGetOrCreateResourceStore(store.DefaultDatabase); TransactionOperationContext context; using (databaseStore.ConfigurationStorage.ContextPool.AllocateOperationContext(out context)) using (var tx = context.OpenReadTransaction()) { Assert.Null( databaseStore.IndexMetadataPersistence.GetIndexMetadataByName(tx.InnerTransaction, context, userByNameIndex.IndexName)); Assert.Null( databaseStore.IndexMetadataPersistence.GetIndexMetadataByName(tx.InnerTransaction, context, userByAgeIndex.IndexName)); Assert.Null( databaseStore.IndexMetadataPersistence.GetIndexMetadataByName(tx.InnerTransaction, context, usernameToUpperTransformer.TransformerName)); } } } finally { IOExtensions.DeleteDirectory(databasePath); IOExtensions.DeleteDirectory(indexesPath); } }