9 namespace persistency {
35 std::vector<std::tuple<cond::Time_t, cond::Hash, boost::posix_time::ptime> >
iovBuffer;
54 m_data->payloadType = payloadObjectType;
58 m_data->metadataChange =
true;
77 m_data->synchronizationType,
83 if (
m_data->protectionCode) {
85 bool writeAllowed =
m_session->iovSchema().tagAccessPermissionTable().getAccessPermission(
92 "Tag \"" +
tag +
"\" can't be accessed for update by db-user \"" +
m_session->principalName +
"\".",
96 bool mylock =
m_session->iovSchema().tagAccessPermissionTable().getAccessPermission(
100 "Tag \"" +
tag +
"\" can't be accessed for update, because it has been locked by an other session. \"" +
124 m_data->changes.insert(
"SynchronizationType");
134 m_data->changes.insert(
"EndOfValidity");
143 m_data->metadataChange =
true;
144 m_data->changes.insert(
"Description");
156 m_data->changes.insert(
"LastValidatedTime");
161 boost::posix_time::ptime
now = boost::posix_time::microsec_clock::universal_time();
167 const boost::posix_time::ptime& insertionTime,
171 m_data->iovBuffer.push_back(std::tie(
since, payloadHash, insertionTime));
177 m_data->deleteBuffer.push_back(std::tie(
since, payloadHash));
181 bool iovSorter(
const std::tuple<cond::Time_t, cond::Hash, boost::posix_time::ptime>&
f,
182 const std::tuple<cond::Time_t, cond::Hash, boost::posix_time::ptime>&
s) {
183 return std::get<0>(
f) < std::get<0>(
s);
187 const boost::posix_time::ptime& operationTime,
188 bool forceInsertion) {
195 if (
m_data->metadataChange &&
m_data->description.empty())
196 throwException(
"A non-empty description string is mandatory.",
"IOVEditor::flush");
201 if (
m_data->creationTime.is_not_a_date_time())
202 m_data->creationTime = operationTime;
206 m_data->synchronizationType,
209 m_data->lastValidatedTime,
211 if (
m_session->iovSchema().tagLogTable().exists())
224 m_data->synchronizationType,
226 m_data->lastValidatedTime,
229 if (
m_data->metadataChange) {
232 if (
m_session->iovSchema().tagLogTable().exists()) {
235 for (
const auto&
c :
m_data->changes) {
237 if (
i == (
m_data->changes.size() - 1))
243 m_session->iovSchema().tagLogTable().insert(
244 m_data->tag, operationTime, cond::getUserName(), cond::getHostName(), cond::getCommand(),
action, lt);
250 if (!
m_data->iovBuffer.empty()) {
262 boost::posix_time::ptime no_time;
266 std::stringstream
msg;
267 msg <<
"Can't insert iov since " <<
l <<
" on the tag " <<
m_data->tag <<
": last since is " <<
last
273 for (
auto& iov :
m_data->iovBuffer) {
274 boost::posix_time::ptime& insertionTime = std::get<2>(iov);
275 if (insertionTime.is_not_a_date_time())
276 insertionTime = operationTime;
282 if (!
m_data->deleteBuffer.empty()) {
287 if (
m_session->iovSchema().tagLogTable().exists()) {
288 std::stringstream
msg;
289 if (!
m_data->iovBuffer.empty())
290 msg <<
m_data->iovBuffer.size() <<
" iov(s) inserted";
291 if (!
msg.str().empty())
295 if (!
m_data->deleteBuffer.empty())
296 msg <<
m_data->deleteBuffer.size() <<
" iov(s) deleted.";
298 m_session->iovSchema().tagLogTable().insert(
299 m_data->tag, operationTime, cond::getUserName(), cond::getHostName(), cond::getCommand(),
msg.str(), lt);
302 m_data->iovBuffer.clear();
303 m_data->deleteBuffer.clear();
309 return flush(logText, boost::posix_time::microsec_clock::universal_time(),
false);
317 return flush(
std::string(
"-"), boost::posix_time::microsec_clock::universal_time(),
false);
321 return flush(logText, boost::posix_time::microsec_clock::universal_time(), forceInsertion);
330 m_session->iovSchema().tagAccessPermissionTable().setAccessPermission(
m_data->tag,
341 boost::posix_time::microsec_clock::universal_time(),
353 m_session->iovSchema().tagAccessPermissionTable().removeAccessPermission(
362 boost::posix_time::microsec_clock::universal_time(),
373 if (!
m_session->isTransactionActive(
false))