示例#1
0
        public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep)
        {
            Tracer.Enter("closeimportconnectionresults");
            try
            {
                CloseRunspace();

                CloseImportConnectionResults cicr = new CloseImportConnectionResults();
                Tracer.TraceInformation("custom-data {0}", importRunStep.CustomData);
                Tracer.TraceInformation("close-reason {0}", importRunStep.Reason);
                if (importRunStep.Reason == CloseReason.Normal)
                {
                    cicr.CustomData = importRunStep.CustomData;
                }
                Dispose();
                return(cicr);
            }
            catch (Exception ex)
            {
                Tracer.TraceError("closeimportconnection", ex);
                throw;
            }
            finally
            {
                Tracer.Exit("closeimportconnectionresults");
            }
        }
示例#2
0
        /// <summary>
        /// Closes the import session
        /// </summary>
        /// <param name="importRunStep">The current run step</param>
        /// <returns>Results of the import session close</returns>
        public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep)
        {
            try
            {
                CloseImportConnectionResults results = new CloseImportConnectionResults();

                if (this.importResponse != null)
                {
                    results.CustomData = this.importResponse.Watermark;

                    ImportReleaseRequest request = new ImportReleaseRequest();
                    request.Context           = this.importResponse.Context;
                    request.NormalTermination = importRunStep.Reason == CloseReason.Normal;
                    this.client.ImportEnd(request);
                }

                this.Close();

                Logger.WriteLine("Import Complete");
                Logger.WriteSeparatorLine('*');

                return(results);
            }
            catch (Exception ex)
            {
                Logger.WriteException(ex);
                throw;
            }
        }
        public void GetDeltaImport()
        {
            using (SQLManagementAgent ma = new SQLManagementAgent())
            {
                Configuration.Schema = ma.DefaultSchemaXml.XmlDeserializeFromString <SchemaConfiguration>();
                Schema schema = ma.GetSchemaDetached();

                // first get full data to get deltawatermark
                ma.Schema     = schema;
                ma.ImportType = OperationType.Delta;
                ma.CustomData = "140180";
                ma.PageSize   = 1;

                System.Collections.ObjectModel.KeyedCollection <string, ConfigParameter> configParams = null;
                ma.OpenImportConnectionDetached(configParams, schema, null);

                GetImportEntriesRunStep rs = new GetImportEntriesRunStep();

                GetImportEntriesResults rest = new GetImportEntriesResults();
                rest.MoreToImport = true;
                while (rest.MoreToImport)
                {
                    rest = ma.GetImportEntriesDetached(rs);
                }

                CloseImportConnectionRunStep dummyCloseImportRunStep = null;
                ma.CloseImportConnectionDetached(dummyCloseImportRunStep);
            }
        }
示例#4
0
        public CloseImportConnectionResults CloseImportConnectionDetached(CloseImportConnectionRunStep importRunStep)
        {
            Tracer.Enter(nameof(CloseImportConnectionDetached));
            CloseImportConnectionResults result = new CloseImportConnectionResults();

            try
            {
                if (Configuration.RunAfterImport)
                {
                    List <SqlParameter> parameters = new List <SqlParameter>();
                    parameters.Add(new SqlParameter("importtype", ImportType.ToString()));
                    parameters.Add(new SqlParameter("customdata", CustomData));
                    methods.RunStoredProcedure(Configuration.ImportCommandAfter, parameters);
                    parameters.Clear();
                    parameters = null;
                }
                methods.CloseConnection();
                if (importAnchors != null)
                {
                    importAnchors.Clear();
                    importAnchors = null;
                }
                GC.Collect();
            }
            catch (Exception ex)
            {
                Tracer.TraceError(nameof(CloseImportConnectionDetached), ex);
                throw;
            }
            finally
            {
                Tracer.Exit(nameof(CloseImportConnectionDetached));
            }
            return(result);
        }
示例#5
0
文件: CDATA.cs 项目: fujie/apiserver
 // CloseImportConnection
 public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep _importRunStepInfo)
 {
     utils.Logger(TraceEventType.Information,
                  ConstDefinition.ID0600_START_CLOSEIMPORTCONNECTION,
                  ConstDefinition.MSG0600_START_CLOSEIMPORTCONNECTION);
     return(new CloseImportConnectionResults());
 }
