IoComponentMgr Class Reference

#include <src/component/IoComponentMgr.h>

Inheritance diagram for IoComponentMgr:
Collaboration diagram for IoComponentMgr:

Classes

struct  IoComponentEntry
 

Public Member Functions

 IoComponentMgr (const std::string &name, ISvcLocator *pSvcLocator)
 Constructor with parameters: More...
 
virtual ~IoComponentMgr ()
 Destructor: More...
 
void handle (const Incident &)
 
virtual bool io_hasitem (IIoComponent *iocomponent) const
 : check if the registry contains a given IIoComponent More...
 
virtual bool io_contains (IIoComponent *iocomponent, const std::string &fname) const
 : check if the registry contains a given IIoComponent and that component had More...
 
virtual StatusCode io_register (IIoComponent *iocomponent)
 : allow a IIoComponent to register itself with this manager so appropriate actions can be taken when e.g. More...
 
virtual StatusCode io_register (IIoComponent *iocomponent, IIoComponentMgr::IoMode::Type iomode, const std::string &fname, const std::string &pfn)
 : allow a IIoComponent to register itself with this manager so appropriate actions can be taken when e.g. More...
 
virtual StatusCode io_update (IIoComponent *iocomponent, const std::string &old_fname, const std::string &new_fname)
 : allow a IIoComponent to update the contents of the registry with a new file name More...
 
virtual StatusCode io_update (IIoComponent *iocomponent, const std::string &work_dir)
 : allow a IIoComponent to update the contents of the registry with a new work directory More...
 
virtual StatusCode io_update_all (const std::string &work_dir)
 : Update all IIoComponents with a new work directory More...
 
virtual StatusCode io_retrieve (IIoComponent *iocomponent, std::string &fname)
 : retrieve the new filename for a given IIoComponent and More...
 
virtual StatusCode io_reinitialize ()
 : reinitialize the I/O subsystem. More...
 
virtual StatusCode io_finalize ()
 : finalize the I/O subsystem. More...
 
virtual StatusCode initialize ()
 Gaudi Service Implementation. More...
 
virtual StatusCode finalize ()
 
- Public Member Functions inherited from extends< BASE, Interfaces >
void * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast. More...
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface. More...
 
std::vector< std::string > getInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
 ~extends () override=default
 Virtual destructor. More...
 
void * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast. More...
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface. More...
 
std::vector< std::string > getInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
 ~extends () override=default
 Virtual destructor. More...
 
- Public Member Functions inherited from extend_interfaces< Interfaces...>
 ~extend_interfaces () override=default
 Virtual destructor. More...
 
 ~extend_interfaces () override=default
 Virtual destructor. More...
 

Private Types

typedef std::map< std::string, IIoComponent * > IoRegistry_t
 
typedef std::list< IIoComponent * > IoStack_t
 
typedef std::multimap< IIoComponent *, IoComponentEntryIoDict_t
 
typedef IoDict_t::const_iterator iodITR
 

Private Member Functions

 IoComponentMgr ()
 Default constructor: More...
 
bool findComp (IIoComponent *, const std::string &, iodITR &) const
 
bool findComp (IIoComponent *, std::pair< iodITR, iodITR > &) const
 
bool findComp (const std::string &, std::pair< iodITR, iodITR > &) const
 
std::string list () const
 

Private Attributes

MsgStream m_log
 
IoRegistry_t m_ioregistry
 Registry of IIoComponents. More...
 
IoStack_t m_iostack
 Stack of IIoComponents to properly handle order of registration. More...
 
IoDict_t m_cdict
 
std::string m_dict_location
 location of the python dictionary More...
 

Additional Inherited Members

- Public Types inherited from extends< BASE, Interfaces >
typedef extends base_class
 Typedef to this class. More...
 
typedef extend_interfaces< Interfaces...> extend_interfaces_base
 Typedef to the base of this class. More...
 
typedef extends base_class
 Typedef to this class. More...
 
typedef extend_interfaces< Interfaces...> extend_interfaces_base
 Typedef to the base of this class. More...
 
