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