CMS 3D CMS Logo

l1t::DataWriter Class Reference

#include <CondTools/L1Trigger/interface/DataWriter.h>

Inheritance diagram for l1t::DataWriter:

l1t::DataManager

List of all members.

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


Detailed Description

Definition at line 46 of file DataWriter.h.


Member Typedef Documentation

typedef std::map<std::string, std::string> l1t::DataWriter::TagToToken [protected]

Definition at line 101 of file DataWriter.h.


Constructor & Destructor Documentation

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]

Definition at line 58 of file DataWriter.h.

00058 {};


Member Function Documentation

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 }

template<typename T>
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 }


Member Data Documentation

TagToToken l1t::DataWriter::tagToToken [protected]

Definition at line 102 of file DataWriter.h.

Referenced by findTokenForTag(), updateIOV(), writeKey(), and writeKeyList().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:48:00 2009 for CMSSW by  doxygen 1.5.4