- Public Types inherited from extend_interfaces< Interfaces...>
using ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids...>::type
 take union of the ext_iids of all Interfaces... More...
 
using ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids...>::type
 take union of the ext_iids of all Interfaces... More...
 

Detailed Description

Definition at line 28 of file IoComponentMgr.h.

Member Typedef Documentation

typedef std::multimap<IIoComponent*, IoComponentEntry > IoComponentMgr::IoDict_t
private

Definition at line 194 of file IoComponentMgr.h.

typedef IoDict_t::const_iterator IoComponentMgr::iodITR
private

Definition at line 195 of file IoComponentMgr.h.

typedef std::map<std::string, IIoComponent*> IoComponentMgr::IoRegistry_t
private

Definition at line 184 of file IoComponentMgr.h.

typedef std::list<IIoComponent*> IoComponentMgr::IoStack_t
private

Definition at line 188 of file IoComponentMgr.h.

Constructor & Destructor Documentation

IoComponentMgr::IoComponentMgr ( const std::string &  name,
ISvcLocator pSvcLocator 
)

Constructor with parameters:

Definition at line 49 of file IoComponentMgr.cpp.

51 : base_class(name,svc), m_log(msgSvc(), name )
52 {
53  //
54  // Property declaration
55  //
56  //declareProperty( "Property", m_nProperty );
57 
58 // declareProperty ("Registry",
59 // m_dict_location = "GaudiMP.IoRegistry.registry",
60 // "Location of the python dictionary holding the "
61 // "associations: \n"
62 // " {component-name:{ 'old-fname' : ['io','new-fname'] }}\n"
63 // "\nSyntax: <python-module>.<python-module>.<fct-name> \n"
64 // " where fct-name is a function returning the wanted "
65 // " dictionary.");
66 }
extends base_class
Typedef to this class.
Definition: extends.h:14
IoComponentMgr::~IoComponentMgr ( )
virtual

Destructor:

Definition at line 70 of file IoComponentMgr.cpp.

71 {
72 }
IoComponentMgr::IoComponentMgr ( )
private

Default constructor:

Member Function Documentation

StatusCode IoComponentMgr::finalize ( )
virtual

Definition at line 102 of file IoComponentMgr.cpp.

102  {
103  m_log << MSG::DEBUG << "--> finalize()" << endmsg;
104 
105  return StatusCode::SUCCESS;
106 }
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
bool IoComponentMgr::findComp ( IIoComponent c,
const std::string &  f,
iodITR itr 
) const
private

Definition at line 480 of file IoComponentMgr.cpp.

481  {
482 
483  pair<iodITR,iodITR> pit;
484  if (!findComp(c,pit)) {
485  itr = pit.first;
486  return false;
487  }
488  return std::any_of( pit.first, pit.second,
489  [&](IoDict_t::const_reference i)
490  { return i.second.m_oldfname == f; } );
491 
492 }
bool findComp(IIoComponent *, const std::string &, iodITR &) const
list i
Definition: ana.py:128
bool IoComponentMgr::findComp ( IIoComponent c,
std::pair< iodITR, iodITR > &  pit 
) const
private

Definition at line 497 of file IoComponentMgr.cpp.

497  {
498 
499  pit = m_cdict.equal_range(c);
500  return pit.first != pit.second;
501 
502 }
bool IoComponentMgr::findComp ( const std::string &  c,
std::pair< iodITR, iodITR > &  pit 
) const
private

Definition at line 507 of file IoComponentMgr.cpp.

508  {
509 
510  pit.first = m_cdict.end();
511  pit.second = m_cdict.end();
512 
513  auto itr = m_ioregistry.find(c);
514  return ( itr != m_ioregistry.end() ) && findComp(itr->second, pit);
515 }
tuple c
Definition: gaudirun.py:392
IoRegistry_t m_ioregistry
Registry of IIoComponents.
bool findComp(IIoComponent *, const std::string &, iodITR &) const
void IoComponentMgr::handle ( const Incident i)

Definition at line 535 of file IoComponentMgr.cpp.

