示例#1
0
            public void WriteDatabaseRecord(DatabaseRecord databaseRecord, SmugglerProgressBase.DatabaseRecordProgress progress, AuthorizationStatus authorizationStatus)
            {
                _writer.WritePropertyName(nameof(databaseRecord.DatabaseName));
                _writer.WriteString(databaseRecord.DatabaseName);
                _writer.WriteComma();

                _writer.WritePropertyName(nameof(databaseRecord.Encrypted));
                _writer.WriteBool(databaseRecord.Encrypted);
                _writer.WriteComma();

                _writer.WritePropertyName(nameof(databaseRecord.Revisions));
                WriteRevisions(databaseRecord.Revisions);
                _writer.WriteComma();

                _writer.WritePropertyName(nameof(databaseRecord.Expiration));
                WriteExpiration(databaseRecord.Expiration);
                _writer.WriteComma();

                if (authorizationStatus == AuthorizationStatus.DatabaseAdmin)
                {
                    _writer.WritePropertyName(nameof(databaseRecord.RavenConnectionStrings));
                    WriteRavenConnectionStrings(databaseRecord.RavenConnectionStrings);
                    _writer.WriteComma();

                    _writer.WritePropertyName(nameof(databaseRecord.SqlConnectionStrings));
                    WriteSqlConnectionStrings(databaseRecord.SqlConnectionStrings);
                    _writer.WriteComma();
                }

                _writer.WritePropertyName(nameof(databaseRecord.Client));
                WriteClientConfiguration(databaseRecord.Client);
            }
示例#2
0
            public void WriteDatabaseRecord(DatabaseRecord databaseRecord, SmugglerProgressBase.DatabaseRecordProgress progress, AuthorizationStatus authorizationStatus)
            {
                var currentDatabaseRecord = _database.ReadDatabaseRecord();
                var tasks = new List <Task>();

                if (currentDatabaseRecord?.Revisions == null &&
                    databaseRecord?.Revisions != null)
                {
                    if (_log.IsInfoEnabled)
                    {
                        _log.Info("Configuring revisions from smuggler");
                    }
                    tasks.Add(_database.ServerStore.SendToLeaderAsync(new EditRevisionsConfigurationCommand(databaseRecord.Revisions, _database.Name)));
                    progress.RevisionsConfigurationUpdated = true;
                }

                if (currentDatabaseRecord?.Expiration == null &&
                    databaseRecord?.Expiration != null)
                {
                    if (_log.IsInfoEnabled)
                    {
                        _log.Info("Configuring expiration from smuggler");
                    }
                    tasks.Add(_database.ServerStore.SendToLeaderAsync(new EditExpirationCommand(databaseRecord.Expiration, _database.Name)));
                    progress.ExpirationConfigurationUpdated = true;
                }

                if (currentDatabaseRecord?.RavenConnectionStrings.Count == 0 &&
                    databaseRecord?.RavenConnectionStrings.Count > 0)
                {
                    if (_log.IsInfoEnabled)
                    {
                        _log.Info("Configuring Raven connection strings configuration from smuggler");
                    }
                    foreach (var connectionString in databaseRecord.RavenConnectionStrings)
                    {
                        tasks.Add(_database.ServerStore.SendToLeaderAsync(new PutRavenConnectionStringCommand(connectionString.Value, _database.Name)));
                    }
                    progress.RavenConnectionStringsUpdated = true;
                }

                if (currentDatabaseRecord?.SqlConnectionStrings.Count == 0 &&
                    databaseRecord?.SqlConnectionStrings.Count > 0)
                {
                    if (_log.IsInfoEnabled)
                    {
                        _log.Info("Configuring SQL connection strings from smuggler");
                    }
                    foreach (var connectionString in databaseRecord.SqlConnectionStrings)
                    {
                        tasks.Add(_database.ServerStore.SendToLeaderAsync(new PutSqlConnectionStringCommand(connectionString.Value, _database.Name)));
                    }
                    progress.SqlConnectionStringsUpdated = true;
                }

                if (currentDatabaseRecord?.Client == null &&
                    databaseRecord?.Client != null)
                {
                    if (_log.IsInfoEnabled)
                    {
                        _log.Info("Configuring client configuration from smuggler");
                    }
                    tasks.Add(_database.ServerStore.SendToLeaderAsync(new PutClientConfigurationCommand(databaseRecord.Client)));
                    progress.ClientConfigurationUpdated = true;
                }

                foreach (var task in tasks)
                {
                    AsyncHelpers.RunSync(() => task);
                }

                tasks.Clear();
            }
