# HG changeset patch # User Sebastien Jodogne # Date 1536229922 -7200 # Node ID 7cfc8d266f41d6e111dc6295b6cff450ab2fc3a6 # Parent 1e8c4ecd02f488e67e5127c93e021c264d04b9ca reason for releasing resources in jobs diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 Core/Enumerations.h --- a/Core/Enumerations.h Thu Sep 06 11:06:54 2018 +0200 +++ b/Core/Enumerations.h Thu Sep 06 12:32:02 2018 +0200 @@ -567,6 +567,15 @@ JobStepCode_Retry }; + enum JobReleaseReason + { + JobReleaseReason_Paused, + JobReleaseReason_Canceled, + JobReleaseReason_Success, + JobReleaseReason_Failure, + JobReleaseReason_Retry + }; + /** * WARNING: Do not change the explicit values in the enumerations diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 Core/JobsEngine/IJob.h --- a/Core/JobsEngine/IJob.h Thu Sep 06 11:06:54 2018 +0200 +++ b/Core/JobsEngine/IJob.h Thu Sep 06 12:32:02 2018 +0200 @@ -55,7 +55,8 @@ // Method called once the job is resubmitted after a failure virtual void SignalResubmit() = 0; - virtual void ReleaseResources() = 0; // For pausing/canceling jobs + // For pausing/canceling jobs + virtual void ReleaseResources(JobReleaseReason reason) = 0; virtual float GetProgress() = 0; diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 Core/JobsEngine/JobsEngine.cpp --- a/Core/JobsEngine/JobsEngine.cpp Thu Sep 06 11:06:54 2018 +0200 +++ b/Core/JobsEngine/JobsEngine.cpp Thu Sep 06 12:32:02 2018 +0200 @@ -55,14 +55,14 @@ if (running.IsPauseScheduled()) { - running.GetJob().ReleaseResources(); + running.GetJob().ReleaseResources(JobReleaseReason_Paused); running.MarkPause(); return false; } if (running.IsCancelScheduled()) { - running.GetJob().ReleaseResources(); + running.GetJob().ReleaseResources(JobReleaseReason_Canceled); running.MarkCanceled(); return false; } @@ -89,19 +89,19 @@ switch (result.GetCode()) { case JobStepCode_Success: + running.GetJob().ReleaseResources(JobReleaseReason_Success); running.UpdateStatus(ErrorCode_Success); - running.GetJob().ReleaseResources(); running.MarkSuccess(); return false; case JobStepCode_Failure: - running.GetJob().ReleaseResources(); + running.GetJob().ReleaseResources(JobReleaseReason_Failure); running.UpdateStatus(result.GetFailureCode()); running.MarkFailure(); return false; case JobStepCode_Retry: - running.GetJob().ReleaseResources(); + running.GetJob().ReleaseResources(JobReleaseReason_Retry); running.UpdateStatus(ErrorCode_Success); running.MarkRetry(result.GetRetryTimeout()); return false; diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 Core/JobsEngine/Operations/SequenceOfOperationsJob.cpp --- a/Core/JobsEngine/Operations/SequenceOfOperationsJob.cpp Thu Sep 06 11:06:54 2018 +0200 +++ b/Core/JobsEngine/Operations/SequenceOfOperationsJob.cpp Thu Sep 06 12:32:02 2018 +0200 @@ -383,7 +383,7 @@ } - void SequenceOfOperationsJob::ReleaseResources() + void SequenceOfOperationsJob::ReleaseResources(JobReleaseReason reason) { boost::mutex::scoped_lock lock(mutex_); connectionManager_.Close(); diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 Core/JobsEngine/Operations/SequenceOfOperationsJob.h --- a/Core/JobsEngine/Operations/SequenceOfOperationsJob.h Thu Sep 06 11:06:54 2018 +0200 +++ b/Core/JobsEngine/Operations/SequenceOfOperationsJob.h Thu Sep 06 12:32:02 2018 +0200 @@ -132,7 +132,7 @@ virtual void SignalResubmit(); - virtual void ReleaseResources(); + virtual void ReleaseResources(JobReleaseReason reason); virtual float GetProgress(); diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 OrthancServer/ServerJobs/ArchiveJob.h --- a/OrthancServer/ServerJobs/ArchiveJob.h Thu Sep 06 11:06:54 2018 +0200 +++ b/OrthancServer/ServerJobs/ArchiveJob.h Thu Sep 06 12:32:02 2018 +0200 @@ -86,7 +86,7 @@ virtual JobStepResult ExecuteStep(); - virtual void ReleaseResources() + virtual void ReleaseResources(JobReleaseReason reason) { } diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 OrthancServer/ServerJobs/DicomModalityStoreJob.cpp --- a/OrthancServer/ServerJobs/DicomModalityStoreJob.cpp Thu Sep 06 11:06:54 2018 +0200 +++ b/OrthancServer/ServerJobs/DicomModalityStoreJob.cpp Thu Sep 06 12:32:02 2018 +0200 @@ -164,7 +164,7 @@ } } - void DicomModalityStoreJob::ReleaseResources() // For pausing jobs + void DicomModalityStoreJob::ReleaseResources(JobReleaseReason reason) // For pausing jobs { connection_.reset(NULL); } diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 OrthancServer/ServerJobs/DicomModalityStoreJob.h --- a/OrthancServer/ServerJobs/DicomModalityStoreJob.h Thu Sep 06 11:06:54 2018 +0200 +++ b/OrthancServer/ServerJobs/DicomModalityStoreJob.h Thu Sep 06 12:32:02 2018 +0200 @@ -87,7 +87,7 @@ void SetMoveOriginator(const std::string& aet, int id); - virtual void ReleaseResources(); + virtual void ReleaseResources(JobReleaseReason reason); virtual void GetJobType(std::string& target) { diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 OrthancServer/ServerJobs/OrthancPeerStoreJob.cpp --- a/OrthancServer/ServerJobs/OrthancPeerStoreJob.cpp Thu Sep 06 11:06:54 2018 +0200 +++ b/OrthancServer/ServerJobs/OrthancPeerStoreJob.cpp Thu Sep 06 12:32:02 2018 +0200 @@ -87,7 +87,7 @@ } - void OrthancPeerStoreJob::ReleaseResources() // For pausing jobs + void OrthancPeerStoreJob::ReleaseResources(JobReleaseReason reason) // For pausing jobs { client_.reset(NULL); } diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 OrthancServer/ServerJobs/OrthancPeerStoreJob.h --- a/OrthancServer/ServerJobs/OrthancPeerStoreJob.h Thu Sep 06 11:06:54 2018 +0200 +++ b/OrthancServer/ServerJobs/OrthancPeerStoreJob.h Thu Sep 06 12:32:02 2018 +0200 @@ -67,7 +67,7 @@ return peer_; } - virtual void ReleaseResources(); // For pausing jobs + virtual void ReleaseResources(JobReleaseReason reason); // For pausing jobs virtual void GetJobType(std::string& target) { diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 OrthancServer/ServerJobs/ResourceModificationJob.h --- a/OrthancServer/ServerJobs/ResourceModificationJob.h Thu Sep 06 11:06:54 2018 +0200 +++ b/OrthancServer/ServerJobs/ResourceModificationJob.h Thu Sep 06 12:32:02 2018 +0200 @@ -106,7 +106,7 @@ return origin_; } - virtual void ReleaseResources() + virtual void ReleaseResources(JobReleaseReason reason) { } diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 Plugins/Engine/PluginsJob.cpp --- a/Plugins/Engine/PluginsJob.cpp Thu Sep 06 11:06:54 2018 +0200 +++ b/Plugins/Engine/PluginsJob.cpp Thu Sep 06 12:32:02 2018 +0200 @@ -110,7 +110,22 @@ JobStepResult PluginsJob::ExecuteStep() { - + OrthancPluginJobStepStatus status = step_(job_); + + switch (status) + { + case OrthancPluginJobStepStatus_Success: + return JobStepResult::Success(); + + case OrthancPluginJobStepStatus_Failure: + return JobStepResult::Failure(ErrorCode_Plugin); + + case OrthancPluginJobStepStatus_Continue: + return JobStepResult::Continue(); + + default: + throw OrthancException(ErrorCode_ParameterOutOfRange); + } } void PluginsJob::SignalResubmit() @@ -118,9 +133,29 @@ reset_(job_); } - void PluginsJob::ReleaseResources() + void PluginsJob::ReleaseResources(JobReleaseReason reason) { - releaseResources_(job_); + switch (reason) + { + case JobReleaseReason_Success: + releaseResources_(job_, OrthancPluginJobReleaseReason_Success); + break; + + case JobReleaseReason_Failure: + releaseResources_(job_, OrthancPluginJobReleaseReason_Failure); + break; + + case JobReleaseReason_Canceled: + releaseResources_(job_, OrthancPluginJobReleaseReason_Canceled); + break; + + case JobReleaseReason_Paused: + releaseResources_(job_, OrthancPluginJobReleaseReason_Paused); + break; + + default: + throw OrthancException(ErrorCode_ParameterOutOfRange); + } } float PluginsJob::GetProgress() diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 Plugins/Engine/PluginsJob.h --- a/Plugins/Engine/PluginsJob.h Thu Sep 06 11:06:54 2018 +0200 +++ b/Plugins/Engine/PluginsJob.h Thu Sep 06 12:32:02 2018 +0200 @@ -67,7 +67,7 @@ virtual void SignalResubmit(); - virtual void ReleaseResources(); + virtual void ReleaseResources(JobReleaseReason reason); virtual float GetProgress(); diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 Plugins/Include/orthanc/OrthancCPlugin.h --- a/Plugins/Include/orthanc/OrthancCPlugin.h Thu Sep 06 11:06:54 2018 +0200 +++ b/Plugins/Include/orthanc/OrthancCPlugin.h Thu Sep 06 12:32:02 2018 +0200 @@ -846,13 +846,28 @@ **/ typedef enum { - OrthancPluginJobStepStatus_Success, /*!< The job has successfully executed all its steps */ - OrthancPluginJobStepStatus_Failure, /*!< The job has failed while executing this step */ - OrthancPluginJobStepStatus_Continue /*!< The job has still data to process after this step */ + OrthancPluginJobStepStatus_Success = 1, /*!< The job has successfully executed all its steps */ + OrthancPluginJobStepStatus_Failure = 2, /*!< The job has failed while executing this step */ + OrthancPluginJobStepStatus_Continue = 3 /*!< The job has still data to process after this step */ } OrthancPluginJobStepStatus; /** + * Explains why the job should release its resources. This is + * especially important to disambiguate between the "paused" + * condition and the "final" conditions (success, failure, or + * canceled). + **/ + typedef enum + { + OrthancPluginJobReleaseReason_Success = 1, /*!< The job has succeeded */ + OrthancPluginJobReleaseReason_Paused = 2, /*!< The job was paused, and will be resumed later */ + OrthancPluginJobReleaseReason_Failure = 3, /*!< The job has failed, and might be resubmitted later */ + OrthancPluginJobReleaseReason_Canceled = 4 /*!< The job was canceled, and might be resubmitted later */ + } OrthancPluginJobReleaseReason; + + + /** * @brief A memory buffer allocated by the core system of Orthanc. * * A memory buffer allocated by the core system of Orthanc. When the @@ -1260,7 +1275,8 @@ typedef void (*OrthancPluginJobFree) (void* job); typedef float (*OrthancPluginJobGetProgress) (void* job); typedef OrthancPluginJobStepStatus (*OrthancPluginJobStep) (void* job); - typedef OrthancPluginErrorCode (*OrthancPluginJobReleaseResources) (void* job); + typedef OrthancPluginErrorCode (*OrthancPluginJobReleaseResources) (void* job, + OrthancPluginJobReleaseReason reason); typedef OrthancPluginErrorCode (*OrthancPluginJobReset) (void* job); typedef OrthancPluginErrorCode (*OrthancPluginJobsUnserializer) (const char* jobType, const char* serialized); diff -r 1e8c4ecd02f4 -r 7cfc8d266f41 UnitTestsSources/MultiThreadingTests.cpp --- a/UnitTestsSources/MultiThreadingTests.cpp Thu Sep 06 11:06:54 2018 +0200 +++ b/UnitTestsSources/MultiThreadingTests.cpp Thu Sep 06 12:32:02 2018 +0200 @@ -116,7 +116,7 @@ } } - virtual void ReleaseResources() + virtual void ReleaseResources(JobReleaseReason reason) { } @@ -162,7 +162,7 @@ { } - virtual void ReleaseResources() + virtual void ReleaseResources(JobReleaseReason reason) { }