535  {
536 
537  pair<iodITR,iodITR> pit;
538 
539 
540  if ( i.type() == IncidentType::BeginInputFile ) {
541 
542  const FileIncident *fi = dynamic_cast<const FileIncident*> ( &i );
543  DEBMSG << "BeginInputFile: s: " << fi->source() << " t: " << fi->type()
544  << " n: " << fi->fileName() << " g: " << fi->fileGuid()
545  << endmsg;
546 
547  if (findComp(fi->source(),pit)) {
548  DEBMSG << " found component: " << endmsg;
549  while (pit.first != pit.second) {
550  IIoComponent* c = pit.first->first;
551  IoComponentEntry e = pit.first->second;
552  DEBMSG << " c: " << c->name() << " " << e << endmsg;
553 
554  ++pit.first;
555  }
556  } else {
557  DEBMSG << " could not find component \"" << fi->source()
558  << "\"!" << endmsg;
559  }
560 
561 
562 
563  } else if ( i.type() == IncidentType::BeginOutputFile ) {
564 
565  const FileIncident *fi = dynamic_cast<const FileIncident*> ( &i );
566  DEBMSG << "BeginOutputFile: s: " << fi->source() << " t: " << fi->type()
567  << " n: " << fi->fileName() << " g: " << fi->fileGuid()
568  << endmsg;
569 
570  if (findComp(fi->source(),pit)) {
571  DEBMSG << " found component: " << endmsg;
572  while (pit.first != pit.second) {
573  IIoComponent* c = pit.first->first;
574  IoComponentEntry e = pit.first->second;
575  DEBMSG << " c: " << c->name() << " " << e << endmsg;
576 
577  ++pit.first;
578  }
579  } else {
580  DEBMSG << " could not find component \"" << fi->source()
581  << "\"!" << endmsg;
582  }
583 
584  }
585 
586 }
tuple c
Definition: gaudirun.py:392
This class is the FileIncident.
Definition: FileIncident.h:17
const std::string & type() const
Access to the incident type.
Definition: Incident.h:34
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
const std::string & source() const
Access to the source of the incident.
Definition: Incident.h:40
#define DEBMSG
virtual const std::string & name() const =0
Retrieve the name of the instance.
bool findComp(IIoComponent *, const std::string &, iodITR &) const
const std::string BeginOutputFile
a new output file has been created
Definition: Incident.h:72
const std::string & fileGuid() const
Definition: FileIncident.h:65
const std::string & fileName() const
Definition: FileIncident.h:64
list i
Definition: ana.py:128
const std::string BeginInputFile
a new input file has been started
Definition: Incident.h:77
StatusCode IoComponentMgr::initialize ( )
virtual

Gaudi Service Implementation.

Definition at line 77 of file IoComponentMgr.cpp.

77  {
78  m_log << MSG::DEBUG << "--> initialize()" << endmsg;
79 
80  if ( Service::initialize().isFailure() ) {
81  m_log << MSG::ERROR << "Unable to initialize Service base class" << endmsg;
82  return StatusCode::FAILURE;
83  }
84  m_log.setLevel( m_outputLevel.value() );
85 
86  IIncidentSvc* p_incSvc(0);
87 
88  if (service("IncidentSvc", p_incSvc, true).isFailure()) {
89  m_log << MSG::ERROR << "unable to get the IncidentSvc" << endmsg;
90  return StatusCode::FAILURE;
91  } else {
92  p_incSvc->addListener( this, IncidentType::BeginOutputFile, 100, true);
93  p_incSvc->addListener( this, IncidentType::BeginInputFile, 100, true);
94  }
95 
96  return StatusCode::SUCCESS;
97 }
StatusCode initialize() override
Definition: Service.cpp:62
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
const std::string BeginOutputFile
a new output file has been created
Definition: Incident.h:72
void setLevel(int level)
Update outputlevel.
Definition: MsgStream.h:106
The interface implemented by the IncidentSvc service.
Definition: IIncidentSvc.h:21
const std::string BeginInputFile
a new input file has been started
Definition: Incident.h:77
bool IoComponentMgr::io_contains ( IIoComponent iocomponent,
const std::string &  fname 
) const
virtual

: check if the registry contains a given IIoComponent and that component had

Parameters
<tt>fname</tt>as a filename

