private static void ValidateConfiguration(ServerWideExternalReplication serverWideConfiguration, ExternalReplication externalReplication, string databaseName) { Assert.Equal(PutServerWideExternalReplicationCommand.GetTaskName(serverWideConfiguration.Name), externalReplication.Name); Assert.Equal(serverWideConfiguration.Disabled, externalReplication.Disabled); Assert.Equal(serverWideConfiguration.MentorNode, externalReplication.MentorNode); Assert.Equal(serverWideConfiguration.DelayReplicationFor, externalReplication.DelayReplicationFor); Assert.Equal(databaseName, externalReplication.Database); Assert.Equal(PutServerWideExternalReplicationCommand.GetRavenConnectionStringName(serverWideConfiguration.Name), externalReplication.ConnectionStringName); }
public async Task CanExcludeForNewDatabase() { using (var store = GetDocumentStore()) { var newDbName = store.Database + "-testDatabase"; var serverWideExternalReplication = new ServerWideExternalReplication { Disabled = true, TopologyDiscoveryUrls = new[] { store.Urls.First() }, ExcludedDatabases = new [] { newDbName } }; var result = await store.Maintenance.Server.SendAsync(new PutServerWideExternalReplicationOperation(serverWideExternalReplication)); serverWideExternalReplication.Name = result.Name; await store.Maintenance.Server.SendAsync(new CreateDatabaseOperation(new DatabaseRecord(newDbName))); var record = await store.Maintenance.Server.SendAsync(new GetDatabaseRecordOperation(newDbName)); Assert.Equal(0, record.ExternalReplications.Count); var dbName = $"db/{Guid.NewGuid()}"; var csName = $"cs/{Guid.NewGuid()}"; var connectionString = new RavenConnectionString { Name = csName, Database = dbName, TopologyDiscoveryUrls = new[] { "http://127.0.0.1:12345" } }; var putConnectionStringResult = await store.Maintenance.ForDatabase(newDbName).SendAsync(new PutConnectionStringOperation <RavenConnectionString>(connectionString)); Assert.NotNull(putConnectionStringResult.RaftCommandIndex); var externalReplication = new ExternalReplication(dbName, csName) { Name = "Regular Task", Disabled = true }; await store.Maintenance.ForDatabase(newDbName).SendAsync(new UpdateExternalReplicationOperation(externalReplication)); record = await store.Maintenance.Server.SendAsync(new GetDatabaseRecordOperation(store.Database)); Assert.Equal(1, record.ExternalReplications.Count); Assert.Equal(1, record.RavenConnectionStrings.Count); serverWideExternalReplication.ExcludedDatabases = new[] { store.Database }; await store.Maintenance.Server.SendAsync(new PutServerWideExternalReplicationOperation(serverWideExternalReplication)); record = await store.Maintenance.Server.SendAsync(new GetDatabaseRecordOperation(store.Database)); Assert.Equal(0, record.ExternalReplications.Count); Assert.Equal(0, record.RavenConnectionStrings.Count); record = await store.Maintenance.Server.SendAsync(new GetDatabaseRecordOperation(newDbName)); Assert.Equal(2, record.ExternalReplications.Count); Assert.Equal(2, record.RavenConnectionStrings.Count); Assert.Equal(externalReplication.Name, record.ExternalReplications[0].Name); Assert.Equal(PutServerWideExternalReplicationCommand.GetTaskName(serverWideExternalReplication.Name), record.ExternalReplications[1].Name); serverWideExternalReplication.ExcludedDatabases = null; await store.Maintenance.Server.SendAsync(new PutServerWideExternalReplicationOperation(serverWideExternalReplication)); using (Server.ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (context.OpenReadTransaction()) { var tasks = Server.ServerStore.Cluster.GetServerWideConfigurations(context, OngoingTaskType.Replication, serverWideExternalReplication.Name).ToList(); Assert.Equal(1, tasks.Count); tasks[0].TryGet(nameof(ServerWideExternalReplication.ExcludedDatabases), out BlittableJsonReaderArray excludedDatabases); Assert.NotNull(excludedDatabases); Assert.Equal(0, excludedDatabases.Length); } var newDbName2 = store.Database + "-testDatabase2"; await store.Maintenance.Server.SendAsync(new CreateDatabaseOperation(new DatabaseRecord(newDbName2))); record = await store.Maintenance.Server.SendAsync(new GetDatabaseRecordOperation(newDbName)); Assert.Equal(2, record.ExternalReplications.Count); Assert.Equal(2, record.RavenConnectionStrings.Count); record = await store.Maintenance.Server.SendAsync(new GetDatabaseRecordOperation(newDbName2)); Assert.Equal(1, record.ExternalReplications.Count); Assert.Equal(1, record.RavenConnectionStrings.Count); } }