示例#6
0
        public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep)
        {
            CloseImportConnectionResults closeImportConnectionResults = new CloseImportConnectionResults();

            closeImportConnectionResults.CustomData = _currentRuntimeStamp;
            return(closeImportConnectionResults);
        }
示例#7
0
        //private List<CSEntryChange> ConvertToCsentries(List<object> currentImportBatchEntities)
        //{
        //    //TODO: throw error or warning?
        //    if (currentImportBatchEntities.Count == 0)
        //        return new List<CSEntryChange>();

        //    var contactCsentries = new List<CSEntryChange>();
        //    string typeName = currentImportBatchEntities.First().GetType().Name;

        //    List<string> usedAttributes = _schemaTypes.Types[typeName].Attributes
        //        .Select(attribute => attribute.Name).ToList();

        //    if (_schemaTypes.Types[typeName].AnchorAttributes.Any())
        //    {
        //        usedAttributes.AddRange(_schemaTypes.Types[typeName].AnchorAttributes.Select(attribute => attribute.Name));
        //    }

        //    foreach (object contact in currentImportBatchEntities)
        //    {
        //        CSEntryChange csentry = CSEntryChange.Create();
        //        //TODO: change csentryconverter to automatically map name from type name. Setting of ObjectType can then be removed
        //        csentry.ObjectType = typeName;
        //        csentry.ObjectModificationType = ObjectModificationType.Add;

        //        try
        //        {
        //            //List<AttributeChange> attributes = CsentryConverter.GetCsentryAttributes(contact);
        //            List<AttributeChange> attributes = CsentryConverter.GetCsentryAttributes(contact, usedAttributes);

        //            attributes.ForEach(atr => csentry.AttributeChanges.Add(atr));
        //            contactCsentries.Add(csentry);
        //        }
        //        catch (Exception ex)
        //        {
        //            csentry.ErrorCodeImport = MAImportError.ImportErrorCustomContinueRun;
        //            csentry.ErrorDetail = ex.ToString();
        //            Logger.Log.Error(ex);
        //        }
        //    }

        //    return contactCsentries;
        //}

        public virtual CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep)
        {
            foreach (var repoContainer in _objectSources)
            {
                repoContainer.Dispose();
            }

            return(new CloseImportConnectionResults());
        }
        /// <summary>
        /// Closes the import session
        /// </summary>
        /// <param name="importRunStepInfo">The current run step</param>
        /// <returns>Results of the import session close</returns>
        CloseImportConnectionResults IMAExtensible2CallImport.CloseImportConnection(CloseImportConnectionRunStep importRunStepInfo)
        {
            try
            {
                OperationBase operation;
                if (this.ImportType == OperationType.Delta)
                {
                    operation = MAConfig.GlobalOperations.FirstOrDefault(t => t is ImportDeltaEndOperation);
                }
                else
                {
                    operation = MAConfig.GlobalOperations.FirstOrDefault(t => t is ImportFullEndOperation);
                }

                if (operation != null)
                {
                    try
                    {
                        SshConnection.ExecuteOperation(operation);
                    }
                    catch (Exception ex)
                    {
                        Logger.WriteLine("Could not perform import end operation");
                        Logger.WriteException(ex);
                        throw new ExtensibleExtensionException("Import end operation failed", ex);
                    }
                }

                try
                {
                    SshConnection.CloseSshConnection();
                }
                catch (Exception ex)
                {
                    Logger.WriteLine("Could not close SSH connection");
                    Logger.WriteException(ex);
                }

                Logger.WriteLine("Import Complete");
                Logger.WriteSeparatorLine('*');
            }
            catch (ExtensibleExtensionException)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.WriteLine("A exception occured during the open export connection operartion");
                Logger.WriteException(ex);
                throw new ExtensibleExtensionException("An exception occured during the open export connection operation", ex);
            }

            return(new CloseImportConnectionResults());
        }
        /// <summary>
        /// Used by the management agent to allow for code cleanup.
        /// </summary>
        /// <param name="importRunStep"></param>
        /// <returns></returns>
        public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep)
        {
            _customersEnumerator = null;
            _customersInfo       = null;
            _customers           = null;
            _users           = null;
            _usersEnumerator = null;

            _customersInfoEnumerator.Dispose();

            return(new CloseImportConnectionResults());
        }