Definition at line 129 of file IoComponentMgr.cpp.

131 {
132  m_log << MSG::DEBUG << "--> io_contains()" << endmsg;
133  if ( 0 == iocomponent ) {
134  return false;
135  }
136  const std::string& ioname = iocomponent->name();
137 
138  DEBMSG << "io_contains: c: " << ioname << " f: " << fname << endmsg;
139 
140  pair<iodITR,iodITR> fit = m_cdict.equal_range(iocomponent);
141  if (fit.first == fit.second) {
142  return false;
143  } else {
144  iodITR it;
145  for (it=fit.first; it != fit.second; ++it) {
146  IoComponentEntry ioe = it->second;
147  DEBMSG << " " << ioe << endmsg;
148  if (ioe.m_oldfname == "") {
149  m_log << MSG::ERROR << "IIoComponent " << ioname
150  << " has empty old filename" << endmsg;
151  return false;
152  } else if (ioe.m_oldfname == fname) {
153  return true;
154  }
155  }
156  }
157 
158  return false;
159 }
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
IoDict_t::const_iterator iodITR
#define DEBMSG
virtual const std::string & name() const =0
Retrieve the name of the instance.
StatusCode IoComponentMgr::io_finalize ( )
virtual

: finalize the I/O subsystem.

Hook to allow to e.g. give a chance to I/O subsystems to merge output files. Not sure how to do this correctly though...

Definition at line 448 of file IoComponentMgr.cpp.

449 {
450 
451  m_log << MSG::DEBUG << "--> io_finalize()" << endmsg;
452  m_log << MSG::DEBUG << "finalizing I/O subsystem..." << endmsg;
453 
454  if (m_log.level() <= MSG::DEBUG) {
455  m_log << MSG::DEBUG << "Listing all monitored entries: " << std::endl;
456  DEBMSG << list() << endmsg;
457  }
458 
459  bool allgood = true;
460  for ( IoStack_t::iterator io = m_iostack.begin(), ioEnd = m_iostack.end();
461  io != ioEnd;
462  ++io ) {
463  m_log << MSG::DEBUG << " [" << (*io)->name() << "]->io_finalize()..."
464  << endmsg;
465  if ( !(*io)->io_finalize().isSuccess() ) {
466  allgood = false;
467  m_log << MSG::ERROR << "problem in [" << (*io)->name()
468  << "]->io_finalize() !" << endmsg;
469  }
470  }
471 
472  return allgood
475 }
MSG::Level level()
Retrieve output level.
Definition: MsgStream.h:112
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
#define DEBMSG
std::string list() const
IoStack_t m_iostack
Stack of IIoComponents to properly handle order of registration.
bool IoComponentMgr::io_hasitem ( IIoComponent iocomponent) const
virtual

: check if the registry contains a given IIoComponent

Definition at line 113 of file IoComponentMgr.cpp.

113  {
114  DEBMSG << "--> io_hasitem()" << endmsg;
115  if ( 0 == iocomponent ) {
116  return false;
117  }
118  const std::string& ioname = iocomponent->name();
119  IoRegistry_t::const_iterator io = m_ioregistry.find (ioname);
120  return io != m_ioregistry.end();
121 }
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
IoRegistry_t m_ioregistry
Registry of IIoComponents.
#define DEBMSG
virtual const std::string & name() const =0
Retrieve the name of the instance.
StatusCode IoComponentMgr::io_register ( IIoComponent iocomponent)
virtual

: allow a IIoComponent to register itself with this manager so appropriate actions can be taken when e.g.

a fork(2) has been issued (this is usually handled by calling IIoComponent::io_reinit on every registered component)

Definition at line 170 of file IoComponentMgr.cpp.