示例#3
0
            public void WriteDatabaseRecord(DatabaseRecord databaseRecord, SmugglerProgressBase.DatabaseRecordProgress progress, AuthorizationStatus authorizationStatus, DatabaseRecordItemType databaseRecordItemType)
            {
                _writer.WritePropertyName(nameof(databaseRecord.DatabaseName));
                _writer.WriteString(databaseRecord.DatabaseName);
                _writer.WriteComma();

                _writer.WritePropertyName(nameof(databaseRecord.Encrypted));
                _writer.WriteBool(databaseRecord.Encrypted);

                if (databaseRecordItemType.Contain(DatabaseRecordItemType.ConflictSolverConfig))
                {
                    _writer.WriteComma();
                    _writer.WritePropertyName(nameof(databaseRecord.ConflictSolverConfig));
                    WriteConflictSolver(databaseRecord.ConflictSolverConfig);
                }

                if (databaseRecordItemType.Contain(DatabaseRecordItemType.Settings))
                {
                    _writer.WriteComma();
                    _writer.WritePropertyName(nameof(databaseRecord.Settings));
                    WriteSettings(databaseRecord.Settings);
                }

                if (databaseRecordItemType.Contain(DatabaseRecordItemType.Revisions))
                {
                    _writer.WriteComma();
                    _writer.WritePropertyName(nameof(databaseRecord.Revisions));
                    WriteRevisions(databaseRecord.Revisions);
                }

                if (databaseRecordItemType.Contain(DatabaseRecordItemType.Expiration))
                {
                    _writer.WriteComma();
                    _writer.WritePropertyName(nameof(databaseRecord.Expiration));
                    WriteExpiration(databaseRecord.Expiration);
                }

                if (databaseRecordItemType.Contain(DatabaseRecordItemType.Client))
                {
                    _writer.WriteComma();
                    _writer.WritePropertyName(nameof(databaseRecord.Client));
                    WriteClientConfiguration(databaseRecord.Client);
                }

                if (databaseRecordItemType.Contain(DatabaseRecordItemType.Sorters))
                {
                    _writer.WriteComma();
                    _writer.WritePropertyName(nameof(databaseRecord.Sorters));
                    WriteSorters(databaseRecord.Sorters);
                }

                switch (authorizationStatus)
                {
                case AuthorizationStatus.DatabaseAdmin:
                case AuthorizationStatus.Operator:
                case AuthorizationStatus.ClusterAdmin:
                    if (databaseRecordItemType.Contain(DatabaseRecordItemType.RavenConnectionStrings))
                    {
                        _writer.WriteComma();
                        _writer.WritePropertyName(nameof(databaseRecord.RavenConnectionStrings));
                        WriteRavenConnectionStrings(databaseRecord.RavenConnectionStrings);
                    }

                    if (databaseRecordItemType.Contain(DatabaseRecordItemType.SqlConnectionStrings))
                    {
                        _writer.WriteComma();
                        _writer.WritePropertyName(nameof(databaseRecord.SqlConnectionStrings));
                        WriteSqlConnectionStrings(databaseRecord.SqlConnectionStrings);
                    }

                    if (databaseRecordItemType.Contain(DatabaseRecordItemType.PeriodicBackups))
                    {
                        _writer.WriteComma();
                        _writer.WritePropertyName(nameof(databaseRecord.PeriodicBackups));
                        WritePeriodicBackups(databaseRecord.PeriodicBackups);
                    }

                    if (databaseRecordItemType.Contain(DatabaseRecordItemType.ExternalReplications))
                    {
                        _writer.WriteComma();
                        _writer.WritePropertyName(nameof(databaseRecord.ExternalReplications));
                        WriteExternalReplications(databaseRecord.ExternalReplications);
                    }

                    if (databaseRecordItemType.Contain(DatabaseRecordItemType.RavenEtls))
                    {
                        _writer.WriteComma();
                        _writer.WritePropertyName(nameof(databaseRecord.RavenEtls));
                        WriteRavenEtls(databaseRecord.RavenEtls);
                    }

                    if (databaseRecordItemType.Contain(DatabaseRecordItemType.SqlEtls))
                    {
                        _writer.WriteComma();
                        _writer.WritePropertyName(nameof(databaseRecord.SqlEtls));
                        WriteSqlEtls(databaseRecord.SqlEtls);
                    }

                    if (databaseRecordItemType.Contain(DatabaseRecordItemType.HubPullReplications))
                    {
                        _writer.WriteComma();
                        _writer.WritePropertyName(nameof(databaseRecord.HubPullReplications));
                        WriteHubPullReplications(databaseRecord.HubPullReplications);
                    }

                    if (databaseRecordItemType.Contain(DatabaseRecordItemType.SinkPullReplications))
                    {
                        _writer.WriteComma();
                        _writer.WritePropertyName(nameof(databaseRecord.SinkPullReplications));
                        WriteSinkPullReplications(databaseRecord.SinkPullReplications);
                    }

                    break;
                }
            }
            public void WriteDatabaseRecord(DatabaseRecord databaseRecord, SmugglerProgressBase.DatabaseRecordProgress progress, AuthorizationStatus authorizationStatus)
            {
                var currentDatabaseRecord = _database.ReadDatabaseRecord();
                var tasks = new List <Task <(long Index, object Result)> >();

                if (currentDatabaseRecord?.Revisions == null &&
                    databaseRecord?.Revisions != null)
                {
                    if (_log.IsInfoEnabled)
                    {
                        _log.Info("Configuring revisions from smuggler");
                    }
                    tasks.Add(_database.ServerStore.SendToLeaderAsync(new EditRevisionsConfigurationCommand(databaseRecord.Revisions, _database.Name)));
                    progress.RevisionsConfigurationUpdated = true;
                }

                if (currentDatabaseRecord?.Expiration == null &&
                    databaseRecord?.Expiration != null)
                {
                    if (_log.IsInfoEnabled)
                    {
                        _log.Info("Configuring expiration from smuggler");
                    }
                    tasks.Add(_database.ServerStore.SendToLeaderAsync(new EditExpirationCommand(databaseRecord.Expiration, _database.Name)));
                    progress.ExpirationConfigurationUpdated = true;
                }

                if (currentDatabaseRecord?.RavenConnectionStrings.Count == 0 &&
                    databaseRecord?.RavenConnectionStrings.Count > 0)
                {
                    if (_log.IsInfoEnabled)
                    {
                        _log.Info("Configuring Raven connection strings configuration from smuggler");
                    }
                    foreach (var connectionString in databaseRecord.RavenConnectionStrings)
                    {
                        tasks.Add(_database.ServerStore.SendToLeaderAsync(new PutRavenConnectionStringCommand(connectionString.Value, _database.Name)));
                    }
                    progress.RavenConnectionStringsUpdated = true;
                }

                if (currentDatabaseRecord?.SqlConnectionStrings.Count == 0 &&
                    databaseRecord?.SqlConnectionStrings.Count > 0)
                {
                    if (_log.IsInfoEnabled)
                    {
                        _log.Info("Configuring SQL connection strings from smuggler");
                    }
                    foreach (var connectionString in databaseRecord.SqlConnectionStrings)
                    {
                        tasks.Add(_database.ServerStore.SendToLeaderAsync(new PutSqlConnectionStringCommand(connectionString.Value, _database.Name)));
                    }
                    progress.SqlConnectionStringsUpdated = true;
                }

                if (currentDatabaseRecord?.Client == null &&
                    databaseRecord?.Client != null)
                {
                    if (_log.IsInfoEnabled)
                    {
                        _log.Info("Configuring client configuration from smuggler");
                    }
                    tasks.Add(_database.ServerStore.SendToLeaderAsync(new PutClientConfigurationCommand(databaseRecord.Client)));
                    progress.ClientConfigurationUpdated = true;
                }

                if (tasks.Count == 0)
                {
                    return;
                }

                long maxIndex = 0;

                foreach (var task in tasks)
                {
                    var(index, _) = AsyncHelpers.RunSync(() => task);
                    if (index > maxIndex)
                    {
                        maxIndex = index;
                    }
                }

                AsyncHelpers.RunSync(() => _database.RachisLogIndexNotifications.WaitForIndexNotification(maxIndex, _database.ServerStore.Engine.OperationTimeout));

                tasks.Clear();
            }