11 if( iovToken.empty()){
27 const boost::shared_ptr<IOVSequence>&
data,
28 bool swapOIds=
false ){
32 data->swapOIds( writer );
39 const boost::shared_ptr<IOVSequence>&
data,
44 data->swapOIds( writer );
73 if( isecondTill != siov.
iovs().
end() ) isecondTill++;
75 if (ifirstTill==isecondTill)
76 throw cond::Exception(
"IOVImportIterator::setUp Error: empty input range");
80 else if (outOfOrder) {
82 it!=isecondTill; ++it)
83 if (diov.
exist(it->sinceTime()))
84 throw cond::Exception(
"IOVImportIterator::setUp Error: since time already exists");
85 }
else if (dsince <= diov.
iovs().
back().sinceTime()) {
86 std::ostringstream errStr;
87 errStr <<
"IOVImportIterator::setUp Error: trying to append a since time " << dsince
88 <<
" which is not larger than last since " << diov.
iovs().
back().sinceTime();
104 IOVProxy sourceIov( sourceSess, sourceIovToken );
105 setUp( sourceIov, since, till, outOfOrder, bulkSize );
120 if (dsince <= diov.
iovs().
back().sinceTime()) {
121 std::ostringstream errStr;
122 errStr <<
"IOVImportIterator::setUp Error: trying to append a since time " << dsince
123 <<
" which is not larger than last since " << diov.
iovs().
back().sinceTime();
137 IOVProxy sourceIov( sourceSess, sourceIovToken );
138 setUp( sourceIov, bulkSize );
147 boost::shared_ptr<IOVSequence>& diov =
m_destIov->data;
153 diov->add(m_lastSince, newPtoken, cont.
className());
187 m_isLoaded( rhs.m_isLoaded ),
209 boost::shared_ptr<IOVSequence>&
iov =
m_iov->data;
211 co <<
"db " <<
m_iov->dbSession.connectionString();
212 if(
m_iov->token.empty()) {
213 co <<
" no token";
return;
215 if (!
m_iov->data.get() ) {
216 co <<
" no iov for token " <<
m_iov->token;
219 co <<
" iov token " <<
m_iov->token;
220 co <<
"\nStamp: " << iov->comment()
221 <<
"; time " << iov->timestamp()
222 <<
"; revision " << iov->revision();
224 if( iov->iovs().empty() )
227 co <<
". size " << iov->iovs().size()
228 <<
"; last since " << iov->iovs().back().sinceTime();
232 std::ostringstream
out;
241 std::ostringstream
out;
244 out <<
"\n" << message <<
" for time: " <<
time;
302 boost::shared_ptr<IOVSequence>&
iov =
m_iov->data;
303 if( iov->iovs().empty() )
304 reportError(
"cond::IOVEditor::insert cannot inser into empty IOV sequence",tillTime);
307 reportError(
"cond::IOVEditor::insert time not in global range",tillTime);
309 if(tillTime<=iov->lastTill() )
310 reportError(
"cond::IOVEditor::insert IOV not in range",tillTime);
313 std::string payloadClassName =
m_iov->dbSession.classNameForItem( payloadToken );
314 unsigned int ret = iov->add(newSince, payloadToken, payloadClassName);
315 iov->updateLastTill(tillTime);
322 if (
values.empty())
return;
326 boost::shared_ptr<IOVSequence>&
iov =
m_iov->data;
330 reportError(
"cond::IOVEditor::bulkInsert first time not in global range",firstTime);
333 reportError(
"cond::IOVEditor::bulkInsert last time not in global range",lastTime);
335 if(lastTime>= iov->lastTill() ||
336 ( !iov->iovs().empty() && firstTime<=iov->iovs().back().sinceTime())
338 reportError(
"cond::IOVEditor::bulkInsert IOV not in range",firstTime);
340 for(std::vector< std::pair<cond::Time_t,std::string> >::const_iterator it=
values.begin(); it!=
values.end(); ++it){
341 std::string payloadClassName =
m_iov->dbSession.classNameForItem( it->second );
342 iov->add(it->first,it->second,payloadClassName );
349 if (values.empty())
return;
353 boost::shared_ptr<IOVSequence>&
iov =
m_iov->data;
357 reportError(
"cond::IOVEditor::bulkInsert first time not in global range",firstTime);
360 reportError(
"cond::IOVEditor::bulkInsert last time not in global range",lastTime);
362 if(lastTime>=iov->lastTill() ||
363 ( !iov->iovs().empty() && firstTime<=iov->iovs().back().sinceTime())
364 )
reportError(
"cond::IOVEditor::bulkInsert IOV not in range",firstTime);
366 for(std::vector< cond::IOVElement >::const_iterator it=values.begin(); it!=values.end(); ++it){
367 std::string payloadClassName =
m_iov->dbSession.classNameForItem( it->token() );
368 iov->add(it->sinceTime(),it->token(),payloadClassName );
380 boost::shared_ptr<IOVSequence>&
iov =
m_iov->data;
381 iov->stamp(icomment, append);
390 boost::shared_ptr<IOVSequence>&
iov =
m_iov->data;
391 iov->updateMetadata( metadata, append);
399 boost::shared_ptr<IOVSequence>&
iov =
m_iov->data;
400 iov->setScope( scope );
406 if(
m_iov->token.empty() )
reportError(
"cond::IOVEditor::updateClosure cannot change non-existing IOV index");
410 boost::shared_ptr<IOVSequence>&
iov =
m_iov->data;
411 iov->updateLastTill(newtillTime);
418 if(
m_iov->token.empty() ) {
419 reportError(
"cond::IOVEditor::appendIOV cannot append to non-existing IOV index");
425 boost::shared_ptr<IOVSequence>&
iov =
m_iov->data;
428 reportError(
"cond::IOVEditor::append time not in global range",sinceTime);
430 if( !iov->iovs().empty() ){
432 cond::Time_t lastValidSince=iov->iovs().back().sinceTime();
433 if( sinceTime<= lastValidSince){
434 std::ostringstream errStr;
435 errStr <<
"IOVEditor::append Error: trying to append a since time " << lastValidSince
436 <<
" which is not larger than last since";
443 std::string payloadClassName =
m_iov->dbSession.classNameForItem( payloadToken );
444 unsigned int ret = iov->add(sinceTime,payloadToken, payloadClassName );
453 if(
m_iov->token.empty() ) {
454 reportError(
"cond::IOVEditor::freeInsert cannot append to non-existing IOV index");
460 boost::shared_ptr<IOVSequence>&
iov =
m_iov->data;
466 reportError(
"cond::IOVEditor::freeInsert time not in global range",sinceTime);
470 if (
m_iov->data->exist(sinceTime))
471 reportError(
"cond::IOVEditor::freeInsert sinceTime already existing",sinceTime);
477 std::string payloadClassName =
m_iov->dbSession.classNameForItem( payloadToken );
478 unsigned int ret = iov->add(sinceTime,payloadToken, payloadClassName );
486 if(
m_iov->token.empty() )
reportError(
"cond::IOVEditor::truncate cannot delete to non-existing IOV sequence");
490 boost::shared_ptr<IOVSequence>&
iov =
m_iov->data;
491 if (iov->piovs().empty())
return 0;
493 std::string tokenStr = iov->piovs().back().token();
494 m_iov->dbSession.deleteObject( tokenStr );
496 unsigned int ret = iov->truncate();
505 if(
m_iov->token.empty() )
reportError(
"cond::IOVEditor::deleteEntries cannot delete to non-existing IOV sequence");
509 boost::shared_ptr<IOVSequence>&
iov =
m_iov->data;
514 for(payloadIt=iov->piovs().begin();payloadIt!=payloadItEnd;++payloadIt){
515 tokenStr=payloadIt->token();
516 m_iov->dbSession.deleteObject( tokenStr );
519 m_iov->dbSession.deleteObject(
m_iov->token );
520 iov->piovs().clear();
526 importer->setUp( sourceSess, sourceIovToken );
527 return importer->importAll();
530 boost::shared_ptr<IOVImportIterator>
539 return m_iov->data->timeType();
const TimeTypeSpecs timeTypeSpecs[]
std::string create(cond::TimeType timetype)
void debugInfo(std::ostream &co) const
IOVSequence const & iov() const
void load(const std::string &token)
void reportError(std::string message) const
tuple cont
load Luminosity info ##
IOVEditor & operator=(const IOVEditor &rhs)
const_iterator find(cond::Time_t time) const
void updateIOV(cond::DbSession &dbSess, const boost::shared_ptr< IOVSequence > &data, const std::string &token)
bool validTime(cond::Time_t time, cond::TimeType timetype) const
cond::Time_t firstSince() const
Container const & iovs() const
size_t import(cond::DbSession &sourceSess, const std::string &sourceIovToken)
std::string const & token() const
boost::shared_ptr< cond::IOVSequence > loadIOV(cond::DbSession &dbSess, const std::string &iovToken)
void setScope(cond::IOVSequence::ScopeType scope)
set the scope
Container::const_iterator const_iterator
unsigned int freeInsert(cond::Time_t sinceTime, const std::string &payloadToken)
insert a payload with known since in any position
cond::IOVProxy m_sourceIov
IOVSequence::const_iterator m_cursor
IOVImportIterator(boost::shared_ptr< cond::IOVProxyData > &destIov)
const std::string & className()
unsigned int truncate(bool withPayload=false)
bool exist(cond::Time_t time) const
unsigned long long Time_t
TimeType timetype() const
std::string storeObject(const T *object, const std::string &containerName)
unsigned int insert(cond::Time_t tillTime, const std::string &payloadToken)
Assign a payload with till time. Returns the payload index in the iov sequence.
bool createIOVContainerIfNecessary()
size_t importMoreElements()
IOVSequence::const_iterator m_till
cond::IOVProxy proxy() const
void updateClosure(cond::Time_t newtillTime)
Update the closure of the iov sequence.
unsigned int append(cond::Time_t sinceTime, const std::string &payloadToken)
std::string insertIOV(cond::DbSession &dbSess, const boost::shared_ptr< IOVSequence > &data, bool swapOIds=false)
static std::string container()
virtual ~IOVImportIterator()
char data[epos_bytes_allocation]
void bulkAppend(std::vector< std::pair< cond::Time_t, std::string > > &values)
Bulk append of iov chunck.
void stamp(std::string const &icomment, bool append=false)
bool existsIOVContainer()
void deleteEntries(bool withPayload=false)
bool createIOVContainer()
create iov tables
volatile std::atomic< bool > shutdown_flag false
boost::shared_ptr< IOVImportIterator > importIterator()
bool fromString(const std::string &s)
bool updateObject(const T *object, const std::string &objectId)
boost::shared_ptr< T > getTypedObject(const std::string &objectId)
ora::Database & storage()
void setUp(cond::IOVProxy &sourceIov, cond::Time_t since, cond::Time_t till, bool outOfOrder, size_t bulkSize=1)
boost::shared_ptr< cond::IOVProxyData > m_destIov
boost::shared_ptr< cond::IOVProxyData > m_iov
void editMetadata(std::string const &metadata, bool append=false)
edit metadata