#include <CondTools/L1Trigger/interface/DataWriter.h>
Public Member Functions | |
DataWriter (const std::string &connectString, const std::string &authenticationPath) | |
void | updateIOV (const std::string &tag, const std::string &payloadToken, const edm::RunNumber_t sinceRun) |
void | writeKey (L1TriggerKey *key, const std::string &tag, const edm::RunNumber_t sinceRun) |
void | writeKeyList (L1TriggerKeyList *keyList, const std::string &tag, edm::RunNumber_t sinceRun=0) |
std::string | writePayload (const edm::EventSetup &setup, const std::string &recordType) |
void | writePayload (L1TriggerKey &key, const edm::EventSetup &setup, const std::string &record, const std::string &type) |
template<typename T> | |
void | writePayload (L1TriggerKey &key, T *payload, const std::string &recordName) |
virtual | ~DataWriter () |
Protected Types | |
typedef std::map< std::string, std::string > | TagToToken |
Protected Member Functions | |
void | addMappings (const std::string tag, const std::string iovToken) |
std::string | findTokenForTag (const std::string &tag) |
Protected Attributes | |
TagToToken | tagToToken |
Definition at line 46 of file DataWriter.h.
typedef std::map<std::string, std::string> l1t::DataWriter::TagToToken [protected] |
Definition at line 101 of file DataWriter.h.
l1t::DataWriter::DataWriter | ( | const std::string & | connectString, | |
const std::string & | authenticationPath | |||
) | [inline, explicit] |
Definition at line 55 of file DataWriter.h.
00057 : DataManager( connectString, authenticationPath ) {};
virtual l1t::DataWriter::~DataWriter | ( | ) | [inline, virtual] |
void l1t::DataWriter::addMappings | ( | const std::string | tag, | |
const std::string | iovToken | |||
) | [protected] |
Definition at line 114 of file DataWriter.cc.
References cond::MetaData::addMapping(), cond::CoralTransaction::commit(), l1t::DataManager::connection, cond::Connection::coralTransaction(), l1t::DataManager::metadata, and cond::CoralTransaction::start().
Referenced by updateIOV(), writeKey(), and writeKeyList().
00115 { 00116 // coral->connect (cond::ReadWriteCreate); 00117 //connection->connect( session ) ; 00118 cond::CoralTransaction& coral = connection->coralTransaction() ; 00119 // coral->startTransaction (false); 00120 coral.start (false); 00121 00122 metadata->addMapping (tag, iovToken); // default timetype = run number 00123 00124 coral.commit (); 00125 // coral->disconnect (); 00126 //connection->disconnect (); 00127 }
std::string l1t::DataWriter::findTokenForTag | ( | const std::string & | tag | ) | [protected] |
Definition at line 17 of file DataWriter.cc.
References l1t::DataManager::connection, cond::Connection::coralTransaction(), cond::MetaData::getToken(), cond::MetaData::hasTag(), l1t::DataManager::metadata, and tagToToken.
Referenced by updateIOV(), writeKey(), and writeKeyList().
00018 { 00019 // fast check in cashe 00020 TagToToken::const_iterator found = tagToToken.find (tag); 00021 if (found != tagToToken.end ()) 00022 return found->second; 00023 00024 // else slow way, also we may need to create db 00025 // coral->connect (cond::ReadWriteCreate); 00026 // coral->startTransaction (false); 00027 // connection->connect ( session ); 00028 cond::CoralTransaction& coral = connection->coralTransaction() ; 00029 coral.start (false); 00030 00031 std::string tagToken; 00032 if (metadata->hasTag (tag)) 00033 tagToken = metadata->getToken (tag); 00034 00035 coral.commit (); 00036 // coral->disconnect (); 00037 //connection->disconnect (); 00038 00039 // if not found empty string is returned 00040 return tagToken; 00041 }
void l1t::DataWriter::updateIOV | ( | const std::string & | tag, | |
const std::string & | payloadToken, | |||
const edm::RunNumber_t | sinceRun | |||
) |
Definition at line 274 of file DataWriter.cc.
References addMappings(), cond::IOVEditor::append(), cond::PoolTransaction::commit(), l1t::DataManager::connection, cond::IOVEditor::create(), findTokenForTag(), cond::IOVEditor::insert(), cond::IOVService::newIOVEditor(), cond::IOVService::payloadToken(), cond::Connection::poolTransaction(), cond::runnumber, cond::PoolTransaction::start(), tagToToken, HLT_VtxMuL3::timetype, cond::timeTypeSpecs, and cond::IOVEditor::token().
Referenced by L1CondDBIOVWriter::analyze().
00277 { 00278 edm::LogVerbatim( "L1-O2O" )<< tag << " PAYLOAD TOKEN " << payloadToken ; 00279 00280 // Get IOVToken for given tag 00281 std::string tagToken = findTokenForTag( tag ) ; 00282 bool requireMapping = tagToken.empty() ; 00283 00284 cond::PoolTransaction& pool = connection->poolTransaction() ; 00285 pool.start( false ) ; 00286 00287 cond::IOVService iov( pool ) ; 00288 00289 // Create editor, with or without tagToken 00290 cond::IOVEditor* editor ; 00291 editor = iov.newIOVEditor( tagToken ) ; 00292 00293 // Insert new IOV 00294 cond::TimeType timetype = cond::runnumber; 00295 cond::Time_t globalSince = cond::timeTypeSpecs[timetype].beginValue; 00296 00297 if( requireMapping ) 00298 { 00299 // insert() sets till-time, not since-time -- will this work? 00300 editor->create( globalSince, timetype ) ; 00301 } 00302 00303 if( sinceRun == globalSince || requireMapping ) 00304 { 00305 cond::Time_t globalTill = cond::timeTypeSpecs[timetype].endValue; 00306 editor->insert (globalTill, payloadToken ); 00307 tagToken = editor->token() ; 00308 edm::LogVerbatim( "L1-O2O" ) << tag << " IOV TOKEN " << tagToken 00309 << " SINCE " << globalSince ; 00310 } 00311 else 00312 { 00313 if( iov.payloadToken( tagToken, sinceRun ) != payloadToken ) 00314 { 00315 editor->append( sinceRun, payloadToken ) ; 00316 edm::LogVerbatim( "L1-O2O" ) << tag << " IOV TOKEN " << tagToken 00317 << " SINCE " << sinceRun ; 00318 } 00319 else 00320 { 00321 edm::LogVerbatim( "L1-O2O" ) << "IOV already up to date." ; 00322 } 00323 } 00324 delete editor ; 00325 00326 // Is this necessary? 00327 pool.commit() ; 00328 00329 if( tagToToken.find( tag ) != tagToToken.end () ) 00330 { 00331 tagToToken.insert( std::make_pair( tag, tagToken ) ) ; 00332 } 00333 00334 // Assign payload token with IOV value 00335 if( requireMapping ) 00336 { 00337 addMappings( tag, tagToken ) ; 00338 } 00339 }
void l1t::DataWriter::writeKey | ( | L1TriggerKey * | key, | |
const std::string & | tag, | |||
const edm::RunNumber_t | sinceRun | |||
) |
Definition at line 43 of file DataWriter.cc.
References addMappings(), cond::IOVEditor::append(), cond::PoolTransaction::commit(), l1t::DataManager::connection, cond::IOVEditor::create(), findTokenForTag(), cond::IOVEditor::insert(), cond::TypedRef< T >::markWrite(), cond::IOVService::newIOVEditor(), cond::IOVService::payloadToken(), cond::Connection::poolTransaction(), cond::runnumber, cond::PoolTransaction::start(), tagToToken, HLT_VtxMuL3::timetype, cond::timeTypeSpecs, cond::TypedRef< T >::token(), and cond::IOVEditor::token().
00046 { 00047 // writting key as bit more complicated. At this time we have to worry 00048 // about such things if the key already exists or not 00049 // Also we need to get IOVToken for given tag if key exist 00050 // if it does not, then we need to addMapping in the end 00051 00052 // Bad part - get TagTokent for given tag. 00053 // We use layzy cash to save all tag adn tokens, in case we save key with same tag 00054 std::string tagToken = findTokenForTag (tag); 00055 bool requireMapping = tagToken.empty (); 00056 00057 // pool->connect (); 00058 //connection->connect ( session ); 00059 cond::PoolTransaction& pool = connection->poolTransaction() ; 00060 pool.start (false); 00061 00062 cond::TypedRef<L1TriggerKey> ref (pool, key); 00063 ref.markWrite ("L1TriggerKeyRcd"); 00064 00065 cond::IOVService iov (pool); 00066 00067 // Create editor, with or wothoug TagToken 00068 cond::IOVEditor * editor; 00069 editor = iov.newIOVEditor (tagToken); 00070 00071 // finally insert new IOV 00072 cond::TimeType timetype = cond::runnumber; 00073 cond::Time_t globalSince = cond::timeTypeSpecs[timetype].beginValue; 00074 00075 if( requireMapping ) 00076 { 00077 editor->create( globalSince, timetype ) ; 00078 } 00079 00080 if( sinceRun == globalSince || requireMapping ) 00081 { 00082 cond::Time_t globalTill = cond::timeTypeSpecs[timetype].endValue; 00083 editor->insert (globalTill, ref.token ()); 00084 tagToken = editor->token (); 00085 edm::LogVerbatim( "L1-O2O" ) << "L1TriggerKey IOV TOKEN " << tagToken ; 00086 } 00087 else 00088 { 00089 if( iov.payloadToken( tagToken, sinceRun ) != ref.token() ) 00090 { 00091 editor->append( sinceRun, ref.token() ) ; 00092 edm::LogVerbatim( "L1-O2O" ) << tag << "L1TriggerKey IOV TOKEN " 00093 << tagToken ; 00094 } 00095 else 00096 { 00097 edm::LogVerbatim( "L1-O2O" ) << "IOV already up to date." ; 00098 } 00099 } 00100 delete editor; 00101 00102 pool.commit (); 00103 // pool->disconnect (); 00104 //connection->disconnect (); 00105 00106 if (tagToToken.find (tag) != tagToToken.end ()) 00107 tagToToken.insert (std::make_pair (tag, tagToken)); 00108 00109 // Assign payload token with IOV value 00110 if (requireMapping) 00111 addMappings (tag, tagToken); 00112 }
void l1t::DataWriter::writeKeyList | ( | L1TriggerKeyList * | keyList, | |
const std::string & | tag, | |||
edm::RunNumber_t | sinceRun = 0 | |||
) |
Definition at line 200 of file DataWriter.cc.
References addMappings(), cond::IOVEditor::append(), cond::PoolTransaction::commit(), l1t::DataManager::connection, cond::IOVEditor::create(), findTokenForTag(), cond::IOVEditor::insert(), cond::TypedRef< T >::markWrite(), cond::IOVService::newIOVEditor(), cond::IOVService::newIOVIterator(), cond::IOVIterator::next(), cond::Connection::poolTransaction(), cond::runnumber, cond::PoolTransaction::start(), tagToToken, HLT_VtxMuL3::timetype, cond::timeTypeSpecs, cond::TypedRef< T >::token(), cond::IOVEditor::token(), and cond::IOVIterator::validity().
Referenced by L1CondDBPayloadWriter::analyze().
00203 { 00204 // Get IOVToken for given tag 00205 std::string tagToken = findTokenForTag( tag ) ; 00206 bool requireMapping = tagToken.empty() ; 00207 00208 cond::PoolTransaction& pool = connection->poolTransaction() ; 00209 pool.start( false ) ; 00210 00211 cond::TypedRef< L1TriggerKeyList > ref( pool, keyList ) ; 00212 ref.markWrite( "L1TriggerKeyListRcd" ) ; 00213 00214 cond::IOVService iov( pool ) ; 00215 00216 // Create editor, with or without tagToken 00217 cond::IOVEditor* editor ; 00218 editor = iov.newIOVEditor( tagToken ) ; 00219 00220 // Insert new IOV 00221 cond::TimeType timetype = cond::runnumber; 00222 cond::Time_t globalSince = cond::timeTypeSpecs[timetype].beginValue; 00223 00224 if( requireMapping ) 00225 { 00226 edm::LogVerbatim( "L1-O2O" ) << "GLOBAL SINCE " << globalSince 00227 << " SINCE " << sinceRun ; 00228 00229 editor->create( globalSince, timetype ) ; 00230 sinceRun = globalSince ; 00231 } 00232 else if( sinceRun == 0 ) // find last since and add 1 00233 { 00234 cond::IOVIterator* itr = iov.newIOVIterator( tagToken ) ; 00235 while( itr->next() ) 00236 { 00237 sinceRun = itr->validity().first ; 00238 } 00239 ++sinceRun ; 00240 delete itr ; 00241 } 00242 00243 if( sinceRun == globalSince ) 00244 { 00245 cond::Time_t globalTill = cond::timeTypeSpecs[timetype].endValue; 00246 editor->insert (globalTill, ref.token ()); 00247 } 00248 else 00249 { 00250 editor->append( sinceRun, ref.token() ) ; 00251 } 00252 tagToken = editor->token() ; 00253 delete editor ; 00254 00255 // Is this necessary? 00256 pool.commit() ; 00257 00258 if( tagToToken.find( tag ) != tagToToken.end () ) 00259 { 00260 tagToToken.insert( std::make_pair( tag, tagToken ) ) ; 00261 } 00262 00263 // Assign payload token with IOV value 00264 if( requireMapping ) 00265 { 00266 addMappings( tag, tagToken ) ; 00267 } 00268 00269 edm::LogVerbatim( "L1-O2O" ) << "L1TriggerKeyList IOV TOKEN " << tagToken 00270 << " TAG " << tag << " SINCE " << sinceRun ; 00271 }
std::string l1t::DataWriter::writePayload | ( | const edm::EventSetup & | setup, | |
const std::string & | recordType | |||
) |
Definition at line 173 of file DataWriter.cc.
References cond::PoolTransaction::commit(), l1t::DataManager::connection, Exception, DBSPlugin::get(), cond::Connection::poolTransaction(), l1t::WriterProxy::save(), and cond::PoolTransaction::start().
00175 { 00176 WriterFactory* factory = WriterFactory::get(); 00177 WriterProxy* writer = factory->create( recordType + "@Writer" ) ; 00178 if( writer == 0 ) 00179 { 00180 throw cond::Exception( "DataWriter: could not create WriterProxy with name " 00181 + recordType + "@Writer" ) ; 00182 } 00183 //assert( writer != 0 ); 00184 00185 cond::PoolTransaction& pool = connection->poolTransaction() ; 00186 pool.start( false ) ; 00187 00188 // update key to have new payload registered for record-type pair. 00189 std::string payloadToken = writer->save( setup, pool ) ; 00190 edm::LogVerbatim( "L1-O2O" ) << recordType << " PAYLOAD TOKEN " 00191 << payloadToken ; 00192 00193 delete writer; 00194 pool.commit (); 00195 00196 return payloadToken ; 00197 }
void l1t::DataWriter::writePayload | ( | L1TriggerKey & | key, | |
const edm::EventSetup & | setup, | |||
const std::string & | record, | |||
const std::string & | type | |||
) |
Definition at line 134 of file DataWriter.cc.
References L1TriggerKey::add(), l1t::buildName(), cond::PoolTransaction::commit(), l1t::DataManager::connection, Exception, DBSPlugin::get(), name, cond::Connection::poolTransaction(), l1t::WriterProxy::save(), and cond::PoolTransaction::start().
00136 { 00137 WriterFactory * factory = WriterFactory::get(); 00138 const std::string name = buildName(record, type); 00139 WriterProxy * writer = factory->create(name); 00140 if( writer == 0 ) 00141 { 00142 throw cond::Exception( "DataWriter: could not create WriterProxy with name " 00143 + name ) ; 00144 } 00145 //assert (writer != 0); 00146 00147 // pool->connect (); 00148 //connection->connect ( session ); 00149 cond::PoolTransaction& pool = connection->poolTransaction() ; 00150 // pool->startTransaction (false); 00151 pool.start (false); 00152 00153 // update key to have new payload registered for record-type pair. 00154 std::string payloadToken = writer->save(setup, pool); 00155 edm::LogVerbatim( "L1-O2O" ) << "TOKEN " << payloadToken ; 00156 if( payloadToken.empty() ) 00157 { 00158 throw cond::Exception( "DataWriter: failure to write payload in " 00159 + name ) ; 00160 } 00161 //assert (!payloadToken.empty ()); 00162 00163 key.add (record, type, payloadToken); 00164 00165 delete writer; 00166 00167 pool.commit (); 00168 // pool->disconnect (); 00169 //connection->disconnect (); 00170 }
void l1t::DataWriter::writePayload | ( | L1TriggerKey & | key, | |
T * | payload, | |||
const std::string & | recordName | |||
) | [inline] |
Definition at line 108 of file DataWriter.h.
References L1TriggerKey::add(), edm::eventsetup::heterocontainer::HCTypeTagTemplate< T, Group >::className(), cond::PoolTransaction::commit(), l1t::DataManager::connection, cond::TypedRef< T >::markWrite(), cond::Connection::poolTransaction(), cond::PoolTransaction::start(), and cond::TypedRef< T >::token().
Referenced by L1CondDBPayloadWriter::analyze().
00109 { 00110 /* pool->connect (); */ 00111 //connection->connect ( session ); 00112 /* pool->startTransaction (false); */ 00113 cond::PoolTransaction& pool = connection->poolTransaction() ; 00114 pool.start (false); 00115 00116 cond::TypedRef<T> ref (pool, payload); 00117 ref.markWrite (recordName); 00118 00119 std::string typeName = 00120 edm::eventsetup::heterocontainer::HCTypeTagTemplate<T, edm::eventsetup::DataKey>::className (); 00121 00122 key.add (recordName, typeName, ref.token ()); 00123 00124 pool.commit (); 00125 /* pool->disconnect (); */ 00126 //connection->disconnect (); 00127 }
TagToToken l1t::DataWriter::tagToToken [protected] |
Definition at line 102 of file DataWriter.h.
Referenced by findTokenForTag(), updateIOV(), writeKey(), and writeKeyList().