comparison Core/JobsEngine/JobsEngine.cpp @ 2570:2e879c796ec7 jobs

JobsRegistry::SubmitAndWait(), StoreScuJob
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 07 May 2018 21:42:04 +0200
parents 2af17cd5eb1f
children 3372c5255333
comparison
equal deleted inserted replaced
2569:2af17cd5eb1f 2570:2e879c796ec7
100 case JobStepCode_Failure: 100 case JobStepCode_Failure:
101 running.MarkFailure(); 101 running.MarkFailure();
102 return false; 102 return false;
103 103
104 case JobStepCode_Retry: 104 case JobStepCode_Retry:
105 running.GetJob().ReleaseResources();
105 running.MarkRetry(dynamic_cast<JobStepRetry&>(*result).GetTimeout()); 106 running.MarkRetry(dynamic_cast<JobStepRetry&>(*result).GetTimeout());
106 return false; 107 return false;
107 108
108 case JobStepCode_Continue: 109 case JobStepCode_Continue:
109 return true; 110 return true;
188 } 189 }
189 190
190 191
191 void JobsEngine::SetWorkersCount(size_t count) 192 void JobsEngine::SetWorkersCount(size_t count)
192 { 193 {
193 if (count == 0)
194 {
195 throw OrthancException(ErrorCode_ParameterOutOfRange);
196 }
197
198 boost::mutex::scoped_lock lock(stateMutex_); 194 boost::mutex::scoped_lock lock(stateMutex_);
199 195
200 if (state_ != State_Setup) 196 if (state_ != State_Setup)
201 { 197 {
202 // Can only be invoked before calling "Start()" 198 // Can only be invoked before calling "Start()"
216 throw OrthancException(ErrorCode_BadSequenceOfCalls); 212 throw OrthancException(ErrorCode_BadSequenceOfCalls);
217 } 213 }
218 214
219 retryHandler_ = boost::thread(RetryHandler, this); 215 retryHandler_ = boost::thread(RetryHandler, this);
220 216
217 if (workers_.size() == 0)
218 {
219 // Use all the available CPUs
220 size_t n = boost::thread::hardware_concurrency();
221
222 if (n == 0)
223 {
224 n = 1;
225 }
226
227 workers_.resize(n);
228 }
229
221 for (size_t i = 0; i < workers_.size(); i++) 230 for (size_t i = 0; i < workers_.size(); i++)
222 { 231 {
223 workers_[i] = boost::thread(Worker, this, i); 232 workers_[i] = boost::thread(Worker, this, i);
224 } 233 }
225 234
226 state_ = State_Running; 235 state_ = State_Running;
227 236
228 LOG(WARNING) << "The jobs engine has started"; 237 LOG(WARNING) << "The jobs engine has started with " << workers_.size() << " threads";
229 } 238 }
230 239
231 240
232 void JobsEngine::Stop() 241 void JobsEngine::Stop()
233 { 242 {