Beispiel #1
0
 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);
 }
Beispiel #2
0
        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);
            }
        }