annotate OrthancServer/Sources/ServerJobs/ThreadedSetOfInstancesJob.cpp @ 5145:df040c83796c

correctly report ThreadedSetOfInstancesJob progress
author Alain Mazy <am@osimis.io>
date Fri, 27 Jan 2023 11:23:35 +0100
parents 15109c3f0f7d
children 4a0dfa23d28c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
1 /**
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
2 * Orthanc - A Lightweight, RESTful DICOM Store
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
5 * Copyright (C) 2017-2022 Osimis S.A., Belgium
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
6 * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
7 *
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
8 * This program is free software: you can redistribute it and/or
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public License
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
10 * as published by the Free Software Foundation, either version 3 of
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
11 * the License, or (at your option) any later version.
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
12 *
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful, but
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
16 * Lesser General Public License for more details.
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
17 *
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
19 * License along with this program. If not, see
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
20 * <http://www.gnu.org/licenses/>.
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
21 **/
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
22
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
23
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
24 #include "ThreadedSetOfInstancesJob.h"
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
25
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
26 #include "../../../OrthancFramework/Sources/Logging.h"
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
27 #include "../../../OrthancFramework/Sources/OrthancException.h"
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
28 #include "../../../OrthancFramework/Sources/SerializationToolbox.h"
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
29 #include "../ServerContext.h"
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
30
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
31 #include <boost/lexical_cast.hpp>
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
32 #include <cassert>
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
33
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
34 namespace Orthanc
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
35 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
36 static const char* EXIT_WORKER_MESSAGE = "exit";
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
37
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
38 ThreadedSetOfInstancesJob::ThreadedSetOfInstancesJob(ServerContext& context,
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
39 bool hasPostProcessing,
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
40 bool keepSource,
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
41 size_t workersCount) :
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
42 hasPostProcessing_(hasPostProcessing),
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
43 started_(false),
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
44 stopRequested_(false),
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
45 permissive_(false),
5145
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
46 currentStep_(ThreadedJobStep_NotStarted),
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
47 workersCount_(workersCount),
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
48 context_(context),
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
49 keepSource_(keepSource),
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
50 errorCode_(ErrorCode_Success)
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
51 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
52 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
53
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
54
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
55 ThreadedSetOfInstancesJob::~ThreadedSetOfInstancesJob()
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
56 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
57 // no need to lock mutex here since we access variables used only by the "master" thread
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
58
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
59 StopWorkers();
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
60 WaitWorkersComplete();
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
61 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
62
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
63
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
64 void ThreadedSetOfInstancesJob::InitWorkers(size_t workersCount)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
65 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
66 // no need to lock mutex here since we access variables used only by the "master" thread
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
67
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
68 for (size_t i = 0; i < workersCount; i++)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
69 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
70 instancesWorkers_.push_back(boost::shared_ptr<boost::thread>(new boost::thread(InstanceWorkerThread, this)));
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
71 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
72 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
73
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
74
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
75 void ThreadedSetOfInstancesJob::WaitWorkersComplete()
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
76 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
77 // no need to lock mutex here since we access variables used only by the "master" thread
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
78
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
79 // send a dummy "exit" message to all workers such that they stop waiting for messages on the queue
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
80 for (size_t i = 0; i < instancesWorkers_.size(); i++)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
81 {
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
82 instancesToProcessQueue_.Enqueue(new SingleValueObject<std::string>(EXIT_WORKER_MESSAGE));
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
83 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
84
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
85 for (size_t i = 0; i < instancesWorkers_.size(); i++)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
86 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
87 if (instancesWorkers_[i]->joinable())
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
88 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
89 instancesWorkers_[i]->join();
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
90 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
91 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
92
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
93 instancesWorkers_.clear();
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
94 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
95
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
96
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
97 void ThreadedSetOfInstancesJob::StopWorkers()
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
98 {
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
99 boost::recursive_mutex::scoped_lock lock(mutex_);
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
100
5145
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
101 instancesToProcessQueue_.Clear();
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
102 stopRequested_ = true;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
103 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
104
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
105
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
106 void ThreadedSetOfInstancesJob::Stop(JobStopReason reason)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
107 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
108 // no need to lock mutex here since we access variables used or set only by the "master" thread
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
109
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
110 if (reason == JobStopReason_Canceled ||
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
111 reason == JobStopReason_Failure ||
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
112 reason == JobStopReason_Retry)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
113 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
114 // deallocate resources
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
115 StopWorkers();
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
116 WaitWorkersComplete();
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
117 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
118 else if (reason == JobStopReason_Paused)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
119 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
120 // keep resources allocated.
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
121 // note that, right now, since all instances are queued from the start, this kind of jobs is not paused while in ProcessingInstances state
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
122 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
123 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
124
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
125
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
126 JobStepResult ThreadedSetOfInstancesJob::Step(const std::string& jobId)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
127 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
128 // no need to lock mutex here since we access variables used or set only by the "master" thread
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
129
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
130 if (!started_)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
131 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
132 throw OrthancException(ErrorCode_InternalError);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
133 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
134
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
135 if (GetInstancesCount() == 0)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
136 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
137 // No instances to handle: We're done
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
138 return JobStepResult::Success();
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
139 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
140
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
141 try
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
142 {
5145
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
143 if (currentStep_ == ThreadedJobStep_NotStarted)
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
144 {
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
145 // create the workers and enqueue all instances
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
146 for (std::set<std::string>::const_iterator it = instancesToProcess_.begin(); it != instancesToProcess_.end(); ++it)
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
147 {
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
148 instancesToProcessQueue_.Enqueue(new SingleValueObject<std::string>(*it));
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
149 }
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
150
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
151 InitWorkers(workersCount_);
5145
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
152 currentStep_ = ThreadedJobStep_ProcessingInstances;
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
153 }
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
154 else if (currentStep_ == ThreadedJobStep_ProcessingInstances)
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
155 {
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
156 // wait until all instances are processed by the workers
5145
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
157 if (instancesToProcessQueue_.GetSize() != 0)
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
158 {
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
159 return JobStepResult::Continue();
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
160 }
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
161 else
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
162 {
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
163 WaitWorkersComplete();
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
164
5145
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
165 // check job has really completed !!! it might have been interrupted because of an error
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
166 if ((processedInstances_.size() != instancesToProcess_.size())
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
167 || (!IsPermissive() && failedInstances_.size() > 0))
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
168 {
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
169 return JobStepResult::Failure(GetErrorCode(), NULL);
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
170 }
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
171
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
172 currentStep_ = ThreadedJobStep_PostProcessingInstances;
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
173 return JobStepResult::Continue();
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
174 }
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
175 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
176 else if (currentStep_ == ThreadedJobStep_PostProcessingInstances)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
177 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
178 if (HasPostProcessingStep())
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
179 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
180 PostProcessInstances();
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
181 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
182
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
183 currentStep_ = ThreadedJobStep_Cleanup;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
184 return JobStepResult::Continue();
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
185 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
186 else if (currentStep_ == ThreadedJobStep_Cleanup)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
187 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
188 // clean after the post processing step
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
189 if (HasCleanupStep())
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
190 {
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
191 for (std::set<std::string>::const_iterator it = instancesToProcess_.begin(); it != instancesToProcess_.end(); ++it)
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
192 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
193 Json::Value tmp;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
194 context_.DeleteResource(tmp, *it, ResourceType_Instance);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
195 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
196 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
197
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
198 currentStep_ = ThreadedJobStep_Done;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
199 return JobStepResult::Success();
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
200 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
201 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
202 catch (OrthancException& e)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
203 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
204 if (permissive_)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
205 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
206 LOG(WARNING) << "Ignoring an error in a permissive job: " << e.What();
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
207 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
208 else
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
209 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
210 return JobStepResult::Failure(e);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
211 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
212 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
213
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
214 return JobStepResult::Continue();
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
215 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
216
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
217
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
218 bool ThreadedSetOfInstancesJob::HasPostProcessingStep() const
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
219 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
220 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
221
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
222 return hasPostProcessing_;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
223 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
224
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
225 void ThreadedSetOfInstancesJob::PostProcessInstances()
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
226 {
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
227 if (HasPostProcessingStep())
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
228 {
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
229 throw OrthancException(ErrorCode_InternalError, "Job with post-processing should override PostProcessInstances");
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
230 }
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
231 }
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
232
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
233
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
234 bool ThreadedSetOfInstancesJob::HasCleanupStep() const
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
235 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
236 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
237
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
238 return !keepSource_;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
239 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
240
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
241
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
242 void ThreadedSetOfInstancesJob::InstanceWorkerThread(ThreadedSetOfInstancesJob* that)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
243 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
244 while (true)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
245 {
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
246 std::unique_ptr<SingleValueObject<std::string> > instanceId(dynamic_cast<SingleValueObject<std::string>*>(that->instancesToProcessQueue_.Dequeue(0)));
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
247 if (that->stopRequested_ // no lock(mutex) to access this variable, this is safe since it's just reading a boolean
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
248 || instanceId->GetValue() == EXIT_WORKER_MESSAGE)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
249 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
250 return;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
251 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
252
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
253 bool processed = false;
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
254
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
255 try
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
256 {
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
257 processed = that->HandleInstance(instanceId->GetValue());
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
258 }
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
259 catch (const Orthanc::OrthancException& e)
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
260 {
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
261 if (that->IsPermissive())
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
262 {
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
263 LOG(WARNING) << "Ignoring an error in a permissive job: " << e.What();
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
264 }
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
265 else
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
266 {
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
267 LOG(ERROR) << "Error in a non-permissive job: " << e.What();
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
268 that->SetErrorCode(e.GetErrorCode());
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
269 that->StopWorkers();
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
270 return;
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
271 }
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
272 }
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
273 catch (...)
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
274 {
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
275 LOG(ERROR) << "Native exception while executing a job";
5135
Alain Mazy <am@osimis.io>
parents: 5134
diff changeset
276 that->SetErrorCode(ErrorCode_InternalError);
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
277 that->StopWorkers();
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
278 return;
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
279 }
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
280
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
281 {
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
282 boost::recursive_mutex::scoped_lock lock(that->mutex_);
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
283
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
284 that->processedInstances_.insert(instanceId->GetValue());
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
285
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
286 if (!processed)
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
287 {
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
288 that->failedInstances_.insert(instanceId->GetValue());
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
289 }
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
290 }
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
291
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
292 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
293 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
294
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
295
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
296 bool ThreadedSetOfInstancesJob::GetOutput(std::string &output,
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
297 MimeType &mime,
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
298 std::string& filename,
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
299 const std::string &key)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
300 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
301 return false;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
302 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
303
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
304
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
305 size_t ThreadedSetOfInstancesJob::GetInstancesCount() const
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
306 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
307 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
308
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
309 return instancesToProcess_.size();
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
310 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
311
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
312
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
313 void ThreadedSetOfInstancesJob::GetFailedInstances(std::set<std::string>& target) const
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
314 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
315 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
316
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
317 target = failedInstances_;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
318 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
319
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
320
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
321 void ThreadedSetOfInstancesJob::GetInstances(std::set<std::string>& target) const
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
322 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
323 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
324
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
325 target = instancesToProcess_;
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
326 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
327
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
328
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
329 bool ThreadedSetOfInstancesJob::IsFailedInstance(const std::string &instance) const
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
330 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
331 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
332
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
333 return failedInstances_.find(instance) != failedInstances_.end();
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
334 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
335
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
336
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
337 void ThreadedSetOfInstancesJob::Start()
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
338 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
339 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
340
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
341 started_ = true;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
342 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
343
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
344
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
345 // Reset is called when resubmitting a failed job
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
346 void ThreadedSetOfInstancesJob::Reset()
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
347 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
348 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
349
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
350 if (started_)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
351 {
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
352 // TODO: cleanup the instances that have been generated during the previous run
5145
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
353 currentStep_ = ThreadedJobStep_NotStarted;
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
354 stopRequested_ = false;
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
355 processedInstances_.clear();
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
356 failedInstances_.clear();
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
357 instancesToProcessQueue_.Clear();
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
358 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
359 else
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
360 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
361 throw OrthancException(ErrorCode_BadSequenceOfCalls);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
362 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
363 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
364
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
365
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
366 static const char* KEY_FAILED_INSTANCES = "FailedInstances";
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
367 static const char* KEY_PARENT_RESOURCES = "ParentResources";
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
368 static const char* KEY_DESCRIPTION = "Description";
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
369 static const char* KEY_PERMISSIVE = "Permissive";
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
370 static const char* KEY_CURRENT_STEP = "CurrentStep";
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
371 static const char* KEY_TYPE = "Type";
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
372 static const char* KEY_INSTANCES = "Instances";
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
373 static const char* KEY_INSTANCES_COUNT = "InstancesCount";
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
374 static const char* KEY_FAILED_INSTANCES_COUNT = "FailedInstancesCount";
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
375 static const char* KEY_KEEP_SOURCE = "KeepSource";
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
376 static const char* KEY_WORKERS_COUNT = "WorkersCount";
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
377
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
378
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
379 void ThreadedSetOfInstancesJob::GetPublicContent(Json::Value& target)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
380 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
381 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
382
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
383 target[KEY_DESCRIPTION] = GetDescription();
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
384 target[KEY_INSTANCES_COUNT] = static_cast<uint32_t>(GetInstancesCount());
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
385 target[KEY_FAILED_INSTANCES_COUNT] = static_cast<uint32_t>(failedInstances_.size());
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
386
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
387 if (!parentResources_.empty())
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
388 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
389 SerializationToolbox::WriteSetOfStrings(target, parentResources_, KEY_PARENT_RESOURCES);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
390 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
391 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
392
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
393
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
394 bool ThreadedSetOfInstancesJob::Serialize(Json::Value& target)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
395 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
396 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
397
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
398 target = Json::objectValue;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
399
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
400 std::string type;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
401 GetJobType(type);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
402 target[KEY_TYPE] = type;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
403
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
404 target[KEY_PERMISSIVE] = permissive_;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
405 target[KEY_CURRENT_STEP] = static_cast<unsigned int>(currentStep_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
406 target[KEY_DESCRIPTION] = description_;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
407 target[KEY_KEEP_SOURCE] = keepSource_;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
408 target[KEY_WORKERS_COUNT] = static_cast<unsigned int>(workersCount_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
409
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
410 SerializationToolbox::WriteSetOfStrings(target, instancesToProcess_, KEY_INSTANCES);
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
411 SerializationToolbox::WriteSetOfStrings(target, failedInstances_, KEY_FAILED_INSTANCES);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
412 SerializationToolbox::WriteSetOfStrings(target, parentResources_, KEY_PARENT_RESOURCES);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
413
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
414 return true;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
415 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
416
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
417
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
418 ThreadedSetOfInstancesJob::ThreadedSetOfInstancesJob(ServerContext& context,
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
419 const Json::Value& source,
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
420 bool hasPostProcessing,
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
421 bool defaultKeepSource) :
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
422 hasPostProcessing_(hasPostProcessing),
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
423 started_(false),
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
424 stopRequested_(false),
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
425 permissive_(false),
5145
df040c83796c correctly report ThreadedSetOfInstancesJob progress
Alain Mazy <am@osimis.io>
parents: 5137
diff changeset
426 currentStep_(ThreadedJobStep_NotStarted),
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
427 workersCount_(1),
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
428 context_(context),
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
429 keepSource_(defaultKeepSource),
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
430 errorCode_(ErrorCode_Success)
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
431 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
432 SerializationToolbox::ReadSetOfStrings(failedInstances_, source, KEY_FAILED_INSTANCES);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
433
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
434 if (source.isMember(KEY_PARENT_RESOURCES))
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
435 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
436 // Backward compatibility with Orthanc <= 1.5.6
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
437 SerializationToolbox::ReadSetOfStrings(parentResources_, source, KEY_PARENT_RESOURCES);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
438 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
439
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
440 if (source.isMember(KEY_KEEP_SOURCE))
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
441 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
442 keepSource_ = SerializationToolbox::ReadBoolean(source, KEY_KEEP_SOURCE);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
443 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
444
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
445 if (source.isMember(KEY_WORKERS_COUNT))
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
446 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
447 workersCount_ = SerializationToolbox::ReadUnsignedInteger(source, KEY_WORKERS_COUNT);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
448 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
449
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
450 if (source.isMember(KEY_INSTANCES))
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
451 {
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
452 SerializationToolbox::ReadSetOfStrings(instancesToProcess_, source, KEY_INSTANCES);
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
453 }
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
454
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
455 if (source.isMember(KEY_CURRENT_STEP))
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
456 {
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
457 currentStep_ = static_cast<ThreadedJobStep>(SerializationToolbox::ReadUnsignedInteger(source, KEY_CURRENT_STEP));
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
458 }
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
459 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
460
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
461
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
462 void ThreadedSetOfInstancesJob::SetKeepSource(bool keep)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
463 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
464 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
465
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
466 if (IsStarted())
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
467 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
468 throw OrthancException(ErrorCode_BadSequenceOfCalls);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
469 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
470
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
471 keepSource_ = keep;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
472 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
473
5137
15109c3f0f7d added sanity checks in DicomModificationJob + automatically reconstruct resources at the end of a DicomModificationJob
Alain Mazy <am@osimis.io>
parents: 5136
diff changeset
474 bool ThreadedSetOfInstancesJob::IsKeepSource() const
15109c3f0f7d added sanity checks in DicomModificationJob + automatically reconstruct resources at the end of a DicomModificationJob
Alain Mazy <am@osimis.io>
parents: 5136
diff changeset
475 {
15109c3f0f7d added sanity checks in DicomModificationJob + automatically reconstruct resources at the end of a DicomModificationJob
Alain Mazy <am@osimis.io>
parents: 5136
diff changeset
476 boost::recursive_mutex::scoped_lock lock(mutex_);
15109c3f0f7d added sanity checks in DicomModificationJob + automatically reconstruct resources at the end of a DicomModificationJob
Alain Mazy <am@osimis.io>
parents: 5136
diff changeset
477
15109c3f0f7d added sanity checks in DicomModificationJob + automatically reconstruct resources at the end of a DicomModificationJob
Alain Mazy <am@osimis.io>
parents: 5136
diff changeset
478 return keepSource_;
15109c3f0f7d added sanity checks in DicomModificationJob + automatically reconstruct resources at the end of a DicomModificationJob
Alain Mazy <am@osimis.io>
parents: 5136
diff changeset
479 }
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
480
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
481 float ThreadedSetOfInstancesJob::GetProgress()
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
482 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
483 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
484
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
485 if (GetInstancesCount() == 0)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
486 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
487 return 1;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
488 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
489 else
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
490 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
491 size_t totalProgress = GetInstancesCount();
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
492 size_t currentProgress = processedInstances_.size();
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
493
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
494 if (HasPostProcessingStep())
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
495 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
496 ++totalProgress;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
497 if (currentStep_ > ThreadedJobStep_PostProcessingInstances)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
498 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
499 ++currentProgress;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
500 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
501 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
502
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
503 if (HasCleanupStep())
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
504 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
505 ++totalProgress;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
506 if (currentStep_ > ThreadedJobStep_Cleanup)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
507 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
508 ++currentProgress;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
509 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
510 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
511
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
512 return (static_cast<float>(currentProgress) /
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
513 static_cast<float>(totalProgress));
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
514 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
515 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
516
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
517
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
518 ThreadedSetOfInstancesJob::ThreadedJobStep ThreadedSetOfInstancesJob::GetCurrentStep() const
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
519 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
520 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
521
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
522 return currentStep_;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
523 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
524
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
525
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
526 void ThreadedSetOfInstancesJob::SetDescription(const std::string &description)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
527 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
528 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
529
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
530 description_ = description;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
531 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
532
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
533
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
534 const std::string& ThreadedSetOfInstancesJob::GetDescription() const
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
535 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
536 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
537
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
538 return description_;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
539 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
540
5134
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
541 void ThreadedSetOfInstancesJob::SetErrorCode(ErrorCode errorCode)
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
542 {
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
543 boost::recursive_mutex::scoped_lock lock(mutex_);
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
544
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
545 errorCode_ = errorCode;
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
546 }
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
547
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
548 ErrorCode ThreadedSetOfInstancesJob::GetErrorCode() const
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
549 {
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
550 boost::recursive_mutex::scoped_lock lock(mutex_);
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
551
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
552 return errorCode_;
6aa41d86b948 fix ModificationJob state machine
Alain Mazy <am@osimis.io>
parents: 5130
diff changeset
553 }
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
554
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
555 bool ThreadedSetOfInstancesJob::IsPermissive() const
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
556 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
557 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
558
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
559 return permissive_;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
560 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
561
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
562
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
563 void ThreadedSetOfInstancesJob::SetPermissive(bool permissive)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
564 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
565 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
566
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
567 if (started_)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
568 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
569 throw OrthancException(ErrorCode_BadSequenceOfCalls);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
570 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
571 else
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
572 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
573 permissive_ = permissive;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
574 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
575 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
576
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
577
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
578 bool ThreadedSetOfInstancesJob::IsStarted() const
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
579 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
580 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
581
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
582 return started_;
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
583 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
584
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
585
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
586 void ThreadedSetOfInstancesJob::AddInstances(const std::list<std::string>& instances)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
587 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
588 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
589
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
590 for (std::list<std::string>::const_iterator
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
591 it = instances.begin(); it != instances.end(); ++it)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
592 {
5136
e71b22a43c0b Threaded modifications continued: call ReconstructInstance at the end of the modification to update the DB model
Alain Mazy <am@osimis.io>
parents: 5135
diff changeset
593 instancesToProcess_.insert(*it);
5130
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
594 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
595 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
596
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
597
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
598 void ThreadedSetOfInstancesJob::AddParentResource(const std::string &resource)
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
599 {
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
600 boost::recursive_mutex::scoped_lock lock(mutex_);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
601
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
602 parentResources_.insert(resource);
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
603 }
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
604
f2dcdbe05884 ResourceModification jobs can now use multiple threads
Alain Mazy <am@osimis.io>
parents:
diff changeset
605 }