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(); } } }
public RelationalDatabaseWriterSimulator(PredefinedSqlConnection predefinedSqlConnection, SqlReplication sqlReplication) : base(predefinedSqlConnection) { _sqlReplication = sqlReplication; providerFactory = DbProviderFactories.GetFactory(predefinedSqlConnection.FactoryName); commandBuilder = providerFactory.CreateCommandBuilder(); }
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() } } }); } }
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(); }