Mercurial > hg > orthanc
changeset 4022:a2e4edc7b9aa more-changes
wip: adding job changes
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Tue, 09 Jun 2020 08:46:52 +0200 |
parents | 1e9f6d706237 |
children | cbdf62468d77 |
files | Core/JobsEngine/JobsRegistry.cpp Core/JobsEngine/JobsRegistry.h OrthancServer/ServerContext.cpp Plugins/Engine/PluginsEnumerations.cpp Plugins/Engine/PluginsEnumerations.h |
diffstat | 5 files changed, 39 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/Core/JobsEngine/JobsRegistry.cpp Mon Jun 08 16:10:09 2020 +0200 +++ b/Core/JobsEngine/JobsRegistry.cpp Tue Jun 09 08:46:52 2020 +0200 @@ -495,15 +495,20 @@ job.SetLastErrorCode(ErrorCode_CanceledJob); } - if (observer_ != NULL) { - if (reason == CompletedReason_Success) + boost::shared_lock<boost::shared_mutex> lock(observersMutex_); + + for (Observers::iterator it = observers_.begin(); it != observers_.end(); ++it) { - observer_->SignalJobSuccess(job.GetId()); - } - else - { - observer_->SignalJobFailure(job.GetId()); + if (reason == CompletedReason_Success) + { + (*it)->SignalJobSuccess(job.GetId()); + } + else + { + (*it)->SignalJobFailure(job.GetId()); + } + } } @@ -711,9 +716,13 @@ LOG(INFO) << "New job submitted with priority " << priority << ": " << id; - if (observer_ != NULL) { - observer_->SignalJobSubmitted(id); + boost::shared_lock<boost::shared_mutex> lock(observersMutex_); + + for (Observers::iterator it = observers_.begin(); it != observers_.end(); ++it) + { + (*it)->SignalJobSubmitted(id); + } } // WARNING: The following call might make "handler" invalid if @@ -1100,17 +1109,21 @@ } - void JobsRegistry::SetObserver(JobsRegistry::IObserver& observer) + void JobsRegistry::AddObserver(JobsRegistry::IObserver& observer) { - boost::mutex::scoped_lock lock(mutex_); - observer_ = &observer; + boost::unique_lock<boost::shared_mutex> lock(observersMutex_); + observers_.insert(&observer); } - void JobsRegistry::ResetObserver() + void JobsRegistry::ResetObserver(JobsRegistry::IObserver& observer) { - boost::mutex::scoped_lock lock(mutex_); - observer_ = NULL; + boost::unique_lock<boost::shared_mutex> lock(observersMutex_); + Observers::iterator it = observers_.find(&observer); + if (it != observers_.end()) + { + observers_.erase(it); + } } @@ -1381,8 +1394,7 @@ JobsRegistry::JobsRegistry(IJobUnserializer& unserializer, const Json::Value& s, size_t maxCompletedJobs) : - maxCompletedJobs_(maxCompletedJobs), - observer_(NULL) + maxCompletedJobs_(maxCompletedJobs) { if (SerializationToolbox::ReadString(s, TYPE) != JOBS_REGISTRY || !s.isMember(JOBS) ||
--- a/Core/JobsEngine/JobsRegistry.h Mon Jun 08 16:10:09 2020 +0200 +++ b/Core/JobsEngine/JobsRegistry.h Tue Jun 09 08:46:52 2020 +0200 @@ -86,6 +86,7 @@ JobHandler*& b) const; }; + typedef std::set<IObserver*> Observers; typedef std::map<std::string, JobHandler*> JobsIndex; typedef std::list<JobHandler*> CompletedJobs; typedef std::set<JobHandler*> RetryJobs; @@ -103,7 +104,8 @@ boost::condition_variable someJobComplete_; size_t maxCompletedJobs_; - IObserver* observer_; + boost::shared_mutex observersMutex_; + Observers observers_; #ifndef NDEBUG @@ -141,8 +143,7 @@ public: JobsRegistry(size_t maxCompletedJobs) : - maxCompletedJobs_(maxCompletedJobs), - observer_(NULL) + maxCompletedJobs_(maxCompletedJobs) { } @@ -195,9 +196,9 @@ bool GetState(JobState& state, const std::string& id); - void SetObserver(IObserver& observer); + void AddObserver(IObserver& observer); - void ResetObserver(); + void ResetObserver(IObserver& observer); void GetStatistics(unsigned int& pending, unsigned int& running,
--- a/OrthancServer/ServerContext.cpp Mon Jun 08 16:10:09 2020 +0200 +++ b/OrthancServer/ServerContext.cpp Tue Jun 09 08:46:52 2020 +0200 @@ -190,7 +190,7 @@ LOG(INFO) << "Not reloading the jobs from the last execution of Orthanc"; } - jobsEngine_.GetRegistry().SetObserver(*this); + jobsEngine_.GetRegistry().AddObserver(*this); jobsEngine_.Start(); isJobsEngineUnserialized_ = true; @@ -347,7 +347,7 @@ saveJobsThread_.join(); } - jobsEngine_.GetRegistry().ResetObserver(); + jobsEngine_.GetRegistry().ResetObserver(*this); if (isJobsEngineUnserialized_) {
--- a/Plugins/Engine/PluginsEnumerations.cpp Mon Jun 08 16:10:09 2020 +0200 +++ b/Plugins/Engine/PluginsEnumerations.cpp Tue Jun 09 08:46:52 2020 +0200 @@ -92,7 +92,7 @@ namespace Plugins { - OrthancPluginChangeType Convert(ChangeType type) + OrthancPluginChangeType Convert55(ChangeType type) { switch (type) {
--- a/Plugins/Engine/PluginsEnumerations.h Mon Jun 08 16:10:09 2020 +0200 +++ b/Plugins/Engine/PluginsEnumerations.h Tue Jun 09 08:46:52 2020 +0200 @@ -56,7 +56,7 @@ namespace Plugins { - OrthancPluginChangeType Convert(ChangeType type); + OrthancPluginChangeType Convert55(ChangeType type); OrthancPluginPixelFormat Convert(PixelFormat format);