internal static bool CanRetryProcess(this IReadWritableProcessState state, IProcessExecutionContext executionContext, ILogger processLogger, IProcessRepository registeredProcesses, IBatchEngineSubscribers batchEngineSubscribers, IStateManager stateManager, IFrameworkLogger fLogger, out bool stop, out string stopMessage) { stop = false; stopMessage = string.Empty; var process = registeredProcesses.GetRegisteredProcesses().FirstOrDefault(p => p.ProcessKey == executionContext.Configuration.ProcessKey); ProcessRetryContext context = new ProcessRetryContext(state.Id, state.ProcessId, processLogger, executionContext); process?.InvokeProcessRetry(context); if (context.StopFlag) { processLogger.Warn("Retry stopped by process class {processType}", process?.GetType()); //state.MarkProcessStatus(CompletionStatus.Finished, ResultStatus.Error, // "Retry stopped by process class", stateManager, registeredProcesses, executionContext, batchEngineSubscribers, fLogger); stopMessage = "Retry stopped by process class"; stop = true; return(false); } foreach (var processSubscriber in batchEngineSubscribers.GetProcessSubscribers().Where(s => s.ProcessKey == context.Configuration.ProcessKey)) { Robustness.Instance.SafeCall(() => processSubscriber.OnProcessRetry(context), executionContext.Logger); if (context.StopFlag) { processLogger.Warn($"Retry stopped by extension {processSubscriber.GetType()}"); stop = true; stopMessage = $"Retry stopped by extension {processSubscriber.GetType()}"; //state.MarkProcessStatus(CompletionStatus.Finished, ResultStatus.Error, // $"Retry stopped by extension {processSubscriber.GetType()}", stateManager, registeredProcesses, executionContext, batchEngineSubscribers, fLogger); //_eventAggregator.Publish(this, Constants.EventProcessStop, // processId.ToString()); return(false); } } return(true); }
private void SubmitProcesses(List <IProcessState> groupProcesses, IGroupEntity groupEntity) { //groupProcesses.ForEach(p => //{ // p.GroupId = groupEntity.Id; // todo // p.Criteria = groupEntity.Criteria; //}); //todo using (var trans = _stateManager.BeginTransaction()) { foreach (var process in groupProcesses) { _stateManager.Insert(process); } trans.Commit(); } var subscribers = _batchEngineSubscribers.GetProcessSubscribers().ToList(); if (subscribers.Count > 0) { groupProcesses.ForEach(p => { var processSubscribers = subscribers.Where(s => s.ProcessKey == p.ProcessKey).ToList(); if (processSubscribers.Count > 0) { ProcessSubmittedContext pContext = new ProcessSubmittedContext(p.Id, p.ProcessKey, groupEntity.IsResubmission, groupEntity.SubmittedBy, LoggerFactory.GetProcessLogger(p.Id, p.ProcessKey)); foreach (var subscriber in subscribers) { Robustness.Instance.SafeCall(() => subscriber.OnProcessSubmitted(pContext)); } } }); } }
static void TriggerProcessEvents(this IReadWritableProcessState state, IProcessRepository registeredProcesses, IProcessExecutionContext context, bool isFailed, bool isStopped, IBatchEngineSubscribers batchEngineSubscribers, IFrameworkLogger fLogger, string reason) { var process = registeredProcesses.GetRegisteredProcesses().FirstOrDefault(p => p.ProcessKey == context.Configuration.ProcessKey); //var context = _cacheAside.GetProcessExecutionContext(state.Id); //process?.InvokeProcessCompeteEvent(context, isFailed); var subscribers = batchEngineSubscribers.GetProcessSubscribers().Where(p => p.ProcessKey == context.Configuration.ProcessKey); //ProcessRetryContext ct =new ProcessRetryContext(context.ProcessState.Id, context.ProcessState.ProcessKey, context.Logger); ProcessCompleteContext ct = new ProcessCompleteContext(context.ProcessState.Id, context.ProcessState.ProcessId, false, false, context.Logger); //IProcessCompleteContext ctx=new proccom ProcessStoppedContext processStoppedContext = null; foreach (var subscriber in subscribers) { if (isFailed) { Robustness.Instance.SafeCall(() => subscriber.ProcessFailed(ct) , fLogger); } else if (isStopped) { if (processStoppedContext == null) { processStoppedContext = new ProcessStoppedContext(state.Id, state.ProcessId, context.Configuration.ProcessKey, reason, context.Logger); } var stoppedContext = processStoppedContext;//access to modified closure Robustness.Instance.SafeCall(() => subscriber.OnProcessStop(stoppedContext) , fLogger); } else { Robustness.Instance.SafeCall(() => subscriber.OnProcessComplete(ct) , fLogger); } } if (isStopped) { Robustness.Instance.SafeCall(() => { if (processStoppedContext == null) { processStoppedContext = new ProcessStoppedContext(state.Id, state.ProcessId, context.Configuration.ProcessKey, reason, context.Logger); } process?.ProcessStopped(processStoppedContext); }); } else if (isFailed) { Robustness.Instance.SafeCall(() => { process?.ProcessFailed(context); }); } else { Robustness.Instance.SafeCall(() => { process?.ProcessCompleted(context); }); } Robustness.Instance.SafeCall(() => { process?.ProcessFinalizer(context); }); }