CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PoolDBOutputService.cc
Go to the documentation of this file.
3 //#include "CondCore/DBCommon/interface/TagInfo.h"
4 //#include "CondCore/DBCommon/interface/IOVInfo.h"
10 //
11 #include <vector>
12 #include<memory>
13 
14 void
16  Record thisrecord;
17 
18  thisrecord.m_idName = pset.getParameter<std::string>("record");
19  thisrecord.m_tag = pset.getParameter<std::string>("tag");
20 
21  thisrecord.m_closeIOV =
22  pset.getUntrackedParameter<bool>("closeIOV", m_closeIOV);
23 
24  //thisrecord.m_timetype=cond::findSpecs(pset.getUntrackedParameter< std::string >("timetype",m_timetypestr)).type;
26 
27  m_callbacks.insert(std::make_pair(thisrecord.m_idName,thisrecord));
28 
29  // *** THE LOGGING has still to be defined and implemented.
30  //if( !m_logConnectionString.empty() ){
31  // cond::UserLogInfo userloginfo;
32  // m_logheaders.insert(std::make_pair(thisrecord.m_idName,userloginfo));
33  //}
34 }
35 
37  m_timetypestr(""),
38  m_currentTime( 0 ),
39  m_session(),
40  //m_logConnectionString(""),
41  //m_logdb(),
42  m_dbstarted( false ),
43  m_callbacks(),
44  //m_newtags(),
45  m_closeIOV(false)//,
46  //m_logheaders()
47 {
48  m_closeIOV=iConfig.getUntrackedParameter<bool>("closeIOV",m_closeIOV);
49 
50  m_timetypestr=iConfig.getUntrackedParameter< std::string >("timetype","runnumber");
51  m_timetype = cond::time::timeTypeFromName( m_timetypestr );
52 
53  edm::ParameterSet connectionPset = iConfig.getParameter<edm::ParameterSet>("DBParameters");
55  connection.setParameters( connectionPset );
56  connection.configure();
57 
58  m_session = connection.createSession( iConfig.getParameter<std::string>("connect"), true );
59 
60  //if( iConfig.exists("logconnect") ){
61  // m_logConnectionString = iConfig.getUntrackedParameter<std::string>("logconnect");
62  // cond::DbSession logSession = connection.createSession();
63  // m_logdb.reset( new cond::Logger( logSession ) );
64  //}
65 
66  typedef std::vector< edm::ParameterSet > Parameters;
67  Parameters toPut=iConfig.getParameter<Parameters>("toPut");
68  for(Parameters::iterator itToPut = toPut.begin(); itToPut != toPut.end(); ++itToPut)
69  fillRecord( *itToPut);
70 
71 
77 }
78 
81  return m_session;
82 }
83 
86  return this->lookUpRecord(recordName).m_tag;
87 }
88 
89 bool
91  Record& myrecord=this->lookUpRecord(recordName);
92  return myrecord.m_isNewTag;
93 }
94 
95 void
97 {
98  m_session.transaction().start(false);
99  cond::persistency::TransactionScope scope( m_session.transaction() );
100  try{
101  if(!forReading) {
102  if( !m_session.existsDatabase() ) m_session.createDatabase();
103  }
104  //init logdb if required
105  //if(!m_logConnectionString.empty()){
106  // m_logdb->connect( m_logConnectionString );
107  // m_logdb->createLogDBIfNonExist();
108  //}
109  } catch( const std::exception& er ){
110  cond::throwException( std::string(er.what()),"PoolDBOutputService::initDB" );
111  }
112  scope.close();
113  m_dbstarted=true;
114 }
115 
116 void
118 {
119  if( m_dbstarted) {
120  m_session.transaction().commit();
121  m_dbstarted = false;
122  }
123 }
124 
125 void
127 {
128  if( m_timetype == cond::runnumber ){//runnumber
129  m_currentTime=iEvtid.run();
130  }else if( m_timetype == cond::timestamp ){ //timestamp
131  m_currentTime=iTime.value();
132  }
133 }
134 
135 void
137 }
138 
139 void
141  if( m_timetype == cond::lumiid ){
142  m_currentTime=iLumiid.value();
143  }
144 }
145 
146 void
148 }
149 
151 }
152 
153 
156  return timeTypeSpecs[m_timetype].endValue;
157 }
158 
161  return timeTypeSpecs[m_timetype].beginValue;
162 }
163 
166  return m_currentTime;
167 }
168 
169 void
171  const std::string payloadType,
172  cond::Time_t firstSinceTime,
173  cond::Time_t firstTillTime,
174  const std::string& recordName,
175  bool withlogging){
176  cond::persistency::TransactionScope scope( m_session.transaction() );
177  Record& myrecord=this->lookUpRecord(recordName);
178  if(!myrecord.m_isNewTag) {
179  cond::throwException( myrecord.m_tag + " is not a new tag", "PoolDBOutputService::createNewIOV");
180  }
181  std::string iovToken;
182  //if(withlogging){
183  // if( m_logConnectionString.empty() ) {
184  // throw cond::db::Exception("Log db was not set from PoolDBOutputService::createNewIOV",
185  // "PoolDBOutputService::createNewIOV");
186  // }
187  //}
188 
189  try{
190  // FIX ME: synchronization type and description have to be passed as the other parameters?
191  cond::persistency::IOVEditor editor = m_session.createIov( payloadType, myrecord.m_tag, myrecord.m_timetype, cond::OFFLINE );
192  editor.setDescription( "New Tag" );
193  editor.insert( firstSinceTime, firstPayloadId );
194  editor.flush();
195  myrecord.m_isNewTag=false;
196  //if(withlogging){
197  // std::string destconnect=m_session.connectionString();
198  // cond::UserLogInfo a=this->lookUpUserLogInfo(recordName);
199  // m_logdb->logOperationNow(a,destconnect,objClass,objToken,myrecord.m_tag,myrecord.timetypestr(),payloadIdx,firstSinceTime);
200  //}
201  }catch(const std::exception& er){
202  //if(withlogging){
203  // std::string destconnect=m_session.connectionString();
204  // cond::UserLogInfo a=this->lookUpUserLogInfo(recordName);
205  // m_logdb->logFailedOperationNow(a,destconnect,objClass,objToken,myrecord.m_tag,myrecord.timetypestr(),payloadIdx,firstSinceTime,std::string(er.what()));
206  //}
207  cond::throwException(std::string(er.what()) + " from PoolDBOutputService::createNewIOV ",
208  "PoolDBOutputService::createNewIOV");
209  }
210  scope.close();
211 }
212 
213 void
215  cond::Time_t firstSinceTime,
216  cond::Time_t firstTillTime,
217  const std::string& recordName,
218  bool withlogging){
219  cond::persistency::TransactionScope scope( m_session.transaction() );
220  Record& myrecord=this->lookUpRecord(recordName);
221  if(!myrecord.m_isNewTag) {
222  cond::throwException( myrecord.m_tag + " is not a new tag", "PoolDBOutputService::createNewIOV");
223  }
224  std::string iovToken;
225  try{
226  // FIX ME: synchronization type and description have to be passed as the other parameters?
227  cond::persistency::IOVEditor editor = m_session.createIovForPayload( firstPayloadId, myrecord.m_tag, myrecord.m_timetype, cond::OFFLINE );
228  editor.setDescription( "New Tag" );
229  editor.insert( firstSinceTime, firstPayloadId );
230  editor.flush();
231  myrecord.m_isNewTag=false;
232  }catch(const std::exception& er){
233  cond::throwException(std::string(er.what()) + " from PoolDBOutputService::createNewIOV ",
234  "PoolDBOutputService::createNewIOV");
235  }
236  scope.close();
237 }
238 
239 void
242  const std::string& recordName,
243  bool withlogging) {
244  cond::persistency::TransactionScope scope( m_session.transaction() );
245  Record& myrecord=this->lookUpRecord(recordName);
246  if( myrecord.m_isNewTag ) {
247  cond::throwException(std::string("Cannot append to non-existing tag ") + myrecord.m_tag,
248  "PoolDBOutputService::appendSinceTime");
249  }
250  //if(withlogging){
251  // if( m_logConnectionString.empty() ) {
252  // throw cond::Exception("Log db was not set from PoolDBOutputService::add");
253  // }
254  //}
255 
256  try{
257  cond::persistency::IOVEditor editor = m_session.editIov( myrecord.m_tag );
258  editor.insert( time, payloadId );
259  editor.flush();
260 
261  //if(withlogging){
262  // std::string destconnect=m_session.connectionString();
263  // cond::UserLogInfo a=this->lookUpUserLogInfo(recordName);
264  // m_logdb->logOperationNow(a,destconnect,objClass,objToken,myrecord.m_tag,myrecord.timetypestr(),payloadIdx,time);
265  //}
266  }catch(const std::exception& er){
267  //if(withlogging){
268  // std::string destconnect=m_session.connectionString();
269  // cond::UserLogInfo a=this->lookUpUserLogInfo(recordName);
270  // m_logdb->logFailedOperationNow(a,destconnect,objClass,objToken,myrecord.m_tag,myrecord.timetypestr(),payloadIdx,time,std::string(er.what()));
271  //}
273  "PoolDBOutputService::appendSinceTime");
274  }
275  scope.close();
276 }
277 
280  if (!m_dbstarted) this->initDB( false );
281  cond::persistency::TransactionScope scope( m_session.transaction() );
282  std::map<std::string,Record>::iterator it=m_callbacks.find(recordName);
283  if(it==m_callbacks.end()) {
284  cond::throwException("The record \""+recordName +"\" has not been registered.","PoolDBOutputService::lookUpRecord");
285  }
286  if( !m_session.existsIov( it->second.m_tag) ){
287  it->second.m_isNewTag=true;
288  } else {
289  it->second.m_isNewTag=false;
290  }
291  scope.close();
292  return it->second;
293 }
294 
295 //cond::UserLogInfo&
296 //cond::service::PoolDBOutputService::lookUpUserLogInfo(const std::string& recordName){
297 // std::map<std::string,cond::UserLogInfo>::iterator it=m_logheaders.find(recordName);
298 // if(it==m_logheaders.end()) throw cond::Exception("Log db was not set for record " + recordName + " from PoolDBOutputService::lookUpUserLogInfo");
299 // return it->second;
300 //}
301 
302 void
304  bool withlogging) {
305  // not fully working.. not be used for now...
306  Record & myrecord = lookUpRecord(recordName);
307  cond::persistency::TransactionScope scope( m_session.transaction() );
308 
309  if( myrecord.m_isNewTag ) {
310  cond::throwException(std::string("Cannot close non-existing tag ") + myrecord.m_tag,
311  "PoolDBOutputService::closeIOV");
312  }
313  cond::persistency::IOVEditor editor = m_session.editIov( myrecord.m_tag );
314  editor.setEndOfValidity( lastTill );
315  editor.flush();
316  scope.close();
317 }
318 
319 
320 void
322 {
323  //cond::UserLogInfo& myloginfo=this->lookUpUserLogInfo(recordName);
324  //myloginfo.provenance=dataprovenance;
325  //myloginfo.usertext=usertext;
326 }
327 
328 //
329 //const cond::Logger&
330 //cond::service::PoolDBOutputService::queryLog()const{
331 // if( !m_logdb.get() ) throw cond::Exception("Log database is not set from PoolDBOutputService::queryLog");
332 // return *m_logdb;
333 //}
334 
335 // Still required.
336 void
338  //
339  Record& record = lookUpRecord(recordName);
340  result.name=record.m_tag;
341  //use iovproxy to find out.
342  cond::persistency::IOVProxy iov = m_session.readIov( record.m_tag );
343  result.size=iov.sequenceSize();
344  if (result.size>0) {
345  cond::Iov_t last = iov.getLast();
346  result.lastInterval = cond::ValidityInterval( last.since, last.till );
347  result.lastPayloadToken = last.payloadId;
348  }
349 }
RunNumber_t run() const
Definition: EventID.h:42
const TimeTypeSpecs timeTypeSpecs[]
Definition: Time.cc:22
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
void closeIOV(Time_t lastTill, const std::string &recordName, bool withlogging=false)
void initDB(bool forReading=true)
void watchPostEndJob(PostEndJob::slot_type const &iSlot)
Time_t beginValue
Definition: Time.h:45
void fillRecord(edm::ParameterSet &pset)
cond::persistency::Session session() const
void watchPostModule(PostModule::slot_type const &iSlot)
void watchPreProcessEvent(PreProcessEvent::slot_type const &iSlot)
Time_t since
Definition: Types.h:42
boost::uint64_t value() const
size_t size
Definition: Types.h:63
std::pair< Time_t, Time_t > ValidityInterval
Definition: Time.h:19
void setDescription(const std::string &description)
Definition: IOVEditor.cc:111
void preBeginLumi(const edm::LuminosityBlockID &, const edm::Timestamp &)
void watchPreModule(PreModule::slot_type const &iSlot)
void setParameters(const edm::ParameterSet &connectionPset)
std::string tag(const std::string &recordName)
std::string name
Definition: Types.h:59
cond::ValidityInterval lastInterval
Definition: Types.h:61
void appendSinceTime(T *payloadObj, cond::Time_t sinceTime, const std::string &recordName, bool withlogging=false)
unsigned long long Time_t
Definition: Time.h:16
vector< ParameterSet > Parameters
TimeType timeTypeFromName(const std::string &name)
Definition: Time.cc:24
tuple iov
Definition: o2o.py:307
bool isNewTagRequest(const std::string &recordName)
Record & lookUpRecord(const std::string &recordName)
tuple result
Definition: query.py:137
Hash payloadId
Definition: Types.h:44
cond::persistency::Session m_session
void createNewIOV(T *firstPayloadObj, cond::Time_t firstSinceTime, cond::Time_t firstTillTime, const std::string &recordName, bool withlogging=false)
void setLogHeaderForRecord(const std::string &recordName, const std::string &provenance, const std::string &usertext)
void postModule(const edm::ModuleDescription &desc)
void insert(cond::Time_t since, const cond::Hash &payloadHash, bool checkType=false)
Definition: IOVEditor.cc:129
void throwException(std::string const &message, std::string const &methodName)
Definition: Exception.cc:17
tuple editor
Definition: idDealer.py:73
void preModule(const edm::ModuleDescription &desc)
void tagInfo(const std::string &recordName, cond::TagInfo_t &result)
std::string lastPayloadToken
Definition: Types.h:62
void watchPreBeginLumi(PreBeginLumi::slot_type const &iSlot)
void setEndOfValidity(cond::Time_t validity)
Definition: IOVEditor.cc:100
std::map< std::string, Record > m_callbacks
volatile std::atomic< bool > shutdown_flag false
Time_t endValue
Definition: Time.h:46
void preEventProcessing(const edm::EventID &evtID, const edm::Timestamp &iTime)
TimeValue_t value() const
Definition: Timestamp.h:56
PoolDBOutputService(const edm::ParameterSet &iConfig, edm::ActivityRegistry &iAR)
Time_t till
Definition: Types.h:43