/// <summary> /// Signals the JobExecution to stop. Iterates through the associated /// StepExecutions, calling StepExecution#SetTerminateOnly(). /// </summary> public void Stop() { foreach (StepExecution stepExecution in _stepExecutions) { stepExecution.SetTerminateOnly(); } _status = BatchStatus.Stopping; }
/// <summary> /// Method used to move status values through their logical progression, and /// override less severe failures with more severe ones. This value is /// compared with the parameter and the one that has higher priority is /// returned. If both are STARTED or less than the value returned is the /// largest in the sequence STARTING, STARTED, COMPLETED. Otherwise the value /// returned is the maximum of the two. /// </summary> /// <param name="other"> other another status to compare to </param> /// <returns> either this or the other status depending on their priority </returns> public BatchStatus UpgradeTo(BatchStatus other) { if (IsGreaterThan(Started) || other.IsGreaterThan(Started)) { return(Max(this, other)); } // Both less than or equal to STARTED if (this == Completed || other == Completed) { return(Completed); } return(Max(this, other)); }
/// <summary> /// Custom constructor using JobExecution. /// </summary> /// <param name="original"></param> public JobExecution(JobExecution original) { JobParameters = original.JobParameters; JobInstance = original.JobInstance; _stepExecutions = original._stepExecutions; _status = original.Status; StartTime = original.StartTime; CreateTime = original.CreateTime; EndTime = original.EndTime; LastUpdated = original.LastUpdated; _exitStatus = original.ExitStatus; _executionContext = original.ExecutionContext; _failureExceptions = original.FailureExceptions; _jobConfigurationName = original.JobConfigurationName; Id = original.Id; Version = original.Version; }
/// <summary> /// Retrieves all job executions for a given minimal status /// </summary> /// <param name="jobIdentifier"></param> /// <param name="minStatus"></param> /// <param name="jobExplorer"></param> /// <returns></returns> private static List <JobExecution> GetJobExecutionsWithStatusGreaterThan(string jobIdentifier, BatchStatus minStatus, IJobExplorer jobExplorer) { long?executionId = GetLongIdentifier(jobIdentifier); if (executionId != null) { JobExecution jobExecution = jobExplorer.GetJobExecution(executionId.Value); if (jobExecution.Status.IsGreaterThan(minStatus)) { return(new List <JobExecution> { jobExecution }); } //empmty list return(new List <JobExecution>()); } int start = 0; int count = 100; List <JobExecution> executions = new List <JobExecution>(); IList <JobInstance> lastInstances = jobExplorer.GetJobInstances(jobIdentifier, start, count); while (lastInstances.Any()) { foreach (JobInstance jobInstance in lastInstances) { IList <JobExecution> jobExecutions = jobExplorer.GetJobExecutions(jobInstance); if (jobExecutions == null || !jobExecutions.Any()) { continue; } executions.AddRange( jobExecutions.Where(jobExecution => jobExecution.Status.IsGreaterThan(minStatus))); } start += count; lastInstances = jobExplorer.GetJobInstances(jobIdentifier, start, count); } return(executions); }
/// <summary> /// given string, returns corresponding status (if it makes sense) /// </summary> /// <param name="status"></param> /// <returns></returns> public static BatchStatus ValueOf(string status) { BatchStatus result = null; if (string.Equals(Completed._label, status, StringComparison.OrdinalIgnoreCase)) { result = Completed; } if (string.Equals(Starting._label, status, StringComparison.OrdinalIgnoreCase)) { result = Starting; } if (string.Equals(Started._label, status, StringComparison.OrdinalIgnoreCase)) { result = Started; } if (string.Equals(Stopping._label, status, StringComparison.OrdinalIgnoreCase)) { result = Stopping; } if (string.Equals(Stopped._label, status, StringComparison.OrdinalIgnoreCase)) { result = Stopped; } if (string.Equals(Failed._label, status, StringComparison.OrdinalIgnoreCase)) { result = Failed; } if (string.Equals(Abandoned._label, status, StringComparison.OrdinalIgnoreCase)) { result = Abandoned; } if (string.Equals(Unknown._label, status, StringComparison.OrdinalIgnoreCase)) { result = Unknown; } if (result != null) { return(result); }//else throw new ArgumentException(string.Format("Unkown status: {0}", status)); }
/// <summary> /// Custom constructor used for serialize/deserialize /// </summary> /// <param name="original"></param> /// <param name="stepExecutions"></param> public JobExecution(JobExecution original, ICollection <StepExecution> stepExecutions) { JobParameters = original.JobParameters; JobInstance = original.JobInstance; _status = original.Status; StartTime = original.StartTime; CreateTime = original.CreateTime; EndTime = original.EndTime; LastUpdated = original.LastUpdated; _exitStatus = original.ExitStatus; _executionContext = original.ExecutionContext; _failureExceptions = original.FailureExceptions; _jobConfigurationName = original.JobConfigurationName; Id = original.Id; Version = original.Version; _stepExecutions = new ConcurrentBag <StepExecution>(); if (stepExecutions != null) { foreach (StepExecution item in stepExecutions) { _stepExecutions.TryAdd(item); } } }
/// <summary> /// return max BatchStatus from 2 /// </summary> /// <param name="status1"></param> /// <param name="status2"></param> /// <returns></returns> public static BatchStatus Max(BatchStatus status1, BatchStatus status2) { return status1.IsGreaterThan(status2) ? status1 : status2; }
/// <summary> ///Upgrade the status field if the provided value is greater than the /// existing one. Clients using this method to set the status can be sure /// that they don't overwrite a failed status with an successful one. /// </summary> /// <param name="status"></param> public void UpgradeStatus(BatchStatus status) { _status = _status.UpgradeTo(status); }
/// <summary> /// Method used to move status values through their logical progression, and /// override less severe failures with more severe ones. This value is /// compared with the parameter and the one that has higher priority is /// returned. If both are STARTED or less than the value returned is the /// largest in the sequence STARTING, STARTED, COMPLETED. Otherwise the value /// returned is the maximum of the two. /// </summary> /// <param name="other"> other another status to compare to </param> /// <returns> either this or the other status depending on their priority </returns> public BatchStatus UpgradeTo(BatchStatus other) { if (IsGreaterThan(Started) || other.IsGreaterThan(Started)) { return Max(this, other); } // Both less than or equal to STARTED if (this == Completed || other == Completed) { return Completed; } return Max(this, other); }
/// <summary> /// /// </summary> /// <param name="other">other a status value to compare</param> /// <returns>true if this is less or equal than other</returns> public bool IsLessThanOrEqualTo(BatchStatus other) { return(_rank <= other._rank); }
/// <summary> /// </summary> /// <param name="other">other a status value to compare</param> /// <returns>true if this is less than other</returns> public bool IsLessThan(BatchStatus other) { return(_rank < other._rank); }
/// <summary> /// /// </summary> /// <param name="other"> other value to compare</param> /// <returns> true if this is greater than other</returns> public bool IsGreaterThan(BatchStatus other) { return(_rank > other._rank); }
/// <summary> /// /// </summary> /// <param name="other"> other value to compare</param> /// <returns> true if this is greater than other</returns> public bool IsGreaterThan(BatchStatus other) { return _rank > other._rank; }
/// <summary> /// Custom constructor with message and Status. /// </summary> /// <param name="msg"></param> /// <param name="status"></param> public JobInterruptedException(String msg, BatchStatus status) : base(msg) { _batchStatus = status; }
/// <summary> /// Retrieves all job executions for a given minimal status /// </summary> /// <param name="jobIdentifier"></param> /// <param name="minStatus"></param> /// <param name="jobExplorer"></param> /// <returns></returns> private static List<JobExecution> GetJobExecutionsWithStatusGreaterThan(string jobIdentifier, BatchStatus minStatus, IJobExplorer jobExplorer) { long? executionId = GetLongIdentifier(jobIdentifier); if (executionId != null) { JobExecution jobExecution = jobExplorer.GetJobExecution(executionId.Value); if (jobExecution.Status.IsGreaterThan(minStatus)) { return new List<JobExecution> { jobExecution }; } //empmty list return new List<JobExecution>(); } int start = 0; int count = 100; List<JobExecution> executions = new List<JobExecution>(); IList<JobInstance> lastInstances = jobExplorer.GetJobInstances(jobIdentifier, start, count); while (lastInstances.Any()) { foreach (JobInstance jobInstance in lastInstances) { IList<JobExecution> jobExecutions = jobExplorer.GetJobExecutions(jobInstance); if (jobExecutions == null || !jobExecutions.Any()) { continue; } executions.AddRange(jobExecutions.Where(jobExecution => jobExecution.Status.IsGreaterThan(minStatus))); } start += count; lastInstances = jobExplorer.GetJobInstances(jobIdentifier, start, count); } return executions; }
/// <summary> /// /// </summary> /// <param name="other">other a status value to compare</param> /// <returns>true if this is less or equal than other</returns> public bool IsLessThanOrEqualTo(BatchStatus other) { return _rank <= other._rank; }
/// <summary> /// </summary> /// <param name="other">other a status value to compare</param> /// <returns>true if this is less than other</returns> public bool IsLessThan(BatchStatus other) { return _rank < other._rank; }
/// <summary> /// return max BatchStatus from 2 /// </summary> /// <param name="status1"></param> /// <param name="status2"></param> /// <returns></returns> public static BatchStatus Max(BatchStatus status1, BatchStatus status2) { return(status1.IsGreaterThan(status2) ? status1 : status2); }