public async Task Should_replicate_all_transformers_periodically() { using (var sourceServer = GetNewServer(8077)) using (var source = NewRemoteDocumentStore(ravenDbServer: sourceServer)) using (var destinationServer1 = GetNewServer(8078)) using (var destination1 = NewRemoteDocumentStore(ravenDbServer: destinationServer1)) using (var destinationServer2 = GetNewServer()) using (var destination2 = NewRemoteDocumentStore(ravenDbServer: destinationServer2)) using (var destinationServer3 = GetNewServer(8081)) using (var destination3 = NewRemoteDocumentStore(ravenDbServer: destinationServer3)) { CreateDatabaseWithReplication(source, "testDB"); CreateDatabaseWithReplication(destination1, "testDB"); CreateDatabaseWithReplication(destination2, "testDB"); CreateDatabaseWithReplication(destination3, "testDB"); //turn-off automatic index replication - precaution source.Conventions.IndexAndTransformerReplicationMode = IndexAndTransformerReplicationMode.None; // ReSharper disable once AccessToDisposedClosure SetupReplication(source, "testDB", store => false, destination1, destination2, destination3); var userTransformer = new UserWithoutExtraInfoTransformer(); var anotherTransformer = new AnotherTransformer(); var yetAnotherTransformer = new YetAnotherTransformer(); source.DatabaseCommands.ForDatabase("testDB").PutTransformer(userTransformer.TransformerName, userTransformer.CreateTransformerDefinition()); source.DatabaseCommands.ForDatabase("testDB").PutTransformer(anotherTransformer.TransformerName, anotherTransformer.CreateTransformerDefinition()); source.DatabaseCommands.ForDatabase("testDB").PutTransformer(yetAnotherTransformer.TransformerName, yetAnotherTransformer.CreateTransformerDefinition()); var sourceDB = await sourceServer.Server.GetDatabaseInternal("testDB"); var replicationTask = sourceDB.StartupTasks.OfType <ReplicationTask>().First(); replicationTask.ReplicateIndexesAndTransformersTask(null); var expectedTransformerNames = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase) { userTransformer.TransformerName, anotherTransformer.TransformerName, yetAnotherTransformer.TransformerName }; var transformerNamesAtDestination1 = destination1.DatabaseCommands.ForDatabase("testDB").GetTransformers(0, 1024); var transformerNamesAtDestination2 = destination2.DatabaseCommands.ForDatabase("testDB").GetTransformers(0, 1024); var transformerNamesAtDestination3 = destination3.DatabaseCommands.ForDatabase("testDB").GetTransformers(0, 1024); Assert.True(expectedTransformerNames.SetEquals(transformerNamesAtDestination1.Select(x => x.Name).ToArray())); Assert.True(expectedTransformerNames.SetEquals(transformerNamesAtDestination2.Select(x => x.Name).ToArray())); Assert.True(expectedTransformerNames.SetEquals(transformerNamesAtDestination3.Select(x => x.Name).ToArray())); } }
public void Replicate_all_transformers_should_respect_disable_replication_flag() { var requestFactory = new HttpRavenRequestFactory(); using (var sourceServer = GetNewServer(8077)) using (var source = NewRemoteDocumentStore(ravenDbServer: sourceServer, fiddler: true)) using (var destinationServer1 = GetNewServer(8078)) using (var destination1 = NewRemoteDocumentStore(ravenDbServer: destinationServer1, fiddler: true)) using (var destinationServer2 = GetNewServer()) using (var destination2 = NewRemoteDocumentStore(ravenDbServer: destinationServer2, fiddler: true)) using (var destinationServer3 = GetNewServer(8081)) using (var destination3 = NewRemoteDocumentStore(ravenDbServer: destinationServer3, fiddler: true)) { CreateDatabaseWithReplication(source, "testDB"); CreateDatabaseWithReplication(destination1, "testDB"); CreateDatabaseWithReplication(destination2, "testDB"); CreateDatabaseWithReplication(destination3, "testDB"); //make sure replication is off for indexes/transformers source.Conventions.IndexAndTransformerReplicationMode = IndexAndTransformerReplicationMode.None; var userTransformer = new UserWithoutExtraInfoTransformer(); var anotherTransformer = new AnotherTransformer(); var yetAnotherTransformer = new YetAnotherTransformer(); source.DatabaseCommands.ForDatabase("testDB").PutTransformer(userTransformer.TransformerName, userTransformer.CreateTransformerDefinition()); source.DatabaseCommands.ForDatabase("testDB").PutTransformer(anotherTransformer.TransformerName, anotherTransformer.CreateTransformerDefinition()); source.DatabaseCommands.ForDatabase("testDB").PutTransformer(yetAnotherTransformer.TransformerName, yetAnotherTransformer.CreateTransformerDefinition()); var expectedTransformerNames = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase) { userTransformer.TransformerName, anotherTransformer.TransformerName, yetAnotherTransformer.TransformerName }; // ReSharper disable once AccessToDisposedClosure SetupReplication(source, "testDB", store => store == destination2, destination1, destination2, destination3); var replicationRequestUrl = string.Format("{0}/databases/testDB/replication/replicate-transformers?op=replicate-all", source.Url); var replicationRequest = requestFactory.Create(replicationRequestUrl, "POST", new RavenConnectionStringOptions { Url = source.Url }); replicationRequest.ExecuteRequest(); var transformerNamesAtDestination1 = destination1.DatabaseCommands.ForDatabase("testDB").GetTransformers(0, 1024); var transformerNamesAtDestination2 = destination2.DatabaseCommands.ForDatabase("testDB").GetTransformers(0, 1024); var transformerNamesAtDestination3 = destination3.DatabaseCommands.ForDatabase("testDB").GetTransformers(0, 1024); Assert.True(expectedTransformerNames.SetEquals(transformerNamesAtDestination1.Select(x => x.Name).ToArray())); Assert.Equal(0, transformerNamesAtDestination2.Length); Assert.True(expectedTransformerNames.SetEquals(transformerNamesAtDestination3.Select(x => x.Name).ToArray())); } }
public void Should_replicate_all_transformers_if_relevant_endpoint_is_hit() { var requestFactory = new HttpRavenRequestFactory(); using (var sourceServer = GetNewServer(8077)) using (var source = NewRemoteDocumentStore(ravenDbServer: sourceServer, fiddler: true)) using (var destinationServer1 = GetNewServer(8078)) using (var destination1 = NewRemoteDocumentStore(ravenDbServer: destinationServer1, fiddler: true)) using (var destinationServer2 = GetNewServer()) using (var destination2 = NewRemoteDocumentStore(ravenDbServer: destinationServer2, fiddler: true)) using (var destinationServer3 = GetNewServer(8081)) using (var destination3 = NewRemoteDocumentStore(ravenDbServer: destinationServer3, fiddler: true)) { CreateDatabaseWithReplication(source, "testDB"); CreateDatabaseWithReplication(destination1, "testDB"); CreateDatabaseWithReplication(destination2, "testDB"); CreateDatabaseWithReplication(destination3, "testDB"); //make sure replication is off for indexes/transformers source.Conventions.IndexAndTransformerReplicationMode = IndexAndTransformerReplicationMode.None; var userTransformer = new UserWithoutExtraInfoTransformer(); var anotherTransformer = new AnotherTransformer(); var yetAnotherTransformer = new YetAnotherTransformer(); var conflictDocumentsTransformer = new RavenConflictDocumentsTransformer(); // #RavenDB-3981 source.DatabaseCommands.ForDatabase("testDB").PutTransformer(userTransformer.TransformerName, userTransformer.CreateTransformerDefinition()); source.DatabaseCommands.ForDatabase("testDB").PutTransformer(anotherTransformer.TransformerName, anotherTransformer.CreateTransformerDefinition()); source.DatabaseCommands.ForDatabase("testDB").PutTransformer(yetAnotherTransformer.TransformerName, yetAnotherTransformer.CreateTransformerDefinition()); var expectedTransformerNames = new List <string>() { userTransformer.TransformerName, anotherTransformer.TransformerName, yetAnotherTransformer.TransformerName }; expectedTransformerNames.Sort(); // ReSharper disable once AccessToDisposedClosure SetupReplication(source, "testDB", store => false, destination1, destination2, destination3); var replicationRequestUrl = string.Format("{0}/databases/testDB/replication/replicate-transformers?op=replicate-all", source.Url); var replicationRequest = requestFactory.Create(replicationRequestUrl, HttpMethods.Post, new RavenConnectionStringOptions { Url = source.Url }); replicationRequest.ExecuteRequest(); var transformerNamesAtDestination1 = destination1.DatabaseCommands.ForDatabase("testDB").GetTransformers(0, 1024) .Where(x => x.Name != conflictDocumentsTransformer.TransformerName) .Select(x => x.Name) .ToList(); var transformerNamesAtDestination2 = destination2.DatabaseCommands.ForDatabase("testDB").GetTransformers(0, 1024) .Where(x => x.Name != conflictDocumentsTransformer.TransformerName) .Select(x => x.Name) .ToList(); var transformerNamesAtDestination3 = destination3.DatabaseCommands.ForDatabase("testDB").GetTransformers(0, 1024) .Where(x => x.Name != conflictDocumentsTransformer.TransformerName) .Select(x => x.Name) .ToList(); transformerNamesAtDestination1.Sort(); transformerNamesAtDestination2.Sort(); transformerNamesAtDestination3.Sort(); Assert.Equal(expectedTransformerNames, transformerNamesAtDestination1); Assert.Equal(expectedTransformerNames, transformerNamesAtDestination2); Assert.Equal(expectedTransformerNames, transformerNamesAtDestination3); } }