Mercurial > hg > orthanc
annotate OrthancServer/Sources/ServerIndex.cpp @ 4590:4a0bf1019335 db-changes
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 12 Mar 2021 16:04:09 +0100 |
parents | bec74e29f86b |
children | ff8170d17d90 |
rev | line source |
---|---|
0 | 1 /** |
62 | 2 * Orthanc - A Lightweight, RESTful DICOM Store |
1900 | 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
1288
6e7e5ed91c2d
upgrade to year 2015
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1286
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
4437
d9473bd5ed43
upgrade to year 2021
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4371
diff
changeset
|
5 * Copyright (C) 2017-2021 Osimis S.A., Belgium |
0 | 6 * |
7 * This program is free software: you can redistribute it and/or | |
8 * modify it under the terms of the GNU General Public License as | |
9 * published by the Free Software Foundation, either version 3 of the | |
10 * License, or (at your option) any later version. | |
136 | 11 * |
12 * In addition, as a special exception, the copyright holders of this | |
13 * program give permission to link the code of its release with the | |
14 * OpenSSL project's "OpenSSL" library (or with modified versions of it | |
15 * that use the same license as the "OpenSSL" library), and distribute | |
16 * the linked executables. You must obey the GNU General Public License | |
17 * in all respects for all of the code used other than "OpenSSL". If you | |
18 * modify file(s) with this exception, you may extend this exception to | |
19 * your version of the file(s), but you are not obligated to do so. If | |
20 * you do not wish to do so, delete this exception statement from your | |
21 * version. If you delete this exception statement from all source files | |
22 * in the program, then also delete it here. | |
0 | 23 * |
24 * This program is distributed in the hope that it will be useful, but | |
25 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
27 * General Public License for more details. | |
28 * | |
29 * You should have received a copy of the GNU General Public License | |
30 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
31 **/ | |
32 | |
33 | |
831
84513f2ee1f3
pch for unit tests and server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
824
diff
changeset
|
34 #include "PrecompiledHeadersServer.h" |
0 | 35 #include "ServerIndex.h" |
36 | |
6 | 37 #ifndef NOMINMAX |
2 | 38 #define NOMINMAX |
6 | 39 #endif |
40 | |
4045 | 41 #include "../../OrthancFramework/Sources/Logging.h" |
42 #include "../../OrthancFramework/Sources/Toolbox.h" | |
3094
61da3c9b4121
cont reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3093
diff
changeset
|
43 |
2940
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2898
diff
changeset
|
44 #include "OrthancConfiguration.h" |
3094
61da3c9b4121
cont reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3093
diff
changeset
|
45 #include "ServerContext.h" |
61da3c9b4121
cont reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3093
diff
changeset
|
46 #include "ServerIndexChange.h" |
1668
de1413733c97
reconstructing main dicom tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1555
diff
changeset
|
47 #include "ServerToolbox.h" |
0 | 48 |
49 | |
440
23e5b35e3c5c
statistics for patient/studies/series/instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
438
diff
changeset
|
50 static const uint64_t MEGA_BYTES = 1024 * 1024; |
23e5b35e3c5c
statistics for patient/studies/series/instances
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
438
diff
changeset
|
51 |
62 | 52 namespace Orthanc |
0 | 53 { |
4590
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
54 class ServerIndex::TransactionContext : public StatelessDatabaseOperations::ITransactionContext |
0 | 55 { |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
56 private: |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
57 struct FileToRemove |
201
bee20e978835
refactoring of delete
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
58 { |
bee20e978835
refactoring of delete
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
59 private: |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
60 std::string uuid_; |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
61 FileContentType type_; |
1177
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
62 |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
63 public: |
4205 | 64 explicit FileToRemove(const FileInfo& info) : |
65 uuid_(info.GetUuid()), | |
66 type_(info.GetContentType()) | |
1191
d49505e377e3
demo of OnChangeCallback in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1189
diff
changeset
|
67 { |
d49505e377e3
demo of OnChangeCallback in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1189
diff
changeset
|
68 } |
201
bee20e978835
refactoring of delete
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
69 |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
70 const std::string& GetUuid() const |
201
bee20e978835
refactoring of delete
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
71 { |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
72 return uuid_; |
278
771f12042be9
more efficient determination of storage size for recycling
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
273
diff
changeset
|
73 } |
771f12042be9
more efficient determination of storage size for recycling
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
273
diff
changeset
|
74 |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
75 FileContentType GetContentType() const |
264
5b8e8b74bc8b
remove files only after the sqlite transaction has succeeded
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
240
diff
changeset
|
76 { |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
77 return type_; |
201
bee20e978835
refactoring of delete
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
78 } |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
79 }; |
201
bee20e978835
refactoring of delete
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
80 |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
81 ServerContext& context_; |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
82 bool hasRemainingLevel_; |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
83 ResourceType remainingType_; |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
84 std::string remainingPublicId_; |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
85 std::list<FileToRemove> pendingFilesToRemove_; |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
86 std::list<ServerIndexChange> pendingChanges_; |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
87 uint64_t sizeOfFilesToRemove_; |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
88 uint64_t sizeOfAddedAttachments_; |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
89 |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
90 void Reset() |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
91 { |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
92 sizeOfFilesToRemove_ = 0; |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
93 hasRemainingLevel_ = false; |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
94 pendingFilesToRemove_.clear(); |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
95 pendingChanges_.clear(); |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
96 sizeOfAddedAttachments_ = 0; |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
97 } |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
98 |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
99 void CommitFilesToRemove() |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
100 { |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
101 for (std::list<FileToRemove>::const_iterator |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
102 it = pendingFilesToRemove_.begin(); |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
103 it != pendingFilesToRemove_.end(); ++it) |
1189
6b9b02a16e99
NewChildInstance change type
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1177
diff
changeset
|
104 { |
3702
643b5ee86f92
fix handling of errors of OrthancPluginStorageRemove()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3699
diff
changeset
|
105 try |
643b5ee86f92
fix handling of errors of OrthancPluginStorageRemove()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3699
diff
changeset
|
106 { |
643b5ee86f92
fix handling of errors of OrthancPluginStorageRemove()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3699
diff
changeset
|
107 context_.RemoveFile(it->GetUuid(), it->GetContentType()); |
643b5ee86f92
fix handling of errors of OrthancPluginStorageRemove()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3699
diff
changeset
|
108 } |
643b5ee86f92
fix handling of errors of OrthancPluginStorageRemove()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3699
diff
changeset
|
109 catch (OrthancException& e) |
643b5ee86f92
fix handling of errors of OrthancPluginStorageRemove()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3699
diff
changeset
|
110 { |
643b5ee86f92
fix handling of errors of OrthancPluginStorageRemove()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3699
diff
changeset
|
111 LOG(ERROR) << "Unable to remove an attachment from the storage area: " |
643b5ee86f92
fix handling of errors of OrthancPluginStorageRemove()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3699
diff
changeset
|
112 << it->GetUuid() << " (type: " << EnumerationToString(it->GetContentType()) << ")"; |
643b5ee86f92
fix handling of errors of OrthancPluginStorageRemove()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3699
diff
changeset
|
113 } |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
114 } |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
115 } |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
116 |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
117 void CommitChanges() |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
118 { |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
119 for (std::list<ServerIndexChange>::const_iterator |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
120 it = pendingChanges_.begin(); |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
121 it != pendingChanges_.end(); ++it) |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
122 { |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
123 context_.SignalChange(*it); |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
124 } |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
125 } |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
126 |
4590
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
127 public: |
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
128 explicit TransactionContext(ServerContext& context) : |
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
129 context_(context) |
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
130 { |
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
131 Reset(); |
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
132 assert(ResourceType_Patient < ResourceType_Study && |
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
133 ResourceType_Study < ResourceType_Series && |
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
134 ResourceType_Series < ResourceType_Instance); |
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
135 } |
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
136 |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
137 virtual void SignalRemainingAncestor(ResourceType parentType, |
4571
9224e107d613
simplifying IDatabaseListener::SignalChange() as IDatabaseListener::SignalResourceDeleted()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4570
diff
changeset
|
138 const std::string& publicId) ORTHANC_OVERRIDE |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
139 { |
4268
0ae2ca210077
new macro TLOG() to replace VLOG() for trace logs with a category
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4263
diff
changeset
|
140 LOG(TRACE) << "Remaining ancestor \"" << publicId << "\" (" << parentType << ")"; |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
141 |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
142 if (hasRemainingLevel_) |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
143 { |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
144 if (parentType < remainingType_) |
1189
6b9b02a16e99
NewChildInstance change type
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1177
diff
changeset
|
145 { |
201
bee20e978835
refactoring of delete
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
146 remainingType_ = parentType; |
bee20e978835
refactoring of delete
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
147 remainingPublicId_ = publicId; |
1191
d49505e377e3
demo of OnChangeCallback in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1189
diff
changeset
|
148 } |
1158 | 149 } |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
150 else |
201
bee20e978835
refactoring of delete
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
151 { |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
152 hasRemainingLevel_ = true; |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
153 remainingType_ = parentType; |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
154 remainingPublicId_ = publicId; |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
155 } |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
156 } |
201
bee20e978835
refactoring of delete
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
200
diff
changeset
|
157 |
4571
9224e107d613
simplifying IDatabaseListener::SignalChange() as IDatabaseListener::SignalResourceDeleted()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4570
diff
changeset
|
158 virtual void SignalAttachmentDeleted(const FileInfo& info) ORTHANC_OVERRIDE |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
159 { |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
160 assert(Toolbox::IsUuid(info.GetUuid())); |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
161 pendingFilesToRemove_.push_back(FileToRemove(info)); |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
162 sizeOfFilesToRemove_ += info.GetCompressedSize(); |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
163 } |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
164 |
4571
9224e107d613
simplifying IDatabaseListener::SignalChange() as IDatabaseListener::SignalResourceDeleted()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4570
diff
changeset
|
165 virtual void SignalResourceDeleted(ResourceType type, |
9224e107d613
simplifying IDatabaseListener::SignalChange() as IDatabaseListener::SignalResourceDeleted()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4570
diff
changeset
|
166 const std::string& publicId) ORTHANC_OVERRIDE |
9224e107d613
simplifying IDatabaseListener::SignalChange() as IDatabaseListener::SignalResourceDeleted()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4570
diff
changeset
|
167 { |
9224e107d613
simplifying IDatabaseListener::SignalChange() as IDatabaseListener::SignalResourceDeleted()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4570
diff
changeset
|
168 SignalChange(ServerIndexChange(ChangeType_Deleted, type, publicId)); |
9224e107d613
simplifying IDatabaseListener::SignalChange() as IDatabaseListener::SignalResourceDeleted()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4570
diff
changeset
|
169 } |
9224e107d613
simplifying IDatabaseListener::SignalChange() as IDatabaseListener::SignalResourceDeleted()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4570
diff
changeset
|
170 |
4584
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
171 virtual void SignalChange(const ServerIndexChange& change) ORTHANC_OVERRIDE |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
172 { |
4268
0ae2ca210077
new macro TLOG() to replace VLOG() for trace logs with a category
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4263
diff
changeset
|
173 LOG(TRACE) << "Change related to resource " << change.GetPublicId() << " of type " |
0ae2ca210077
new macro TLOG() to replace VLOG() for trace logs with a category
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4263
diff
changeset
|
174 << EnumerationToString(change.GetResourceType()) << ": " |
0ae2ca210077
new macro TLOG() to replace VLOG() for trace logs with a category
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4263
diff
changeset
|
175 << EnumerationToString(change.GetChangeType()); |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
176 |
4590
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
177 pendingChanges_.push_back(change); |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
178 } |
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
179 |
4584
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
180 virtual void SignalAttachmentsAdded(uint64_t compressedSize) ORTHANC_OVERRIDE |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
181 { |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
182 sizeOfAddedAttachments_ += compressedSize; |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
183 } |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
184 |
4584
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
185 virtual bool LookupRemainingLevel(std::string& remainingPublicId /* out */, |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
186 ResourceType& remainingLevel /* out */) ORTHANC_OVERRIDE |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
187 { |
4590
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
188 if (hasRemainingLevel_) |
4584
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
189 { |
4590
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
190 remainingPublicId = remainingPublicId_; |
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
191 remainingLevel = remainingType_; |
4584
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
192 return true; |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
193 } |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
194 else |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
195 { |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
196 return false; |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
197 } |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
198 }; |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
199 |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
200 virtual void MarkAsUnstable(int64_t id, |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
201 Orthanc::ResourceType type, |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
202 const std::string& publicId) ORTHANC_OVERRIDE |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
203 { |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
204 context_.GetIndex().MarkAsUnstable(id, type, publicId); |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
205 } |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
206 |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
207 virtual bool IsUnstableResource(int64_t id) ORTHANC_OVERRIDE |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
208 { |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
209 return context_.GetIndex().IsUnstableResource(id); |
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
210 } |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
211 |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
212 virtual void Commit() ORTHANC_OVERRIDE |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
213 { |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
214 // We can remove the files once the SQLite transaction has |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
215 // been successfully committed. Some files might have to be |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
216 // deleted because of recycling. |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
217 CommitFilesToRemove(); |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
218 |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
219 // Send all the pending changes to the Orthanc plugins |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
220 CommitChanges(); |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
221 } |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
222 |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
223 virtual int64_t GetCompressedSizeDelta() ORTHANC_OVERRIDE |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
224 { |
4590
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
225 return (static_cast<int64_t>(sizeOfAddedAttachments_) - |
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
226 static_cast<int64_t>(sizeOfFilesToRemove_)); |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
227 } |
1432
0ac74fa21db8
rename IServerIndexListener as IDatabaseListener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1368
diff
changeset
|
228 }; |
0 | 229 |
230 | |
4585
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
231 class ServerIndex::TransactionContextFactory : public ITransactionContextFactory |
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
232 { |
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
233 private: |
4590
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
234 ServerContext& context_; |
4585
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
235 |
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
236 public: |
4590
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
237 TransactionContextFactory(ServerContext& context) : |
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
238 context_(context) |
4585
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
239 { |
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
240 } |
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
241 |
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
242 virtual ITransactionContext* Create() |
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
243 { |
4590
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
244 return new TransactionContext(context_); |
4585
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
245 } |
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
246 }; |
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
247 |
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
248 |
1177
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
249 class ServerIndex::UnstableResourcePayload |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
250 { |
1177
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
251 private: |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
252 ResourceType type_; |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
253 std::string publicId_; |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
254 boost::posix_time::ptime time_; |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
255 |
1177
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
256 public: |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
257 UnstableResourcePayload() : type_(ResourceType_Instance) |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
258 { |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
259 } |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
260 |
1177
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
261 UnstableResourcePayload(Orthanc::ResourceType type, |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
262 const std::string& publicId) : |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
263 type_(type), |
4205 | 264 publicId_(publicId), |
265 time_(boost::posix_time::second_clock::local_time()) | |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
266 { |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
267 } |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
268 |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
269 unsigned int GetAge() const |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
270 { |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
271 return (boost::posix_time::second_clock::local_time() - time_).total_seconds(); |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
272 } |
1177
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
273 |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
274 ResourceType GetResourceType() const |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
275 { |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
276 return type_; |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
277 } |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
278 |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
279 const std::string& GetPublicId() const |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
280 { |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
281 return publicId_; |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
282 } |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
283 }; |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
284 |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
285 |
2665
389d050a2e66
fix deadlock, speed up unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2664
diff
changeset
|
286 void ServerIndex::FlushThread(ServerIndex* that, |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
287 unsigned int threadSleepGranularityMilliseconds) |
206
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
288 { |
1102
ce6386b37afd
avoid unnecessary exceptions on Orthanc startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1006
diff
changeset
|
289 // By default, wait for 10 seconds before flushing |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
290 static const unsigned int SLEEP_SECONDS = 10; |
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
291 |
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
292 if (threadSleepGranularityMilliseconds > 1000) |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
293 { |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
294 throw OrthancException(ErrorCode_ParameterOutOfRange); |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
295 } |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
296 |
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
297 LOG(INFO) << "Starting the database flushing thread (sleep = " << SLEEP_SECONDS << " seconds)"; |
206
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
298 |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
299 unsigned int count = 0; |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
300 unsigned int countThreshold = (1000 * SLEEP_SECONDS) / threadSleepGranularityMilliseconds; |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
301 |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
302 while (!that->done_) |
206
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
303 { |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
304 boost::this_thread::sleep(boost::posix_time::milliseconds(threadSleepGranularityMilliseconds)); |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
305 count++; |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
306 |
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
307 if (count >= countThreshold) |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
308 { |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
309 Logging::Flush(); |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
310 that->FlushToDisk(); |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
311 |
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
312 count = 0; |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
313 } |
206
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
314 } |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
315 |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
316 LOG(INFO) << "Stopping the database flushing thread"; |
206
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
317 } |
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
318 |
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
319 |
4554 | 320 bool ServerIndex::IsUnstableResource(int64_t id) |
321 { | |
4584
b25941dcdbbe
ITransactionContext to uncouple ServerIndex from database wrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4583
diff
changeset
|
322 boost::mutex::scoped_lock lock(monitoringMutex_); |
4554 | 323 return unstableResources_.Contains(id); |
324 } | |
325 | |
1237 | 326 |
226
8a26a8e85edf
refactoring to read files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
224
diff
changeset
|
327 ServerIndex::ServerIndex(ServerContext& context, |
2665
389d050a2e66
fix deadlock, speed up unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2664
diff
changeset
|
328 IDatabaseWrapper& db, |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
329 unsigned int threadSleepGranularityMilliseconds) : |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
330 StatelessDatabaseOperations(db), |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
331 done_(false), |
269
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
332 maximumStorageSize_(0), |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
333 maximumPatients_(0) |
186
f68c039b0571
preparing refactoring of ServerIndex
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
180
diff
changeset
|
334 { |
4590
4a0bf1019335
simplification of ServerIndex::Listener as ServerIndex::TransactionContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4589
diff
changeset
|
335 SetTransactionContextFactory(new TransactionContextFactory(context)); |
4585
f0bdd99f3d81
created a ITransactionContextFactory around ServerIndex::Listener
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4584
diff
changeset
|
336 |
269
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
337 // Initial recycling if the parameters have changed since the last |
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
338 // execution of Orthanc |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
339 StandaloneRecycling(maximumStorageSize_, maximumPatients_); |
269
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
340 |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
341 if (HasFlushToDisk()) |
1306
8cd5784a6d80
IDatabaseWrapper::HasFlushToDisk()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1305
diff
changeset
|
342 { |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
343 flushThread_ = boost::thread(FlushThread, this, threadSleepGranularityMilliseconds); |
1306
8cd5784a6d80
IDatabaseWrapper::HasFlushToDisk()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1305
diff
changeset
|
344 } |
8cd5784a6d80
IDatabaseWrapper::HasFlushToDisk()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1305
diff
changeset
|
345 |
2665
389d050a2e66
fix deadlock, speed up unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2664
diff
changeset
|
346 unstableResourcesMonitorThread_ = boost::thread |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
347 (UnstableResourcesMonitorThread, this, threadSleepGranularityMilliseconds); |
206
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
348 } |
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
349 |
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
350 |
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
351 ServerIndex::~ServerIndex() |
4453a010d0db
flush to disk thread
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
205
diff
changeset
|
352 { |
1453
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
353 if (!done_) |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
354 { |
1453
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
355 LOG(ERROR) << "INTERNAL ERROR: ServerIndex::Stop() should be invoked manually to avoid mess in the destruction order!"; |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
356 Stop(); |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
357 } |
0 | 358 } |
359 | |
360 | |
1453
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
361 void ServerIndex::Stop() |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
362 { |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
363 if (!done_) |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
364 { |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
365 done_ = true; |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
366 |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
367 if (flushThread_.joinable()) |
1453
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
368 { |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
369 flushThread_.join(); |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
370 } |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
371 |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
372 if (unstableResourcesMonitorThread_.joinable()) |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
373 { |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
374 unstableResourcesMonitorThread_.join(); |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
375 } |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
376 } |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
377 } |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
378 |
c0bdc47165ef
code to warn about possible threading problems
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1432
diff
changeset
|
379 |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
380 void ServerIndex::SetMaximumPatientCount(unsigned int count) |
268
4bc02e2254ec
preparing ServerIndex for recycling
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
264
diff
changeset
|
381 { |
269
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
382 { |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
383 boost::mutex::scoped_lock lock(monitoringMutex_); |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
384 maximumPatients_ = count; |
3020
d207f6ac1f86
tracking disk size by the database engine to ensure consistency across transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
3019
diff
changeset
|
385 |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
386 if (count == 0) |
269
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
387 { |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
388 LOG(WARNING) << "No limit on the number of stored patients"; |
4575
e23bacd4fffc
clarifications in ServerIndex::Recycle()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4574
diff
changeset
|
389 } |
e23bacd4fffc
clarifications in ServerIndex::Recycle()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4574
diff
changeset
|
390 else |
e23bacd4fffc
clarifications in ServerIndex::Recycle()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4574
diff
changeset
|
391 { |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
392 LOG(WARNING) << "At most " << count << " patients will be stored"; |
269
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
393 } |
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
394 } |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
395 |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
396 StandaloneRecycling(maximumStorageSize_, maximumPatients_); |
269
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
397 } |
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
398 |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
399 |
269
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
400 void ServerIndex::SetMaximumStorageSize(uint64_t size) |
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
401 { |
270
e6a4c4329481
parameters for storage capacity
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
402 { |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
403 boost::mutex::scoped_lock lock(monitoringMutex_); |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
404 maximumStorageSize_ = size; |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
405 |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
406 if (size == 0) |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
407 { |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
408 LOG(WARNING) << "No limit on the size of the storage area"; |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
409 } |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
410 else |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
411 { |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
412 LOG(WARNING) << "At most " << (size / MEGA_BYTES) << "MB will be used for the storage area"; |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
413 } |
270
e6a4c4329481
parameters for storage capacity
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
414 } |
e6a4c4329481
parameters for storage capacity
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
269
diff
changeset
|
415 |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
416 StandaloneRecycling(maximumStorageSize_, maximumPatients_); |
269
f6fdf5abe751
recycling up and running
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
268
diff
changeset
|
417 } |
272
337c506461d2
protection from rest api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
270
diff
changeset
|
418 |
337c506461d2
protection from rest api
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
270
diff
changeset
|
419 |
2665
389d050a2e66
fix deadlock, speed up unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2664
diff
changeset
|
420 void ServerIndex::UnstableResourcesMonitorThread(ServerIndex* that, |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
421 unsigned int threadSleepGranularityMilliseconds) |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
422 { |
2940
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2898
diff
changeset
|
423 int stableAge; |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2898
diff
changeset
|
424 |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2898
diff
changeset
|
425 { |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2898
diff
changeset
|
426 OrthancConfiguration::ReaderLock lock; |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2898
diff
changeset
|
427 stableAge = lock.GetConfiguration().GetUnsignedIntegerParameter("StableAge", 60); |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2898
diff
changeset
|
428 } |
4767d36679ed
refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2898
diff
changeset
|
429 |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
430 if (stableAge <= 0) |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
431 { |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
432 stableAge = 60; |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
433 } |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
434 |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
435 LOG(INFO) << "Starting the monitor for stable resources (stable age = " << stableAge << ")"; |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
436 |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
437 while (!that->done_) |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
438 { |
2665
389d050a2e66
fix deadlock, speed up unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2664
diff
changeset
|
439 // Check for stable resources each few seconds |
4580
49f6b9a2b9f5
remove the only use of GlobalProperty_FlushSleep
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4579
diff
changeset
|
440 boost::this_thread::sleep(boost::posix_time::milliseconds(threadSleepGranularityMilliseconds)); |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
441 |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
442 for (;;) |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
443 { |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
444 UnstableResourcePayload stableResource; |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
445 int64_t stableId; |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
446 |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
447 { |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
448 boost::mutex::scoped_lock lock(that->monitoringMutex_); |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
449 |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
450 if (!that->unstableResources_.IsEmpty() && |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
451 that->unstableResources_.GetOldestPayload().GetAge() > static_cast<unsigned int>(stableAge)) |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
452 { |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
453 // This DICOM resource has not received any new instance for |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
454 // some time. It can be considered as stable. |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
455 stableId = that->unstableResources_.RemoveOldest(stableResource); |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
456 //LOG(TRACE) << "Stable resource: " << EnumerationToString(stableResource.GetResourceType()) << " " << stableId; |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
457 } |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
458 else |
513 | 459 { |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
460 // No more stable DICOM resource, leave the internal loop |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
461 break; |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
462 } |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
463 } |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
464 |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
465 /** |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
466 * WARNING: Don't protect the calls to "LogChange()" using |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
467 * "monitoringMutex_", as this could lead to deadlocks in |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
468 * other threads (typically, if "Store()" is being running in |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
469 * another thread, which leads to calls to "MarkAsUnstable()", |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
470 * which leads to two lockings of "monitoringMutex_"). |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
471 **/ |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
472 switch (stableResource.GetResourceType()) |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
473 { |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
474 case ResourceType_Patient: |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
475 that->LogChange(stableId, ChangeType_StablePatient, stableResource.GetPublicId(), ResourceType_Patient); |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
476 break; |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
477 |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
478 case ResourceType_Study: |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
479 that->LogChange(stableId, ChangeType_StableStudy, stableResource.GetPublicId(), ResourceType_Study); |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
480 break; |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
481 |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
482 case ResourceType_Series: |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
483 that->LogChange(stableId, ChangeType_StableSeries, stableResource.GetPublicId(), ResourceType_Series); |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
484 break; |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
485 |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
486 default: |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
487 throw OrthancException(ErrorCode_InternalError); |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
488 } |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
489 } |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
490 } |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
491 |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
492 LOG(INFO) << "Closing the monitor thread for stable resources"; |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
493 } |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
494 |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
495 |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
496 void ServerIndex::MarkAsUnstable(int64_t id, |
1177
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
497 Orthanc::ResourceType type, |
5b2d8c280ac2
Plugins can monitor changes through callbacks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1162
diff
changeset
|
498 const std::string& publicId) |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
499 { |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
500 assert(type == Orthanc::ResourceType_Patient || |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
501 type == Orthanc::ResourceType_Study || |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
502 type == Orthanc::ResourceType_Series); |
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
503 |
4581
bb3c82b8f373
transient introduction of ServerIndex::databaseMutex_
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4580
diff
changeset
|
504 { |
bb3c82b8f373
transient introduction of ServerIndex::databaseMutex_
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4580
diff
changeset
|
505 boost::mutex::scoped_lock lock(monitoringMutex_); |
bb3c82b8f373
transient introduction of ServerIndex::databaseMutex_
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4580
diff
changeset
|
506 UnstableResourcePayload payload(type, publicId); |
bb3c82b8f373
transient introduction of ServerIndex::databaseMutex_
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4580
diff
changeset
|
507 unstableResources_.AddOrMakeMostRecent(id, payload); |
bb3c82b8f373
transient introduction of ServerIndex::databaseMutex_
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4580
diff
changeset
|
508 //LOG(INFO) << "Unstable resource: " << EnumerationToString(type) << " " << id; |
bb3c82b8f373
transient introduction of ServerIndex::databaseMutex_
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4580
diff
changeset
|
509 } |
511
3b735fdf320b
monitoring of stable patients/studies/series
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
440
diff
changeset
|
510 } |
521 | 511 |
512 | |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
513 StoreStatus ServerIndex::Store(std::map<MetadataType, std::string>& instanceMetadata, |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
514 const DicomMap& dicomSummary, |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
515 const ServerIndex::Attachments& attachments, |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
516 const ServerIndex::MetadataMap& metadata, |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
517 const DicomInstanceOrigin& origin, |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
518 bool overwrite, |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
519 bool hasTransferSyntax, |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
520 DicomTransferSyntax transferSyntax, |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
521 bool hasPixelDataOffset, |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
522 uint64_t pixelDataOffset) |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
523 { |
4579 | 524 uint64_t maximumStorageSize; |
525 unsigned int maximumPatients; | |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
526 |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
527 { |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
528 boost::mutex::scoped_lock lock(monitoringMutex_); |
4579 | 529 maximumStorageSize = maximumStorageSize_; |
530 maximumPatients = maximumPatients_; | |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
531 } |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
532 |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
533 return StatelessDatabaseOperations::Store( |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
534 instanceMetadata, dicomSummary, attachments, metadata, origin, overwrite, hasTransferSyntax, |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
535 transferSyntax, hasPixelDataOffset, pixelDataOffset, maximumStorageSize, maximumPatients); |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
536 } |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
537 |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
538 |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
539 StoreStatus ServerIndex::AddAttachment(const FileInfo& attachment, |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
540 const std::string& publicId) |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
541 { |
4579 | 542 uint64_t maximumStorageSize; |
543 unsigned int maximumPatients; | |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
544 |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
545 { |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
546 boost::mutex::scoped_lock lock(monitoringMutex_); |
4579 | 547 maximumStorageSize = maximumStorageSize_; |
548 maximumPatients = maximumPatients_; | |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
549 } |
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
550 |
4587
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
551 return StatelessDatabaseOperations::AddAttachment( |
888868a5dc4e
ServerIndex now uses StatelessDatabaseOperations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4586
diff
changeset
|
552 attachment, publicId, maximumStorageSize, maximumPatients); |
4577
a114a5db2afe
end of refactoring read-write transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
4576
diff
changeset
|
553 } |
0 | 554 } |