Beispiel #1
0
        protected void LoadConfigurations()
        {
            DocumentsOperationContext context;

            using (_database.DocumentsStorage.ContextPool.AllocateOperationContext(out context))
            {
                context.OpenReadTransaction();

                var sqlReplicationConnections = _database.DocumentsStorage.Get(context, Constants.SqlReplication.SqlReplicationConnections);
                if (sqlReplicationConnections != null)
                {
                    object connections;
                    if (sqlReplicationConnections.Data.TryGetMember("Connections", out connections))
                    {
                        _connections = connections as BlittableJsonReaderObject;
                    }
                }

                var documents = _database.DocumentsStorage.GetDocumentsStartingWith(context, Constants.SqlReplication.SqlReplicationConfigurationPrefix, null, null, 0, MaxSupportedSqlReplication);
                foreach (var document in documents)
                {
                    var configuration  = JsonDeserializationServer.SqlReplicationConfiguration(document.Data);
                    var sqlReplication = new SqlReplication(_database, configuration);
                    Replications.Add(sqlReplication);
                    if (sqlReplication.ValidateName() == false ||
                        sqlReplication.PrepareSqlReplicationConfig(_connections) == false)
                    {
                        return;
                    }
                    sqlReplication.Start();
                }
            }
        }
Beispiel #2
0
 public RelationalDatabaseWriterSimulator(PredefinedSqlConnection predefinedSqlConnection, SqlReplication sqlReplication)
     : base(predefinedSqlConnection)
 {
     _sqlReplication = sqlReplication;
     providerFactory = DbProviderFactories.GetFactory(predefinedSqlConnection.FactoryName);
     commandBuilder  = providerFactory.CreateCommandBuilder();
 }
Beispiel #3
0
        public DynamicJsonValue SimulateSqlReplicationSqlQueries(SimulateSqlReplication simulateSqlReplication, DocumentsOperationContext context)
        {
            try
            {
                var document       = _database.DocumentsStorage.Get(context, simulateSqlReplication.DocumentId);
                var sqlReplication = new SqlReplication(_database, simulateSqlReplication.Configuration);

                var result = sqlReplication.ApplyConversionScript(new List <Document> {
                    document
                }, context);

                if (sqlReplication.PrepareSqlReplicationConfig(_connections, false) == false)
                {
                    return(new DynamicJsonValue
                    {
                        ["LastAlert"] = sqlReplication.Statistics.LastAlert,
                    });
                }

                return(sqlReplication.Simulate(simulateSqlReplication, context, result));
            }
            catch (Exception e)
            {
                return(new DynamicJsonValue
                {
                    ["LastAlert"] = new Alert
                    {
                        Type = AlertType.SqlReplicationError,
                        Severity = AlertSeverity.Error,
                        CreatedAt = SystemTime.UtcNow,
                        Key = simulateSqlReplication.Configuration.Name,
                        Message = "SQL replication error",
                        Content = new ExceptionAlertContent
                        {
                            Message = "Last SQL replication operation for " + simulateSqlReplication.Configuration.Name + " was failed",
                            Exception = e.ToString()
                        }
                    }
                });
            }
        }
Beispiel #4
0
        public RelationalDatabaseWriter(DocumentDatabase database, DocumentsOperationContext context, PredefinedSqlConnection predefinedSqlConnection, SqlReplication sqlReplication)
            : base(predefinedSqlConnection)
        {
            _database = database;
            _context  = context;
            _predefinedSqlConnection = predefinedSqlConnection;
            _sqlReplication          = sqlReplication;
            _logger                      = LoggingSource.Instance.GetLogger <RelationalDatabaseWriter>(_database.Name);
            _providerFactory             = GetDbProviderFactory(_sqlReplication.Configuration);
            _commandBuilder              = _providerFactory.CreateCommandBuilder();
            _connection                  = _providerFactory.CreateConnection();
            _connection.ConnectionString = predefinedSqlConnection.ConnectionString;

            try
            {
                _connection.Open();
            }
            catch (Exception e)
            {
                database.Alerts.AddAlert(new Alert
                {
                    Type    = AlertType.SqlReplicationConnectionError,
                    Message = "Sql Replication could not open connection",
                    Content = new ExceptionAlertContent
                    {
                        Message   = "Sql Replication could not open connection to " + _connection.ConnectionString,
                        Exception = e.ToString()
                    },
                    CreatedAt = SystemTime.UtcNow,
                    Key       = _connection.ConnectionString,
                    Severity  = AlertSeverity.Error
                });
                throw;
            }

            _tx = _connection.BeginTransaction();

            stringParserList = GenerateStringParsers();
        }