171 {
172  if ( !iocomponent ) {
173  m_log << MSG::ERROR
174  << "io_register (component) received a NULL pointer !" << endmsg;
175  return StatusCode::FAILURE;
176  }
177  const std::string& ioname = iocomponent->name();
178  DEBMSG << "--> io_register(" << ioname << ")" << endmsg;
179  auto itr = m_ioregistry.find (ioname);
180  if ( itr == m_ioregistry.end() ) {
181  DEBMSG << " registering IoComponent \"" << ioname << "\"" << endmsg;
182  iocomponent->addRef(); // ownership...
183  m_ioregistry[ioname] = iocomponent;
184  m_iostack.push_back (iocomponent);
185  } else {
186  m_log << MSG::INFO << "IoComponent[" << iocomponent->name()
187  <<"] already registered @" << (void*)itr->second << endmsg;
188  }
189  return StatusCode::SUCCESS;
190 }
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
IoRegistry_t m_ioregistry
Registry of IIoComponents.
#define DEBMSG
virtual const std::string & name() const =0
Retrieve the name of the instance.
virtual unsigned long addRef()=0
Increment the reference count of Interface instance.
IoStack_t m_iostack
Stack of IIoComponents to properly handle order of registration.
StatusCode IoComponentMgr::io_register ( IIoComponent iocomponent,
IIoComponentMgr::IoMode::Type  iomode,
const std::string &  fname,
const std::string &  pfn 
)
virtual

: allow a IIoComponent to register itself with this manager so appropriate actions can be taken when e.g.

a fork(2) has been issued (this is usually handled by calling IIoComponent::io_reinit on every registered component)

Definition at line 201 of file IoComponentMgr.cpp.

205 {
206  if ( 0 == iocomponent ) {
207  return StatusCode::FAILURE;
208  }
209  const std::string& ioname = iocomponent->name();
210 
211  DEBMSG << "--> io_register(" << ioname << ","
212  << ( (iomode== IIoComponentMgr::IoMode::READ) ? "R" : "W" )
213  << "," << fname << ")" << endmsg;
214 
215  if ( !io_hasitem (iocomponent) ) {
216  if ( !io_register (iocomponent).isSuccess() ) {
217  m_log << MSG::ERROR
218  << "could not register component [" << iocomponent->name() << "] "
219  << "with the I/O component manager !"
220  << endmsg;
221  return StatusCode::FAILURE;
222  }
223  }
224 
225  pair<iodITR,iodITR> fit = m_cdict.equal_range(iocomponent);
226  if (fit.first != fit.second) {
227  for (iodITR it=fit.first; it != fit.second; ++it) {
228  IoComponentEntry ioe = it->second;
229  if (ioe.m_oldfname == fname) {
230  if (ioe.m_iomode == iomode) {
231  m_log << MSG::INFO << "IoComponent " << ioname
232  << " has already had file " << fname
233  << " registered with i/o mode " << iomode << endmsg;
234  return StatusCode::SUCCESS;
235  } else {
236  m_log << MSG::WARNING << "IoComponent " << ioname
237  << " has already had file " << fname
238  << " registered with a different i/o mode " << ioe.m_iomode
239  << " - now trying " << iomode << endmsg;
240  }
241  }
242  }
243  }
244 
245  // We need to take into account that boost::filesystem::absolute() does not
246  // work for files read from eos, i.e. starting with "root:"
247  std::string tmp_name = pfn.empty()?fname:pfn;
248  bool from_eos = tmp_name.find("root:")==0;
249  IoComponentEntry ioc(fname,(from_eos?tmp_name:boost::filesystem::absolute(tmp_name).string()),iomode);
250  m_cdict.insert( pair<IIoComponent*, IoComponentEntry>(iocomponent, ioc) );
251 
252  return StatusCode::SUCCESS;
253 }
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
IoDict_t::const_iterator iodITR
#define DEBMSG
virtual const std::string & name() const =0
Retrieve the name of the instance.
virtual bool io_hasitem(IIoComponent *iocomponent) const
: check if the registry contains a given IIoComponent
virtual StatusCode io_register(IIoComponent *iocomponent)
: allow a IIoComponent to register itself with this manager so appropriate actions can be taken when ...
StatusCode IoComponentMgr::io_reinitialize ( )
virtual

: reinitialize the I/O subsystem.

This effectively calls IIoComponent::io_reinit on all the registered IIoComponent.

Definition at line 306 of file IoComponentMgr.cpp.

