/// <summary> /// Prepares writeback settings to write to Hive /// </summary> /// <param name="request"></param> /// <param name="context"></param> /// <returns></returns> public override async Task <PrepareWriteResponse> PrepareWrite(PrepareWriteRequest request, ServerCallContext context) { // Logger.SetLogLevel(Logger.LogLevel.Debug); Logger.SetLogPrefix(request.DataVersions.JobId); Logger.Info("Preparing write..."); _server.WriteConfigured = false; _server.WriteSettings = new WriteSettings { CommitSLA = request.CommitSlaSeconds, Schema = request.Schema, Replication = request.Replication, DataVersions = request.DataVersions, }; if (_server.WriteSettings.IsReplication()) { // reconcile job Logger.Info($"Starting to reconcile Replication Job {request.DataVersions.JobId}"); try { await Replication.ReconcileReplicationJobAsync(_connectionFactory, request); } catch (Exception e) { Logger.Error(e, e.Message, context); return(new PrepareWriteResponse()); } Logger.Info($"Finished reconciling Replication Job {request.DataVersions.JobId}"); } _server.WriteConfigured = true; // Logger.Debug(JsonConvert.SerializeObject(_server.WriteSettings, Formatting.Indented)); Logger.Info("Write prepared."); return(new PrepareWriteResponse()); }
/// <summary> /// Prepares writeback settings to write to file /// </summary> /// <param name="request"></param> /// <param name="context"></param> /// <returns></returns> public override async Task <PrepareWriteResponse> PrepareWrite(PrepareWriteRequest request, ServerCallContext context) { // Logger.SetLogLevel(Logger.LogLevel.Debug); Logger.SetLogPrefix(request.DataVersions.JobId); Logger.Info("Preparing write..."); Logger.Debug(JsonConvert.SerializeObject(request, Formatting.Indented)); _server.WriteConfigured = false; var conn = Utility.GetSqlConnection(request.DataVersions.JobId, true, _server?.Config?.PermanentDirectory); _server.WriteSettings = new WriteSettings { CommitSLA = request.CommitSlaSeconds, Schema = request.Schema, Replication = request.Replication, DataVersions = request.DataVersions, Connection = conn, }; if (_server.WriteSettings.IsReplication()) { try { // setup import export helpers var factory = Utility.GetImportExportFactory(Constants.ModeDelimited); var replicationSettings = JsonConvert.DeserializeObject <ConfigureReplicationFormData>(request.Replication.SettingsJson); replicationSettings.ConvertLegacyConfiguration(); _server.WriteSettings.GoldenImportExport = factory.MakeImportExportFile(conn, replicationSettings, replicationSettings.GetGoldenTableName(), Constants.SchemaName); _server.WriteSettings.VersionImportExport = factory.MakeImportExportFile(conn, replicationSettings, replicationSettings.GetVersionTableName(), Constants.SchemaName); // prepare write locations Directory.CreateDirectory(replicationSettings.GetLocalGoldenDirectory()); Directory.CreateDirectory(replicationSettings.GetLocalVersionDirectory()); } catch (Exception e) { Logger.Error(e, e.Message, context); return(new PrepareWriteResponse()); } // reconcile job Logger.Info($"Starting to reconcile Replication Job {request.DataVersions.JobId}"); try { await Replication.ReconcileReplicationJobAsync(_server.WriteSettings.Connection, request); } catch (Exception e) { Logger.Error(e, e.Message, context); return(new PrepareWriteResponse()); } Logger.Info($"Finished reconciling Replication Job {request.DataVersions.JobId}"); } else { try { // setup import export helper var factory = Utility.GetImportExportFactory(Constants.ModeDelimited); var writeFormData = JsonConvert.DeserializeObject <ConfigureWriteFormData>(request.Schema.PublisherMetaJson); writeFormData.ConvertLegacyConfiguration(); _server.WriteSettings.TargetImportExport = factory.MakeImportExportFile(conn, writeFormData, writeFormData.GetTargetTableName(), Constants.SchemaName); // prepare write location Directory.CreateDirectory(writeFormData.GetLocalTargetDirectory()); // reconcile job Logger.Info($"Starting to reconcile Replication Job {request.DataVersions.JobId}"); request.Replication = new ReplicationWriteRequest { SettingsJson = JsonConvert.SerializeObject(writeFormData.GetReplicationFormData()) }; await Replication.ReconcileReplicationJobAsync(_server.WriteSettings.Connection, request); Logger.Info($"Finished reconciling Replication Job {request.DataVersions.JobId}"); } catch (Exception e) { Logger.Error(e, e.Message, context); return(new PrepareWriteResponse()); } } _server.WriteConfigured = true; // Logger.Debug(JsonConvert.SerializeObject(_server.WriteSettings, Formatting.Indented)); Logger.Info("Write prepared."); return(new PrepareWriteResponse()); }