示例#10
0
        public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep)
        {
            if (this.importRunStepParameters.ImportType == OperationType.Full)
            {
                // We just performed a full import so clear the queue
                CSEntryChangeQueue.Clear();
            }

            // Save the remaining items in the queue. If we have done a full import, the queue will be empty, and will clear any existing delta records
            CSEntryChangeQueue.SaveQueue(this.filename, this.operationSchema);

            return(new CloseImportConnectionResults());
        }
示例#11
0
        public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStepInfo)
        {
            try
            {
                this.CloseRSAConnection();

                return(new CloseImportConnectionResults());
            }
            catch (Exception ex)
            {
                EmailError(ex);
                throw ex;
            }
        }
示例#12
0
        public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep)
        {
            logger.Info("Closing import connection: {0}", importRunStep.Reason);

            if (this.importContext == null)
            {
                logger.Trace("No import context detected");
                return(new CloseImportConnectionResults());
            }

            this.importContext.Timer.Stop();

            if (importRunStep.Reason != CloseReason.Normal)
            {
                if (this.importContext.CancellationTokenSource != null)
                {
                    logger.Info("Cancellation request received");
                    this.importContext.CancellationTokenSource.Cancel();
                    this.importContext.CancellationTokenSource.Token.WaitHandle.WaitOne();
                    logger.Info("Cancellation completed");
                }
            }

            logger.Info("Import operation complete");
            logger.Info($"Imported {this.importContext.ImportedItemCount} objects");

            if (this.importContext.ImportedItemCount > 0 && this.importContext.Timer.Elapsed.TotalSeconds > 0)
            {
                if (this.importContext.ProducerDuration.TotalSeconds > 0)
                {
                    logger.Info($"CSEntryChange production duration: {this.importContext.ProducerDuration}");
                    logger.Info($"CSEntryChange production speed: {(this.importContext.ImportedItemCount / this.importContext.ProducerDuration.TotalSeconds):N2} obj/sec");
                }

                logger.Info($"Import duration: {this.importContext.Timer.Elapsed}");
                logger.Info($"Import speed: {(this.importContext.ImportedItemCount / this.importContext.Timer.Elapsed.TotalSeconds):N2} obj/sec");
            }

            if (this.importContext.OutgoingWatermark?.Any() == true)
            {
                string wm = JsonConvert.SerializeObject(this.importContext.OutgoingWatermark);
                logger.Trace($"Watermark: {wm}");
                return(new CloseImportConnectionResults(wm));
            }
            else
            {
                return(new CloseImportConnectionResults());
            }
        }
        public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep)
        {
            Logger.WriteLine("Closing import connection: {0}", importRunStep.Reason);

            try
            {
                if (importRunStep.Reason != CloseReason.Normal)
                {
                    this.cancellationToken?.Cancel();
                }

                if (this.importRunStep.ImportType == OperationType.Full)
                {
                    CSEntryChangeQueue.Clear();
                    CSEntryChangeQueue.SaveQueue(this.DeltaPath, this.operationSchemaTypes);
                    Logger.WriteLine("Cleared delta file");
                }
                else
                {
                    Logger.WriteLine("Writing {0} delta entries to file", CSEntryChangeQueue.Count);
                    CSEntryChangeQueue.SaveQueue(this.DeltaPath, this.operationSchemaTypes);
                }
            }
            catch (Exception ex)
            {
                Logger.WriteLine("An unexpected error occurred");
                Logger.WriteException(ex);
                throw;
            }

            Logger.WriteSeparatorLine('*');
            Logger.WriteLine("Operation statistics");
            Logger.WriteLine("Import objects: {0}", this.opCount);
            Logger.WriteLine("Operation time: {0}", this.timer.Elapsed);
            Logger.WriteLine("Ops/sec: {0:N3}", this.opCount / this.timer.Elapsed.TotalSeconds);
            Logger.WriteSeparatorLine('*');

            return(new CloseImportConnectionResults(null));
        }
 public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep)
 {
     throw new NotImplementedException();
 }
 public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep)
 {
     return(new CloseImportConnectionResults());
 }
示例#16
0
 CloseImportConnectionResults IMAExtensible2CallImport.CloseImportConnection(CloseImportConnectionRunStep importRunStep)
 {
     return(CloseImportConnectionDetached(importRunStep));
 }