307 {
308  m_log << MSG::DEBUG << "--> io_reinitialize()" << endmsg;
309  m_log << MSG::DEBUG << "reinitializing I/O subsystem..." << endmsg;
310 
311  if (m_log.level() <= MSG::DEBUG) {
312  m_log << MSG::DEBUG << "Listing all monitored entries: " << std::endl;
313  DEBMSG << list() << endmsg;
314  }
315 
316  bool allgood = true;
317  for ( auto& io : m_iostack ) {
318  m_log << MSG::DEBUG << " [" << io->name() << "]->io_reinit()..." << endmsg;
319  if ( !io->io_reinit().isSuccess() ) {
320  allgood = false;
321  m_log << MSG::ERROR << "problem in [" << io->name()
322  << "]->io_reinit() !" << endmsg;
323  }
324  // we are done with this guy... release it
325  io->release();
326  }
327 
328  // we are done.
329  // FIXME: shall we allow for multiple io_reinitialize ?
330  // m_iostack.clear();
331  // m_ioregistry.clear();
332  // m_cdict.clear();
333 
334  return allgood
337 }
MSG::Level level()
Retrieve output level.
Definition: MsgStream.h:112
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
#define DEBMSG
std::string list() const
IoStack_t m_iostack
Stack of IIoComponents to properly handle order of registration.
StatusCode IoComponentMgr::io_retrieve ( IIoComponent iocomponent,
std::string &  fname 
)
virtual

: retrieve the new filename for a given IIoComponent and

Parameters
<tt>fname</tt>filename
<tt>oldfname</tt>filename

Definition at line 261 of file IoComponentMgr.cpp.

263 {
264  if ( 0 == iocomponent ) {
265  return StatusCode::FAILURE;
266  }
267 
268  std::string ofname = fname;
269  const std::string& ioname = iocomponent->name();
270 
271  m_log << MSG::DEBUG << "--> io_retrieve(" << ioname << "," << fname << ")"
272  << endmsg;
273 
274  iodITR it;
275  if (!findComp(iocomponent,ofname,it)) {
276  DEBMSG << "could not find c: " << ioname << " old_f: " << ofname << endmsg;
277  return StatusCode::FAILURE;
278  } else {
279 
280  IoDict_t::iterator it;
281  for (it = m_cdict.equal_range(iocomponent).first;
282  it != m_cdict.equal_range(iocomponent).second;
283  ++it) {
284 
285  if (it->second.m_oldfname == ofname) {
286  DEBMSG << "retrieving new name for the component " << iocomponent->name()
287  << " old name: " << ofname
288  << ", new name: " << it->second.m_newfname << endmsg;
289  fname = it->second.m_newfname;
290  return StatusCode::SUCCESS;
291  }
292  }
293  }
294 
295  DEBMSG << "Unexpected error! Unable to find entry in the dictionary corresponding to old filename: " << ofname << endmsg;
296  return StatusCode::FAILURE;
297 }
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
IoDict_t::const_iterator iodITR
#define DEBMSG
virtual const std::string & name() const =0
Retrieve the name of the instance.
bool findComp(IIoComponent *, const std::string &, iodITR &) const
StatusCode IoComponentMgr::io_update ( IIoComponent iocomponent,
const std::string &  old_fname,
const std::string &  new_fname 
)
virtual

: allow a IIoComponent to update the contents of the registry with a new file name

Definition at line 342 of file IoComponentMgr.cpp.

343  {
344 
345  DEBMSG << "--> io_update(" << ioc->name() << ","
346  << old_fname << "," << new_fname << ")" << endmsg;
347 
348  IoDict_t::iterator it;
349  for (it = m_cdict.equal_range(ioc).first;
350  it != m_cdict.equal_range(ioc).second;
351  ++it) {
352 
353  if (it->second.m_oldfname == old_fname) {
354  DEBMSG << "updating " << ioc->name() << " f: " << old_fname << " -> "
355  << new_fname << endmsg;
356  it->second.m_newfname = new_fname;
357  return StatusCode::SUCCESS;
358  }
359  }
360 
361  return StatusCode::FAILURE;
362 
363 }
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
#define DEBMSG
StatusCode IoComponentMgr::io_update ( IIoComponent iocomponent,
const std::string &  work_dir 
)
virtual

: allow a IIoComponent to update the contents of the registry with a new work directory

Definition at line 368 of file IoComponentMgr.cpp.

368  {
369 
370  DEBMSG << "--> io_update(" << ioc->name() << ","
371  << work_dir << ")" << endmsg;
372 
373  IoDict_t::iterator it;
374  for (it = m_cdict.equal_range(ioc).first;
375  it != m_cdict.equal_range(ioc).second;
376  ++it) {
377 
378  switch(it->second.m_iomode) {
380  {
381  it->second.m_newfname = it->second.m_oldabspath;
382  break;
383  }
385  {
386  boost::filesystem::path oldPath(it->second.m_oldfname);
387  if(oldPath.is_relative() &&
388  oldPath.filename()==oldPath.relative_path()) {
389 
390  // Only file name was provided for writing. This is the usual mode of operation
391  // ***
392  // NB. In such cases it would make sense to set newfname=oldfname, however this will break
393  // existing client codes, which assume that newfname contains "/"
394  // Thus we set newfname=workdir/oldfname
395  // ***
396 
397  boost::filesystem::path newfname(work_dir);
398  newfname /= oldPath;
399  it->second.m_newfname = newfname.string();
400  }
401  else {
402  // New name should be the old absolute path
403  it->second.m_newfname = it->second.m_oldabspath;
404  }
405 
406  break;
407  }
408  default:
409  {
410  // Don't know how to deal with either RW or INVALID
411  m_log << MSG::ERROR << "Unable to update IoComponent for the mode " << it->second.m_iomode << endmsg;
412  return StatusCode::FAILURE;
413  }
414  }
415 
416  } // for
417 
418  return StatusCode::SUCCESS;
419 
420 }
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
list path
Definition: __init__.py:15
#define DEBMSG
StatusCode IoComponentMgr::io_update_all ( const std::string &  work_dir)
virtual

: Update all IIoComponents with a new work directory

Definition at line 425 of file IoComponentMgr.cpp.

426 {
427  DEBMSG << "-->io_update_all for the directory " << work_dir << endmsg;
428  bool allgood = true;
429  for ( IoStack_t::iterator io = m_iostack.begin(), ioEnd = m_iostack.end();
430  io != ioEnd;
431  ++io ) {
432  if ( !io_update(*io,work_dir).isSuccess() ) {
433  allgood = false;
434  m_log << MSG::ERROR << "problem in [" << (*io)->name()
435  << "]->io_update() !" << endmsg;
436  }
437  }
438  return allgood ? StatusCode::SUCCESS : StatusCode::FAILURE;
439 }
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
#define DEBMSG
virtual StatusCode io_update(IIoComponent *iocomponent, const std::string &old_fname, const std::string &new_fname)
: allow a IIoComponent to update the contents of the registry with a new file name ...
IoStack_t m_iostack
Stack of IIoComponents to properly handle order of registration.
std::string IoComponentMgr::list ( ) const
private

Definition at line 520 of file IoComponentMgr.cpp.

520  {
521 
522  ostringstream ost;
523 
524  ost << "Listing all IoComponents (" << m_cdict.size() << "): " << endl;
525  for (const auto& i : m_cdict ) {
526  ost << " " << i.first->name() << " " << i.second << endl;
527  }
528 
529  return ost.str();
530 }
list i
Definition: ana.py:128

Member Data Documentation

IoDict_t IoComponentMgr::m_cdict
private

Definition at line 197 of file IoComponentMgr.h.

std::string IoComponentMgr::m_dict_location
private

location of the python dictionary

Definition at line 200 of file IoComponentMgr.h.

IoRegistry_t IoComponentMgr::m_ioregistry
private

Registry of IIoComponents.

Definition at line 186 of file IoComponentMgr.h.

IoStack_t IoComponentMgr::m_iostack
private

Stack of IIoComponents to properly handle order of registration.

Definition at line 190 of file IoComponentMgr.h.

MsgStream IoComponentMgr::m_log
mutableprivate

Definition at line 182 of file IoComponentMgr.h.


The documentation for this class was generated from the following files: