Loading [MathJax]/jax/output/HTML-CSS/config.js
The Gaudi Framework  v30r0 (c919700c)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
FileMgr Class Reference

#include <src/FileMgr/FileMgr.h>

Inheritance diagram for FileMgr:
Collaboration diagram for FileMgr:

Public Member Functions

 ~FileMgr () override
 
StatusCode initialize () override
 
StatusCode finalize () override
 
void handle (const Incident &) override
 
StatusCode regHandler (FileHdlr) override
 
StatusCode hasHandler (const IoTech &) const override
 
StatusCode deregHandler (const IoTech &) override
 
StatusCode getHandler (const IoTech &, FileHdlr &) const override
 
StatusCode getHandler (const std::string &, FileHdlr &) const override
 
int getFileAttr (const std::string &, std::vector< const FileAttr * > &) const override
 
StatusCode getFileAttr (const Fd, const FileAttr *&) const override
 
StatusCode getFileAttr (void *, const FileAttr *&) const override
 
void listHandlers () const override
 
void listFiles () const override
 
virtual void listActions () const
 
virtual void listSuppression () const
 
int getFiles (std::vector< std::string > &, bool onlyOpen=true) const override
 
int getFiles (std::vector< const Io::FileAttr * > &, bool onlyOpen=true) const override
 
int getFiles (const Io::IoTech &, std::vector< std::string > &, bool onlyOpen=true) const override
 
int getFiles (const Io::IoTech &, std::vector< const Io::FileAttr * > &, bool onlyOpen=true) const override
 
int getFiles (const Io::IoTech &, const Io::IoFlags &, std::vector< std::string > &, bool onlyOpen=true) const override
 
int getFiles (const Io::IoTech &, const Io::IoFlags &, std::vector< const Io::FileAttr * > &, bool onlyOpen=true) const override
 
int getFd (std::vector< Fd > &) const override
 
int getFd (const Io::IoTech &, std::vector< Io::Fd > &) const override
 
int getFd (const Io::IoTech &, const Io::IoFlags &, std::vector< Io::Fd > &) const override
 
const std::stringfname (const Io::Fd &) const override
 
const std::stringfname (void *) const override
 
Io::Fd fd (const std::string &) const override
 
Io::Fd fd (void *) const override
 
void * fptr (const std::string &) const override
 
void * fptr (const Io::Fd &) const override
 
int getLastError (std::string &) const override
 
Io::open_t open (const Io::IoTech &, const std::string &caller, const std::string &fname, const Io::IoFlags &, Io::Fd &fd, void *&ptr, const std::string &desc="", const bool shared=false) override
 
Io::open_t open (const Io::IoTech &, const std::string &caller, const std::string &fname, const Io::IoFlags &, Io::Fd &, const std::string &desc="", const bool shared=false) override
 
Io::open_t open (const Io::IoTech &, const std::string &caller, const std::string &fname, const Io::IoFlags &, void *&, const std::string &desc="", const bool shared=false) override
 
Io::close_t close (const Fd, const std::string &caller) override
 
Io::close_t close (void *, const std::string &caller) override
 
Io::reopen_t reopen (const Fd, const IoFlags &, const std::string &caller) override
 
Io::reopen_t reopen (void *, const IoFlags &, const std::string &caller) override
 
StatusCode regAction (Io::bfcn_action_t, const Io::Action &, const std::string &desc="") override
 
StatusCode regAction (Io::bfcn_action_t, const Io::Action &, const Io::IoTech &, const std::string &desc="") override
 
void suppressAction (const std::string &) override
 
void suppressAction (const std::string &, const Io::Action &) override
 
- Public Member Functions inherited from extends< Service, IFileMgr, IIncidentListener >
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::stringgetInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
 ~extends () override=default
 Virtual destructor. More...
 
- Public Member Functions inherited from Service
const std::stringname () const override
 Retrieve name of the service. More...
 
StatusCode configure () override
 
StatusCode initialize () override
 
StatusCode start () override
 
StatusCode stop () override
 
StatusCode finalize () override
 
StatusCode terminate () override
 
Gaudi::StateMachine::State FSMState () const override
 
Gaudi::StateMachine::State targetFSMState () const override
 
StatusCode reinitialize () override
 
StatusCode restart () override
 
StatusCode sysInitialize () override
 Initialize Service. More...
 
StatusCode sysStart () override
 Initialize Service. More...
 
StatusCode sysStop () override
 Initialize Service. More...
 
StatusCode sysFinalize () override
 Finalize Service. More...
 
StatusCode sysReinitialize () override
 Re-initialize the Service. More...
 
StatusCode sysRestart () override
 Re-initialize the Service. More...
 
 Service (std::string name, ISvcLocator *svcloc)
 Standard Constructor. More...
 
SmartIF< ISvcLocator > & serviceLocator () const override
 Retrieve pointer to service locator. More...
 
StatusCode setProperties ()
 Method for setting declared properties to the values specified for the job. More...
 
template<class T >
StatusCode service (const std::string &name, const T *&psvc, bool createIf=true) const
 Access a service by name, creating it if it doesn't already exist. More...
 
template<class T >
StatusCode service (const std::string &name, T *&psvc, bool createIf=true) const
 
template<typename IFace = IService>
SmartIF< IFace > service (const std::string &name, bool createIf=true) const
 
template<class T >
StatusCode service (const std::string &svcType, const std::string &svcName, T *&psvc) const
 Access a service by name and type, creating it if it doesn't already exist. More...
 
template<class T >
StatusCode declareTool (ToolHandle< T > &handle, std::string toolTypeAndName, bool createIf=true)
 Declare used tool. More...
 
SmartIF< IAuditorSvc > & auditorSvc () const
 The standard auditor service.May not be invoked before sysInitialize() has been invoked. More...
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 PropertyHolder ()=default
 
 ~PropertyHolder () override=default
 
Gaudi::Details::PropertyBasedeclareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, TYPE &value, const std::string &doc="none")
 Helper to wrap a regular data member and use it as a regular property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, TYPE &value, const std::string &doc="none") const
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, Gaudi::Property< TYPE, VERIFIER, HANDLERS > &prop, const std::string &doc="none")
 Declare a PropertyBase instance setting name and documentation. More...
 
Gaudi::Details::PropertyBasedeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property. More...
 
StatusCode setProperty (const Gaudi::Details::PropertyBase &p) override
 set the property form another property More...
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string More...
 
StatusCode setProperty (const std::string &n, const std::string &v) override
 set the property from name and the value More...
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value More...
 
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property More...
 
const Gaudi::Details::PropertyBasegetProperty (const std::string &name) const override
 get the property by name More...
 
StatusCode getProperty (const std::string &n, std::string &v) const override
 convert the property to the string More...
 
const std::vector< Gaudi::Details::PropertyBase * > & getProperties () const override
 get all properties More...
 
bool hasProperty (const std::string &name) const override
 Return true if we have a property with the given name. More...
 
 PropertyHolder (const PropertyHolder &)=delete
 
PropertyHolderoperator= (const PropertyHolder &)=delete
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, GaudiHandleBase &ref, const std::string &doc="none")
 Specializations for various GaudiHandles. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, GaudiHandleArrayBase &ref, const std::string &doc="none")
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, DataObjectHandleBase &ref, const std::string &doc="none")
 
- Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor. More...
 
const SmartIF< IMessageSvc > & msgSvc () const
 The standard message service. More...
 
MsgStreammsgStream () const
 Return an uninitialized MsgStream. More...
 
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts. More...
 
MsgStreamalways () const
 shortcut for the method msgStream(MSG::ALWAYS) More...
 
MsgStreamfatal () const
 shortcut for the method msgStream(MSG::FATAL) More...
 
MsgStreamerr () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamerror () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamwarning () const
 shortcut for the method msgStream(MSG::WARNING) More...
 
MsgStreaminfo () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MsgStreamdebug () const
 shortcut for the method msgStream(MSG::DEBUG) More...
 
MsgStreamverbose () const
 shortcut for the method msgStream(MSG::VERBOSE) More...
 
MsgStreammsg () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MSG::Level msgLevel () const
 get the cached level (originally extracted from the embedded MsgStream) More...
 
MSG::Level outputLevel () const __attribute__((deprecated))
 Backward compatibility function for getting the output level. More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 
- Public Member Functions inherited from extend_interfaces< Interfaces... >
 ~extend_interfaces () override=default
 Virtual destructor. More...
 

Private Types

typedef std::pair< Io::bfcn_action_t, std::stringbfcn_desc_t
 
typedef std::map< Io::Action, std::list< bfcn_desc_t > > actionMap
 
typedef std::multimap< std::string, FileAttr * > fileMap
 
typedef std::map< std::string, int > supMap
 

Private Member Functions

virtual Io::open_t open (const IoTech &, const std::string &caller, const std::string &fname, const std::string &desc, const IoFlags &, Fd &, void *&, const bool shared)
 
StatusCode execAction (Io::FileAttr *, const std::string &, const Io::Action &) const
 
StatusCode execActs (Io::FileAttr *, const std::string &, const Io::Action &, const actionMap &m) const
 
bool accessMatch (const Io::IoFlags &, const Io::IoFlags &, bool strict=false) const
 
bool isShareable (const std::string &filename, const Io::IoFlags &) const
 

Private Attributes

Gaudi::Property< std::stringm_logfile {this, "LogFile"}
 
Gaudi::Property< bool > m_printSummary {this, "PrintSummary", false}
 
Gaudi::Property< bool > m_loadRootHandler {this, "LoadROOTHandler", true}
 
Gaudi::Property< bool > m_loadPosixHandler {this, "LoadPOSIXHandler", true}
 
Gaudi::Property< std::stringm_ssl_proxy {this, "TSSL_UserProxy", "X509"}
 
Gaudi::Property< std::stringm_ssl_cert {this, "TSSL_CertDir", "X509"}
 
fileMap m_files
 
std::map< IoTech, FileHdlrm_handlers
 
std::map< Fd, FileAttr * > m_descriptors
 
std::vector< std::unique_ptr< FileAttr > > m_attr
 
std::vector< FileAttr * > m_oldFiles
 
std::map< IoTech, actionMapm_actions
 
supMap m_supMap
 
std::string m_lastErrS
 
int m_lastErr
 
boost::optional< RootFileHandlerm_rfh
 
boost::optional< POSIXFileHandlerm_pfh
 

Additional Inherited Members

- Public Types inherited from extends< Service, IFileMgr, IIncidentListener >
using base_class = extends
 Typedef to this class. More...
 
using extend_interfaces_base = extend_interfaces< Interfaces... >
 Typedef to the base of this class. More...
 
- Public Types inherited from Service
typedef Gaudi::PluginService::Factory< IService *, const std::string &, ISvcLocator * > Factory
 
- Public Types inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
using PropertyHolderImpl = PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 Typedef used to refer to this class from derived classes, as in. More...
 
- Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
using base_class = CommonMessaging
 
- 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...
 
- Protected Member Functions inherited from Service
 ~Service () override
 Standard Destructor. More...
 
int outputLevel () const
 get the Service's output level More...
 
- Protected Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
Gaudi::Details::PropertyBaseproperty (const std::string &name) const
 
- Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level setUpMessaging ()
 Set up local caches. More...
 
MSG::Level resetMessaging ()
 Reinitialize internal states. More...
 
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream. More...
 
- Protected Attributes inherited from Service
Gaudi::StateMachine::State m_state = Gaudi::StateMachine::OFFLINE
 Service state. More...
 
Gaudi::StateMachine::State m_targetState = Gaudi::StateMachine::OFFLINE
 Service state. More...
 
Gaudi::Property< int > m_outputLevel {this, "OutputLevel", MSG::NIL, "output level"}
 
Gaudi::Property< bool > m_auditInit {this, "AuditServices", false, "[[deprecated]] unused"}
 
Gaudi::Property< bool > m_auditorInitialize {this, "AuditInitialize", false, "trigger auditor on initialize()"}
 
Gaudi::Property< bool > m_auditorStart {this, "AuditStart", false, "trigger auditor on start()"}
 
Gaudi::Property< bool > m_auditorStop {this, "AuditStop", false, "trigger auditor on stop()"}
 
Gaudi::Property< bool > m_auditorFinalize {this, "AuditFinalize", false, "trigger auditor on finalize()"}
 
Gaudi::Property< bool > m_auditorReinitialize {this, "AuditReinitialize", false, "trigger auditor on reinitialize()"}
 
Gaudi::Property< bool > m_auditorRestart {this, "AuditRestart", false, "trigger auditor on restart()"}
 
SmartIF< IAuditorSvcm_pAuditorSvc
 Auditor Service. More...
 

Detailed Description

Definition at line 36 of file FileMgr.h.

Member Typedef Documentation

Definition at line 128 of file FileMgr.h.

Definition at line 127 of file FileMgr.h.

Definition at line 135 of file FileMgr.h.

typedef std::map<std::string, int> FileMgr::supMap
private

Definition at line 146 of file FileMgr.h.

Constructor & Destructor Documentation

FileMgr::~FileMgr ( )
override

Definition at line 60 of file FileMgr.cpp.

61 {
62  // Where do the new-ed FileAttr get deleted?
63  // they get pushed into m_descriptors, but m_attr is presumably
64  // where they _also_ should be pushed in order to track ownership...
65 }

Member Function Documentation

bool FileMgr::accessMatch ( const Io::IoFlags fold,
const Io::IoFlags fnew,
bool  strict = false 
) const
private

Definition at line 1211 of file FileMgr.cpp.

1212 {
1213 
1214  ON_VERBOSE
1215  verbose() << "accessMatch old: " << fold << " new: " << fnew << endmsg;
1216 
1217  return ( ( ( fold == Io::READ ) && ( fnew == Io::READ ) ) ||
1218  ( ( fold & Io::WRITE ) != 0 && ( fnew & Io::WRITE ) != 0 ) ||
1219  ( ( fold & Io::RDWR ) != 0 && ( fnew & Io::RDWR ) != 0 ) );
1220 }
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
#define ON_VERBOSE
Definition: FileMgr.cpp:9
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
Io::close_t FileMgr::close ( const Fd  ,
const std::string caller 
)
override
close_t FileMgr::close ( void *  vp,
const std::string caller 
)
override

Definition at line 513 of file FileMgr.cpp.

514 {
515 
516  // return codes:
517  // < 0 : error condition
518  // 0 : actual close of one file
519  // > 0 : shared file, removed from list, no actual close, returns
520  // number of shared files still open.
521 
522  ON_VERBOSE
523  verbose() << "close(" << vp << ")" << endmsg;
524 
525  close_t r = -1;
526 
527  auto itr = std::find_if( std::begin( m_files ), std::end( m_files ),
528  [&]( fileMap::const_reference i ) { return i.second->fptr() == vp; } );
529 
530  if ( itr == m_files.end() ) {
531  error() << "unknown file ptr \"" << vp << "\" when calling close()" << endmsg;
532  return r;
533  }
534 
535  IoTech tech = itr->second->tech();
536 
537  FileHdlr fh;
538 
539  if ( getHandler( tech, fh ).isFailure() ) {
540  return r;
541  }
542  if ( !fh.b_closeP_fcn ) {
543  error() << "no close(" << tech << ",void*) function registered" << endmsg;
544  return -1;
545  }
546 
547  FileAttr* fa = itr->second;
548 
549  // find how many times this file is open
551 
552  int i =
553  std::count_if( fitr.first, fitr.second, [&]( fileMap::const_reference f ) { return f.second->fptr() == vp; } );
554 
555  ON_VERBOSE
556  verbose() << " ref count: " << i << endmsg;
557 
558  if ( i > 1 && fa->isShared() ) {
559  // file open multiple times in shared access. don't do the actual close
560  ON_DEBUG
561  debug() << "closing file " << fa->name() << " opened " << i << " times with fptr " << vp << endmsg;
562  m_files.erase( itr );
563 
564  r = i - 1;
565 
566  } else if ( i == 1 || ( i > 1 && !fa->isShared() ) ) {
567  ON_DEBUG
568  debug() << "closing: " << *fa << endmsg;
569 
570  try {
571  r = fh.b_closeP_fcn( vp );
572  } catch ( const std::bad_function_call& err ) {
573  error() << "when calling close handler for " << tech << " on file " << fa->name() << " caught " << err.what()
574  << endmsg;
575  execAction( fa, caller, CLOSE_ERR ).ignore();
576  return -1;
577  } catch ( ... ) {
578  error() << "when calling close handler for " << tech << " on file " << fa->name()
579  << " caught an unknown exception." << endmsg;
580  execAction( fa, caller, CLOSE_ERR ).ignore();
581  return -1;
582  }
583 
584  if ( r < 0 ) {
585  warning() << "close of file with ptr \"" << vp << "\", name: \"" << fa->name() << "\", tech: \"" << tech
586  << "\" failed" << endmsg;
587 
588  return r;
589  }
590 
591  m_files.erase( itr );
592 
593  } else {
594  // this should never happen!
595  error() << "ref count: " << i << " < 0 when closing " << fa << ". This should never happen" << endmsg;
596  return -1;
597  }
598 
599  fa->fd( -1 );
600  fa->flags( INVALID );
601  fa->isOpen( false );
602  fa->fptr( 0 );
603  m_oldFiles.push_back( fa );
604 
605  // exec all callbacks
606  if ( execAction( fa, caller, CLOSE ).isFailure() ) {
607  warning() << "at least one close callback action failed" << endmsg;
608  }
609 
610  return r;
611 }
IoTech
Definition: IFileMgr.h:157
void * fptr() const
Definition: IFileMgr.h:194
fileMap m_files
Definition: FileMgr.h:137
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
bool isOpen() const
Definition: IFileMgr.h:195
StatusCode execAction(Io::FileAttr *, const std::string &, const Io::Action &) const
Definition: FileMgr.cpp:1148
T end(T...args)
Fd fd() const
Definition: IFileMgr.h:188
MsgStream & err() const
shortcut for the method msgStream(MSG::ERROR)
const std::string & name() const
Definition: IFileMgr.h:189
T push_back(T...args)
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
bool isShared() const
Definition: IFileMgr.h:196
StatusCode getHandler(const IoTech &, FileHdlr &) const override
T erase(T...args)
bfcn_closeP_t b_closeP_fcn
Definition: IFileMgr.h:265
T count_if(T...args)
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
T find_if(T...args)
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
T begin(T...args)
#define ON_DEBUG
Definition: FileMgr.cpp:8
void ignore() const
Definition: StatusCode.h:84
IoFlags flags() const
Definition: IFileMgr.h:192
#define ON_VERBOSE
Definition: FileMgr.cpp:9
T equal_range(T...args)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
int close_t
Definition: IFileMgr.h:250
StatusCode FileMgr::deregHandler ( const IoTech )
override

Definition at line 223 of file FileMgr.cpp.

224 {
225  FileHdlr hdlr;
226 
227  auto itr = m_handlers.find( tech );
228  if ( itr == m_handlers.end() ) {
229  error() << "Can't de-register tech " << tech << " as it hasn't been registered!" << endmsg;
230  return StatusCode::FAILURE;
231  }
232 
233  m_handlers.erase( itr );
234  return StatusCode::SUCCESS;
235 }
T end(T...args)
std::map< IoTech, FileHdlr > m_handlers
Definition: FileMgr.h:138
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
T erase(T...args)
T find(T...args)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
StatusCode FileMgr::execAction ( Io::FileAttr fa,
const std::string caller,
const Io::Action a 
) const
private

Definition at line 1148 of file FileMgr.cpp.

1149 {
1150 
1151  Io::IoTech tech = fa->tech();
1152 
1153  StatusCode s1, s2;
1154 
1155  auto itr = m_actions.find( Io::UNKNOWN );
1156 
1157  if ( itr != m_actions.end() && !itr->second.empty() ) {
1158  s1 = execActs( fa, caller, a, itr->second );
1159  }
1160 
1161  itr = m_actions.find( tech );
1162  if ( itr != m_actions.end() && !itr->second.empty() ) {
1163  s2 = execActs( fa, caller, a, itr->second );
1164  }
1165 
1166  return ( s1.isFailure() || s2.isFailure() ) ? StatusCode::FAILURE : StatusCode::SUCCESS;
1167 }
IoTech
Definition: IFileMgr.h:157
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:61
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode execActs(Io::FileAttr *, const std::string &, const Io::Action &, const actionMap &m) const
Definition: FileMgr.cpp:1171
IoTech tech() const
Definition: IFileMgr.h:191
std::map< IoTech, actionMap > m_actions
Definition: FileMgr.h:144
StatusCode FileMgr::execActs ( Io::FileAttr fa,
const std::string caller,
const Io::Action a,
const actionMap m 
) const
private

Definition at line 1171 of file FileMgr.cpp.

1173 {
1174 
1175  auto mitr = m.find( a );
1176 
1177  if ( mitr == m.end() || mitr->second.empty() ) {
1178  return StatusCode::SUCCESS;
1179  }
1180 
1181  ON_DEBUG
1182  debug() << "executing " << mitr->second.size() << " " << a << " actions on " << *fa << " from " << caller << endmsg;
1183 
1184  bool fail( false );
1185 
1186  auto it2 = m_supMap.find( fa->name() );
1187  if ( it2 != m_supMap.end() ) {
1188  if ( get_bit( it2->second, a ) || get_bit( it2->second, Io::INVALID_ACTION ) ) {
1189  ON_DEBUG
1190  debug() << " --> suppressing callback action for " << a << endmsg;
1191  return StatusCode::SUCCESS;
1192  }
1193  }
1194 
1195  for ( const auto& itr : mitr->second ) {
1196 
1197  ON_DEBUG
1198  debug() << "executing " << itr.second << endmsg;
1199 
1200  if ( ( ( ( itr.first ) )( fa, caller ) ).isFailure() ) {
1201  warning() << "execution of " << itr.second << " on " << *fa << " failed during " << a << " action" << endmsg;
1202  fail = true;
1203  }
1204  }
1205 
1206  return fail ? StatusCode::FAILURE : StatusCode::SUCCESS;
1207 }
supMap m_supMap
Definition: FileMgr.h:147
T end(T...args)
const std::string & name() const
Definition: IFileMgr.h:189
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
constexpr double m
Definition: SystemOfUnits.h:94
T find(T...args)
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
#define ON_DEBUG
Definition: FileMgr.cpp:8
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
Io::Fd FileMgr::fd ( const std::string fname) const
override

Definition at line 986 of file FileMgr.cpp.

987 {
988 
989  auto fitr = m_files.equal_range( fname );
990  auto itr = std::find_if( fitr.first, fitr.second, []( fileMap::const_reference f ) { return f.second->fd() != -1; } );
991  return itr != fitr.second ? itr->second->fd() : -1;
992 }
fileMap m_files
Definition: FileMgr.h:137
T find_if(T...args)
T equal_range(T...args)
Io::Fd FileMgr::fd ( void *  fptr) const
override

Definition at line 996 of file FileMgr.cpp.

997 {
998 
999  auto itr = std::find_if( m_files.begin(), m_files.end(),
1000  [&]( fileMap::const_reference f ) { return f.second->fptr() == fptr; } );
1001  return itr != m_files.end() ? itr->second->fd() : -1;
1002 }
void * fptr() const
Definition: IFileMgr.h:194
fileMap m_files
Definition: FileMgr.h:137
T end(T...args)
Fd fd() const
Definition: IFileMgr.h:188
T find_if(T...args)
T begin(T...args)
void * fptr(const std::string &) const override
Definition: FileMgr.cpp:1006
StatusCode FileMgr::finalize ( )
override

Definition at line 126 of file FileMgr.cpp.

127 {
128  ON_VERBOSE
129  verbose() << "FileMgr::finalize()" << endmsg;
130 
131  if ( m_printSummary || msgLevel( MSG::DEBUG ) ) {
132  listHandlers();
133  listFiles();
134  listActions();
135  listSuppression();
136  }
137 
138  if ( !m_files.empty() ) {
139  auto& log = warning();
140  log << "At finalize, the following files remained open:" << endl;
141  for ( const auto& itr : m_files ) log << *( itr.second ) << endl;
142  log << endmsg;
143  }
144 
145  if ( m_logfile.value() != "" ) {
146  std::ofstream ofs;
147  ofs.open( m_logfile.value().c_str() );
148  if ( !ofs ) {
149  error() << "Unable to open output file \"" << m_logfile.value() << "\" for writing" << endmsg;
150  } else {
151  ON_DEBUG
152  debug() << "Saving log to \"" << m_logfile.value() << "\"" << endmsg;
153  for ( const auto& itr : m_files ) {
154  ofs << itr.second->name() << " " << itr.second->tech() << " " << itr.second->desc() << " "
155  << itr.second->iflags() << endl;
156  }
157 
158  set<FileAttr> fs;
159  for ( const auto& it2 : m_oldFiles ) fs.insert( *it2 );
160  for ( const auto& it3 : fs ) {
161  ofs << it3.name() << " " << it3.tech() << " " << it3.desc() << " " << it3.iflags()
162  << ( it3.isShared() ? " SHARED" : "" ) << endl;
163  }
164  ofs.close();
165  }
166  }
167 
168  // cleanup FileAttrs
169  m_attr.clear();
170 
171  m_rfh.reset();
172  m_pfh.reset();
173 
174  StatusCode status = Service::finalize();
175 
176  ON_DEBUG
177  if ( status.isSuccess() ) debug() << "Service finalised successfully" << endmsg;
178 
179  return status;
180 }
std::vector< std::unique_ptr< FileAttr > > m_attr
Definition: FileMgr.h:140
void listHandlers() const override
Definition: FileMgr.cpp:1088
void listFiles() const override
Definition: FileMgr.cpp:1026
T empty(T...args)
T open(T...args)
StatusCode finalize() override
Definition: Service.cpp:174
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:50
fileMap m_files
Definition: FileMgr.h:137
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
T endl(T...args)
virtual void listActions() const
Definition: FileMgr.cpp:1120
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
STL class.
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
T close(T...args)
boost::optional< RootFileHandler > m_rfh
Definition: FileMgr.h:152
T clear(T...args)
T insert(T...args)
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
STL class.
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
virtual void listSuppression() const
Definition: FileMgr.cpp:1242
boost::optional< POSIXFileHandler > m_pfh
Definition: FileMgr.h:153
Gaudi::Property< bool > m_printSummary
Definition: FileMgr.h:116
#define ON_DEBUG
Definition: FileMgr.cpp:8
Gaudi::Property< std::string > m_logfile
Definition: FileMgr.h:115
MSG::Level msgLevel() const
get the cached level (originally extracted from the embedded MsgStream)
#define ON_VERBOSE
Definition: FileMgr.cpp:9
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
const std::string & FileMgr::fname ( const Io::Fd fd) const
override

Definition at line 966 of file FileMgr.cpp.

967 {
968 
969  auto itr = std::find_if( std::begin( m_files ), std::end( m_files ),
970  [&]( fileMap::const_reference f ) { return f.second->fd() == fd; } );
971  return ( itr != std::end( m_files ) ) ? itr->second->name() : s_empty;
972 }
fileMap m_files
Definition: FileMgr.h:137
T end(T...args)
Io::Fd fd(const std::string &) const override
Definition: FileMgr.cpp:986
T find_if(T...args)
T begin(T...args)
const std::string & FileMgr::fname ( void *  vp) const
override

Definition at line 976 of file FileMgr.cpp.

977 {
978 
979  auto itr = std::find_if( m_files.begin(), m_files.end(),
980  [&]( fileMap::const_reference f ) { return f.second->fptr() == vp; } );
981  return itr != m_files.end() ? itr->second->name() : s_empty;
982 }
void * fptr() const
Definition: IFileMgr.h:194
fileMap m_files
Definition: FileMgr.h:137
T end(T...args)
const std::string & name() const
Definition: IFileMgr.h:189
T find_if(T...args)
T begin(T...args)
void * FileMgr::fptr ( const std::string fname) const
override

Definition at line 1006 of file FileMgr.cpp.

1007 {
1008  auto fitr = m_files.equal_range( fname );
1009  auto itr =
1010  std::find_if( fitr.first, fitr.second, []( fileMap::const_reference f ) -> bool { return f.second->fptr(); } );
1011  return itr != fitr.second ? itr->second->fptr() : nullptr;
1012 }
fileMap m_files
Definition: FileMgr.h:137
T find_if(T...args)
T equal_range(T...args)
void * FileMgr::fptr ( const Io::Fd fd) const
override

Definition at line 1016 of file FileMgr.cpp.

1017 {
1018 
1019  auto itr = std::find_if( m_files.begin(), m_files.end(),
1020  [&]( fileMap::const_reference f ) { return f.second->fd() == fd; } );
1021  return itr != m_files.end() ? itr->second->fptr() : nullptr;
1022 }
void * fptr() const
Definition: IFileMgr.h:194
fileMap m_files
Definition: FileMgr.h:137
T end(T...args)
Fd fd() const
Definition: IFileMgr.h:188
Io::Fd fd(const std::string &) const override
Definition: FileMgr.cpp:986
T find_if(T...args)
T begin(T...args)
int FileMgr::getFd ( std::vector< Fd > &  ) const
override
int FileMgr::getFd ( const Io::IoTech tech,
std::vector< Io::Fd > &  fd 
) const
override

Definition at line 937 of file FileMgr.cpp.

938 {
939 
940  if ( tech == UNKNOWN ) return getFd( fd );
941 
942  fd.clear();
943  transform_if( std::begin( m_descriptors ), std::end( m_descriptors ), std::back_inserter( fd ), select1st,
944  [&]( const std::pair<Fd, FileAttr*>& d ) { return d.second->tech() == tech; } );
945 
946  return fd.size();
947 }
T end(T...args)
std::map< Fd, FileAttr * > m_descriptors
Definition: FileMgr.h:139
T clear(T...args)
T size(T...args)
T begin(T...args)
T back_inserter(T...args)
int getFd(std::vector< Fd > &) const override
int FileMgr::getFd ( const Io::IoTech tech,
const Io::IoFlags flags,
std::vector< Io::Fd > &  fd 
) const
override

Definition at line 953 of file FileMgr.cpp.

954 {
955 
956  fd.clear();
957  transform_if( m_descriptors.begin(), m_descriptors.end(), std::back_inserter( fd ), select1st,
958  [&]( const std::pair<Fd, FileAttr*>& d ) {
959  return ( d.second->tech() == tech || tech == UNKNOWN ) && ( d.second->flags() == flags );
960  } );
961  return fd.size();
962 }
T end(T...args)
std::map< Fd, FileAttr * > m_descriptors
Definition: FileMgr.h:139
T clear(T...args)
T size(T...args)
T begin(T...args)
T back_inserter(T...args)
int FileMgr::getFileAttr ( const std::string fname,
std::vector< const FileAttr * > &  fa 
) const
override

Definition at line 744 of file FileMgr.cpp.

745 {
746 
747  fa.clear();
748 
749  auto fitr = m_files.equal_range( fname );
750  std::transform( fitr.first, fitr.second, std::back_inserter( fa ), select2nd );
751 
753  [&]( const FileAttr* f ) { return f->name() == fname; } );
754 
755  return fa.size();
756 }
T copy_if(T...args)
fileMap m_files
Definition: FileMgr.h:137
T end(T...args)
const std::string & name() const
Definition: IFileMgr.h:189
T clear(T...args)
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
T size(T...args)
T begin(T...args)
T back_inserter(T...args)
const std::string & fname(const Io::Fd &) const override
Definition: FileMgr.cpp:966
T transform(T...args)
T equal_range(T...args)
StatusCode FileMgr::getFileAttr ( const Fd  ,
const FileAttr *&   
) const
override
StatusCode FileMgr::getFileAttr ( void *  vp,
const FileAttr *&  fa 
) const
override

Definition at line 782 of file FileMgr.cpp.

783 {
784 
786  [&]( fileMap::const_reference f ) { return f.second->fptr() == vp; } );
787  if ( i != std::end( m_files ) ) {
788  fa = i->second;
789  return StatusCode::SUCCESS;
790  }
791 
793  [&]( const FileAttr* f ) { return f->fptr() == vp; } );
794  if ( j != std::end( m_oldFiles ) ) {
795  fa = *j;
796  return StatusCode::SUCCESS;
797  }
798 
799  return StatusCode::FAILURE;
800 }
void * fptr() const
Definition: IFileMgr.h:194
fileMap m_files
Definition: FileMgr.h:137
T end(T...args)
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
T find_if(T...args)
T begin(T...args)
int FileMgr::getFiles ( std::vector< std::string > &  files,
bool  onlyOpen = true 
) const
override

Definition at line 804 of file FileMgr.cpp.

805 {
806 
807  files.clear();
808  auto not_in_files = [&]( const std::string& i ) {
809  return std::none_of( std::begin( files ), std::end( files ), [&]( const std::string& j ) { return j == i; } );
810  };
811  transform_copy_if( std::begin( m_files ), std::end( m_files ), std::back_inserter( files ), to_name, not_in_files );
812  if ( !op ) {
813  transform_copy_if( std::begin( m_oldFiles ), std::end( m_oldFiles ), std::back_inserter( files ), to_name,
814  not_in_files );
815  }
816  return files.size();
817 }
fileMap m_files
Definition: FileMgr.h:137
T end(T...args)
STL class.
T clear(T...args)
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
T size(T...args)
T begin(T...args)
T back_inserter(T...args)
T none_of(T...args)
int FileMgr::getFiles ( std::vector< const Io::FileAttr * > &  files,
bool  onlyOpen = true 
) const
override

Definition at line 821 of file FileMgr.cpp.

822 {
823 
824  files.clear();
825  std::transform( std::begin( m_files ), std::end( m_files ), std::back_inserter( files ), select2nd );
826  if ( !op ) {
828  }
829  return files.size();
830 }
T copy(T...args)
fileMap m_files
Definition: FileMgr.h:137
T end(T...args)
T clear(T...args)
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
T size(T...args)
T begin(T...args)
T back_inserter(T...args)
T transform(T...args)
int FileMgr::getFiles ( const Io::IoTech tech,
std::vector< std::string > &  files,
bool  onlyOpen = true 
) const
override

Definition at line 834 of file FileMgr.cpp.

835 {
836 
837  if ( tech == UNKNOWN ) return getFiles( files, op );
838 
839  files.clear();
840  transform_if( std::begin( m_files ), std::end( m_files ), std::back_inserter( files ), to_name,
841  [&]( fileMap::const_reference f ) {
842  return f.second->tech() == tech &&
843  std::none_of( std::begin( files ), std::end( files ),
844  [&]( const std::string& j ) { return j == f.first; } );
845  } );
846 
847  if ( !op ) {
848  transform_if( std::begin( m_oldFiles ), std::end( m_oldFiles ), std::back_inserter( files ), to_name,
849  [&]( const FileAttr* f ) {
850  return f->tech() == tech && std::none_of( std::begin( files ), std::end( files ),
851  [&]( const std::string& j ) { return j == f->name(); } );
852  } );
853  }
854  return files.size();
855 }
int getFiles(std::vector< std::string > &, bool onlyOpen=true) const override
Definition: FileMgr.cpp:804
fileMap m_files
Definition: FileMgr.h:137
T end(T...args)
STL class.
const std::string & name() const
Definition: IFileMgr.h:189
T clear(T...args)
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
T size(T...args)
IoTech tech() const
Definition: IFileMgr.h:191
T begin(T...args)
T back_inserter(T...args)
T none_of(T...args)
int FileMgr::getFiles ( const Io::IoTech tech,
std::vector< const Io::FileAttr * > &  files,
bool  onlyOpen = true 
) const
override

Definition at line 859 of file FileMgr.cpp.

860 {
861 
862  if ( tech == UNKNOWN ) return getFiles( files, op );
863 
864  auto matches_tech = [&]( const FileAttr* f ) { return f->tech() == tech; };
865 
866  files.clear();
867  transform_copy_if( std::begin( m_files ), std::end( m_files ), std::back_inserter( files ), select2nd, matches_tech );
868  if ( !op ) {
869  std::copy_if( std::begin( m_oldFiles ), std::end( m_oldFiles ), std::back_inserter( files ), matches_tech );
870  }
871 
872  return files.size();
873 }
T copy_if(T...args)
int getFiles(std::vector< std::string > &, bool onlyOpen=true) const override
Definition: FileMgr.cpp:804
fileMap m_files
Definition: FileMgr.h:137
T end(T...args)
T clear(T...args)
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
T size(T...args)
T begin(T...args)
T back_inserter(T...args)
int FileMgr::getFiles ( const Io::IoTech tech,
const Io::IoFlags flags,
std::vector< std::string > &  files,
bool  onlyOpen = true 
) const
override

Definition at line 877 of file FileMgr.cpp.

878 {
879 
880  files.clear();
881 
882  auto not_in_files = [&]( const std::string& n ) {
883  return std::none_of( std::begin( files ), std::end( files ), [&]( const std::string& f ) { return f == n; } );
884  };
885  auto matches_tech_and_flags = [&]( const FileAttr* f ) {
886  return ( f->tech() == tech || tech == UNKNOWN ) && f->flags() == flags;
887  };
888 
889  transform_if(
890  std::begin( m_files ), std::end( m_files ), std::back_inserter( files ), to_name,
891  [&]( fileMap::const_reference f ) { return matches_tech_and_flags( f.second ) && not_in_files( f.first ); } );
892  if ( !op ) {
893  transform_if( std::begin( m_oldFiles ), std::end( m_oldFiles ), std::back_inserter( files ), to_name,
894  [&]( const FileAttr* f ) { return matches_tech_and_flags( f ) && not_in_files( f->name() ); } );
895  }
896 
897  return files.size();
898 }
fileMap m_files
Definition: FileMgr.h:137
T end(T...args)
STL class.
const std::string & name() const
Definition: IFileMgr.h:189
T clear(T...args)
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
T size(T...args)
T begin(T...args)
T back_inserter(T...args)
T none_of(T...args)
int FileMgr::getFiles ( const Io::IoTech tech,
const Io::IoFlags flags,
std::vector< const Io::FileAttr * > &  files,
bool  onlyOpen = true 
) const
override

Definition at line 901 of file FileMgr.cpp.

902 {
903 
904  files.clear();
905 
906  auto matches_tech_and_flags = [&]( const FileAttr* f ) {
907  return ( f->tech() == tech || tech == UNKNOWN ) && f->flags() == flags;
908  };
909 
910  transform_copy_if( std::begin( m_files ), std::end( m_files ), std::back_inserter( files ), select2nd,
911  matches_tech_and_flags );
912  if ( !op ) {
914  matches_tech_and_flags );
915  }
916 
917  return files.size();
918 }
T copy_if(T...args)
fileMap m_files
Definition: FileMgr.h:137
T end(T...args)
T clear(T...args)
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
T size(T...args)
T begin(T...args)
T back_inserter(T...args)
StatusCode FileMgr::getHandler ( const IoTech &  ,
FileHdlr  
) const
override
StatusCode FileMgr::getHandler ( const std::string fname,
Io::FileHdlr hdlr 
) const
override

Definition at line 1062 of file FileMgr.cpp.

1063 {
1064 
1065  auto fitr = m_files.equal_range( fname );
1066  if ( fitr.first == fitr.second ) {
1067  error() << "no file \"" << fname << "\" registered. Cannot determine tech" << endmsg;
1068  return StatusCode::FAILURE;
1069  }
1070 
1071  auto itr = fitr.first;
1072  IoTech tech = itr->second->tech();
1073 
1074  ++itr;
1075  while ( itr != fitr.second ) {
1076  if ( itr->second->tech() != tech ) {
1077  error() << "multiple technologies registered for file \"" << fname << "\". Cannot determine handler" << endmsg;
1078  return StatusCode::FAILURE;
1079  }
1080  ++itr;
1081  }
1082 
1083  return getHandler( tech, hdlr );
1084 }
IoTech
Definition: IFileMgr.h:157
fileMap m_files
Definition: FileMgr.h:137
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
StatusCode getHandler(const IoTech &, FileHdlr &) const override
T equal_range(T...args)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
int FileMgr::getLastError ( std::string err) const
override

Definition at line 1039 of file FileMgr.cpp.

1040 {
1041 
1042  err = m_lastErrS;
1043  return m_lastErr;
1044 }
std::string m_lastErrS
Definition: FileMgr.h:149
int m_lastErr
Definition: FileMgr.h:150
void FileMgr::handle ( const Incident )
override

Definition at line 184 of file FileMgr.cpp.

184 {}
StatusCode FileMgr::hasHandler ( const IoTech ) const
override

Definition at line 238 of file FileMgr.cpp.

239 {
240 
241  auto itr = m_handlers.find( tech );
242  return ( itr != m_handlers.end() ) ? StatusCode::SUCCESS : StatusCode::FAILURE;
243 }
T end(T...args)
std::map< IoTech, FileHdlr > m_handlers
Definition: FileMgr.h:138
T find(T...args)
StatusCode FileMgr::initialize ( )
override

Definition at line 69 of file FileMgr.cpp.

70 {
72 
73  if ( status.isFailure() ) {
74 
75  ON_DEBUG
76  debug() << "Failed to initialize the base class (Service)" << endmsg;
77  return status;
78  }
79 
81  verbose() << "Initializing FileMgr" << endmsg;
82 
83  if ( m_loadRootHandler.value() ) {
84 
85  // setup file handler for ROOT
86 
87  msgSvc()->setOutputLevel( "RootFileHandler", m_outputLevel.value() );
88  m_rfh.emplace( msgSvc(), m_ssl_proxy, m_ssl_cert );
89 
90  auto& rfh = m_rfh.value(); // used in the lambdas to avoid capturing 'this'
91  Io::FileHdlr hdlr(
92  Io::ROOT, [&rfh]( const std::string& n, const Io::IoFlags& f, const std::string& desc, Io::Fd& fd,
93  void*& ptr ) -> Io::open_t { return rfh.openRootFile( n, f, desc, fd, ptr ); },
94  [&rfh]( void* ptr ) -> Io::close_t { return rfh.closeRootFile( ptr ); },
95  [&rfh]( void* ptr, const Io::IoFlags& f ) -> Io::reopen_t { return rfh.reopenRootFile( ptr, f ); } );
96 
97  if ( regHandler( hdlr ).isFailure() ) {
98  error() << "unable to register ROOT file handler with FileMgr" << endmsg;
99  }
100  }
101 
102  if ( m_loadPosixHandler.value() ) {
103 
104  // setup file handler for POSIX
105 
106  msgSvc()->setOutputLevel( "POSIXFileHandler", m_outputLevel.value() );
107  m_pfh.emplace( msgSvc() );
108 
109  auto& pfh = m_pfh.value(); // used in the lambdas to avoid capturing 'this'
110  Io::FileHdlr hdlp(
111  Io::POSIX, [&pfh]( const std::string& n, const Io::IoFlags& f, const std::string& desc, Io::Fd& fd,
112  void*& ptr ) -> Io::open_t { return pfh.openPOSIXFile( n, f, desc, fd, ptr ); },
113  [&pfh]( Io::Fd fd ) -> Io::close_t { return pfh.closePOSIXFile( fd ); },
114  [&pfh]( Io::Fd fd, const Io::IoFlags& f ) -> Io::reopen_t { return pfh.reopenPOSIXFile( fd, f ); } );
115 
116  if ( regHandler( hdlp ).isFailure() ) {
117  error() << "unable to register ROOT file handler with FileMgr" << endmsg;
118  }
119  }
120 
121  return StatusCode::SUCCESS;
122 }
Gaudi::Property< int > m_outputLevel
Definition: Service.h:183
StatusCode regHandler(FileHdlr) override
Definition: FileMgr.cpp:188
StatusCode initialize() override
Definition: Service.cpp:64
int reopen_t
Definition: IFileMgr.h:251
int Fd
Definition: IFileMgr.h:171
Gaudi::Property< bool > m_loadPosixHandler
Definition: FileMgr.h:118
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
int open_t
Definition: IFileMgr.h:249
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:61
STL class.
Io::Fd fd(const std::string &) const override
Definition: FileMgr.cpp:986
Gaudi::Property< bool > m_loadRootHandler
Definition: FileMgr.h:117
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
boost::optional< RootFileHandler > m_rfh
Definition: FileMgr.h:152
const SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
boost::optional< POSIXFileHandler > m_pfh
Definition: FileMgr.h:153
Gaudi::Property< std::string > m_ssl_proxy
Definition: FileMgr.h:120
#define ON_DEBUG
Definition: FileMgr.cpp:8
#define ON_VERBOSE
Definition: FileMgr.cpp:9
Gaudi::Property< std::string > m_ssl_cert
Definition: FileMgr.h:121
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
int close_t
Definition: IFileMgr.h:250
virtual void setOutputLevel(int new_level)=0
Set new global output level threshold.
bool FileMgr::isShareable ( const std::string filename,
const Io::IoFlags  
) const
private
void FileMgr::listActions ( ) const
virtual

Definition at line 1120 of file FileMgr.cpp.

1121 {
1122 
1123  info() << "listing registered actions" << endl;
1124 
1125  for ( const auto& iit : m_actions ) {
1126  Io::IoTech t = iit.first;
1127  const actionMap& m = iit.second;
1128 
1129  if ( !m.empty() ) {
1130  info() << " --- Tech: ";
1131  if ( t == Io::UNKNOWN ) {
1132  info() << "ALL ---" << endl;
1133  } else {
1134  info() << t << " ---" << endl;
1135  }
1136  for ( const auto& iia : m ) {
1137  for ( const auto& it2 : iia.second ) {
1138  info() << " " << iia.first << " " << it2.second << endl;
1139  }
1140  }
1141  }
1142  }
1143  info() << endmsg;
1144 }
IoTech
Definition: IFileMgr.h:157
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
T endl(T...args)
std::map< Io::Action, std::list< bfcn_desc_t > > actionMap
Definition: FileMgr.h:128
constexpr double m
Definition: SystemOfUnits.h:94
std::map< IoTech, actionMap > m_actions
Definition: FileMgr.h:144
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
void FileMgr::listFiles ( ) const
override

Definition at line 1026 of file FileMgr.cpp.

1027 {
1028 
1029  info() << "listing registered files [" << ( m_files.size() + m_oldFiles.size() ) << "]:" << endl;
1030 
1031  for ( auto& itr : m_files ) info() << itr.second << endl;
1032  for ( auto& it2 : m_oldFiles ) info() << *it2 << endl;
1033 
1034  info() << endmsg;
1035 }
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
fileMap m_files
Definition: FileMgr.h:137
T endl(T...args)
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
T size(T...args)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
void FileMgr::listHandlers ( ) const
override

Definition at line 1088 of file FileMgr.cpp.

1089 {
1090 
1091  info() << "Listing registered handlers:" << endl;
1092 
1093  for ( const auto& itr : m_handlers ) info() << " " << itr.first << endl;
1094  info() << endmsg;
1095 }
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
T endl(T...args)
std::map< IoTech, FileHdlr > m_handlers
Definition: FileMgr.h:138
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
void FileMgr::listSuppression ( ) const
virtual

Definition at line 1242 of file FileMgr.cpp.

1243 {
1244 
1245  if ( m_supMap.empty() ) return;
1246 
1247  info() << "listing suppressed file actions" << endl;
1248 
1249  for ( auto it2 = m_supMap.begin(); it2 != m_supMap.end(); ++it2 ) {
1250  info() << " " << it2->first;
1251  if ( get_bit( it2->second, Io::INVALID_ACTION ) ) {
1252  info() << " ALL" << endl;
1253  } else {
1254  for ( int i = 0; i < Io::INVALID_ACTION; ++i ) {
1255  if ( get_bit( it2->second, i ) ) {
1256  info() << " " << (Io::Action)i;
1257  }
1258  }
1259  info() << endl;
1260  }
1261  }
1262 
1263  info() << endmsg;
1264 }
T empty(T...args)
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
supMap m_supMap
Definition: FileMgr.h:147
T endl(T...args)
T end(T...args)
Action
Definition: IFileMgr.h:284
T begin(T...args)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
open_t FileMgr::open ( const Io::IoTech tech,
const std::string caller,
const std::string fname,
const Io::IoFlags flags,
Io::Fd fd,
void *&  ptr,
const std::string desc = "",
const bool  shared = false 
)
override

Definition at line 247 of file FileMgr.cpp.

249 {
250 
251  return open( tech, caller, fname, desc, flags, fd, ptr, sh );
252 }
Io::open_t open(const Io::IoTech &, const std::string &caller, const std::string &fname, const Io::IoFlags &, Io::Fd &fd, void *&ptr, const std::string &desc="", const bool shared=false) override
Definition: FileMgr.cpp:247
Io::Fd fd(const std::string &) const override
Definition: FileMgr.cpp:986
open_t FileMgr::open ( const Io::IoTech tech,
const std::string caller,
const std::string fname,
const Io::IoFlags flags,
Io::Fd fd,
const std::string desc = "",
const bool  shared = false 
)
override

Definition at line 255 of file FileMgr.cpp.

257 {
258 
259  void* dummy( 0 );
260  return open( tech, caller, fname, desc, flags, fd, dummy, sh );
261 }
Io::open_t open(const Io::IoTech &, const std::string &caller, const std::string &fname, const Io::IoFlags &, Io::Fd &fd, void *&ptr, const std::string &desc="", const bool shared=false) override
Definition: FileMgr.cpp:247
Io::Fd fd(const std::string &) const override
Definition: FileMgr.cpp:986
open_t FileMgr::open ( const Io::IoTech tech,
const std::string caller,
const std::string fname,
const Io::IoFlags flags,
void *&  ptr,
const std::string desc = "",
const bool  shared = false 
)
override

Definition at line 264 of file FileMgr.cpp.

266 {
267 
268  Fd dummy( -1 );
269  return open( tech, caller, fname, desc, flags, dummy, ptr, sh );
270 }
int Fd
Definition: IFileMgr.h:171
Io::open_t open(const Io::IoTech &, const std::string &caller, const std::string &fname, const Io::IoFlags &, Io::Fd &fd, void *&ptr, const std::string &desc="", const bool shared=false) override
Definition: FileMgr.cpp:247
virtual Io::open_t FileMgr::open ( const IoTech &  ,
const std::string caller,
const std::string fname,
const std::string desc,
const IoFlags ,
Fd &  ,
void *&  ,
const bool  shared 
)
privatevirtual
StatusCode FileMgr::regAction ( Io::bfcn_action_t  bf,
const Io::Action a,
const std::string desc = "" 
)
override

Definition at line 1099 of file FileMgr.cpp.

1100 {
1101 
1102  return regAction( bf, a, Io::UNKNOWN, d );
1103 }
StatusCode regAction(Io::bfcn_action_t, const Io::Action &, const std::string &desc="") override
Definition: FileMgr.cpp:1099
StatusCode FileMgr::regAction ( Io::bfcn_action_t  bf,
const Io::Action a,
const Io::IoTech t,
const std::string desc = "" 
)
override

Definition at line 1107 of file FileMgr.cpp.

1108 {
1109 
1110  ON_DEBUG
1111  debug() << "registering " << a << " action " << System::typeinfoName( bf.target_type() ) << " for tech " << t
1112  << endmsg;
1113 
1114  m_actions[t][a].emplace_back( bf, ( !d.empty() ) ? d : System::typeinfoName( bf.target_type() ) );
1115  return StatusCode::SUCCESS;
1116 }
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:336
T target_type(T...args)
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
std::map< IoTech, actionMap > m_actions
Definition: FileMgr.h:144
#define ON_DEBUG
Definition: FileMgr.cpp:8
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
StatusCode FileMgr::regHandler ( FileHdlr  fh)
override

Definition at line 188 of file FileMgr.cpp.

189 {
190 
191  IoTech tech = fh.tech;
192 
193  if ( m_handlers.find( tech ) != m_handlers.end() ) {
194  warning() << "Handler for IoTech " << tech << " already registered. Ignoring." << endmsg;
195  return StatusCode::SUCCESS;
196  }
197 
198  if ( !fh.b_open_fcn ) {
199  error() << "open handler for tech " << tech << " is NULL" << endmsg;
200  return StatusCode::FAILURE;
201  }
202 
203  if ( !fh.b_close_fcn && !fh.b_closeP_fcn ) {
204  error() << "no close handler for tech " << tech << " registered" << endmsg;
205  return StatusCode::FAILURE;
206  }
207 
208  if ( !fh.b_reopen_fcn && !fh.b_reopenP_fcn ) {
209  error() << "no reopen handler for tech " << tech << " registered" << endmsg;
210  return StatusCode::FAILURE;
211  }
212 
213  ON_DEBUG
214  debug() << "Successfully registered handler for tech \"" << tech << "\"" << endmsg;
215 
216  m_handlers[tech] = fh;
217 
218  return StatusCode::SUCCESS;
219 }
IoTech
Definition: IFileMgr.h:157
bfcn_reopen_t b_reopen_fcn
Definition: IFileMgr.h:266
T end(T...args)
std::map< IoTech, FileHdlr > m_handlers
Definition: FileMgr.h:138
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
bfcn_close_t b_close_fcn
Definition: IFileMgr.h:264
bfcn_closeP_t b_closeP_fcn
Definition: IFileMgr.h:265
bfcn_reopenP_t b_reopenP_fcn
Definition: IFileMgr.h:267
T find(T...args)
bfcn_open_t b_open_fcn
Definition: IFileMgr.h:263
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
#define ON_DEBUG
Definition: FileMgr.cpp:8
IoTech tech
Definition: IFileMgr.h:261
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
Io::reopen_t FileMgr::reopen ( const Fd  ,
const IoFlags ,
const std::string caller 
)
override
reopen_t FileMgr::reopen ( void *  vp,
const IoFlags flags,
const std::string caller 
)
override

Definition at line 683 of file FileMgr.cpp.

684 {
685  ON_VERBOSE
686  verbose() << "reopen(" << vp << "," << flags << "," << caller << ")" << endmsg;
687 
688  reopen_t r = -1;
689 
690  auto itr = std::find_if( std::begin( m_files ), std::end( m_files ),
691  [&]( fileMap::const_reference f ) { return f.second->fptr() == vp; } );
692  if ( itr == m_files.end() ) {
693  error() << "unregistered file ptr \"" << vp << "\" when calling reopen()" << endmsg;
694  return r;
695  }
696 
697  FileAttr* fa = itr->second;
698  FileHdlr fh;
699  IoTech tech = fa->tech();
700 
701  if ( getHandler( tech, fh ).isFailure() ) {
702  return r;
703  }
704 
705  if ( !fh.b_reopenP_fcn ) {
706  error() << "no reopen(" << tech << ",void*) function registered" << endmsg;
707  return -1;
708  }
709 
710  try {
711  r = fh.b_reopenP_fcn( vp, flags );
712  } catch ( const std::bad_function_call& err ) {
713  error() << "when calling reopen handler for " << tech << " on file " << fa->name() << " with flags " << flags
714  << " caught " << err.what() << endmsg;
715  return -1;
716  } catch ( ... ) {
717  error() << "when calling reopen handler for " << tech << " on file " << fa->name() << " with flags " << flags
718  << " caught an unknown exception." << endmsg;
719  return -1;
720  }
721 
722  if ( r < 0 ) {
723  warning() << "reopen of file with ptr \"" << vp << "\", name: \"" << fa->name() << "\", tech: \"" << tech
724  << "\", flags: \"" << flags << "\" failed" << endmsg;
725 
726  execAction( fa, caller, Io::REOPEN_ERR ).ignore();
727 
728  return r;
729  }
730 
731  fa->isOpen( true );
732  fa->flags( flags );
733 
734  // exec all callbacks
735  if ( execAction( fa, caller, Io::REOPEN ).isFailure() ) {
736  warning() << "at least one reopen callback action failed" << endmsg;
737  }
738 
739  return r;
740 }
IoTech
Definition: IFileMgr.h:157
int reopen_t
Definition: IFileMgr.h:251
fileMap m_files
Definition: FileMgr.h:137
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
bool isOpen() const
Definition: IFileMgr.h:195
StatusCode execAction(Io::FileAttr *, const std::string &, const Io::Action &) const
Definition: FileMgr.cpp:1148
T end(T...args)
MsgStream & err() const
shortcut for the method msgStream(MSG::ERROR)
const std::string & name() const
Definition: IFileMgr.h:189
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
StatusCode getHandler(const IoTech &, FileHdlr &) const override
bfcn_reopenP_t b_reopenP_fcn
Definition: IFileMgr.h:267
T find_if(T...args)
IoTech tech() const
Definition: IFileMgr.h:191
T begin(T...args)
void ignore() const
Definition: StatusCode.h:84
IoFlags flags() const
Definition: IFileMgr.h:192
#define ON_VERBOSE
Definition: FileMgr.cpp:9
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
void FileMgr::suppressAction ( const std::string f)
override

Definition at line 1224 of file FileMgr.cpp.

1224 { return suppressAction( f, Io::INVALID_ACTION ); }
void suppressAction(const std::string &) override
Definition: FileMgr.cpp:1224
void FileMgr::suppressAction ( const std::string f,
const Io::Action a 
)
override

Definition at line 1228 of file FileMgr.cpp.

1229 {
1230  auto set_bit = []( int f, unsigned int b ) { return f | ( 1 << b ); };
1231 
1232  auto i = m_supMap.find( f );
1233  if ( i == m_supMap.end() ) {
1234  m_supMap.emplace( f, set_bit( 0, a ) );
1235  } else {
1236  i->second = set_bit( i->second, a );
1237  }
1238 }
supMap m_supMap
Definition: FileMgr.h:147
T end(T...args)
T find(T...args)
T emplace(T...args)

Member Data Documentation

std::map<IoTech, actionMap> FileMgr::m_actions
private

Definition at line 144 of file FileMgr.h.

std::vector<std::unique_ptr<FileAttr> > FileMgr::m_attr
private

Definition at line 140 of file FileMgr.h.

std::map<Fd, FileAttr*> FileMgr::m_descriptors
private

Definition at line 139 of file FileMgr.h.

fileMap FileMgr::m_files
private

Definition at line 137 of file FileMgr.h.

std::map<IoTech, FileHdlr> FileMgr::m_handlers
private

Definition at line 138 of file FileMgr.h.

int FileMgr::m_lastErr
private

Definition at line 150 of file FileMgr.h.

std::string FileMgr::m_lastErrS
private

Definition at line 149 of file FileMgr.h.

Gaudi::Property<bool> FileMgr::m_loadPosixHandler {this, "LoadPOSIXHandler", true}
private

Definition at line 118 of file FileMgr.h.

Gaudi::Property<bool> FileMgr::m_loadRootHandler {this, "LoadROOTHandler", true}
private

Definition at line 117 of file FileMgr.h.

Gaudi::Property<std::string> FileMgr::m_logfile {this, "LogFile"}
private

Definition at line 115 of file FileMgr.h.

std::vector<FileAttr*> FileMgr::m_oldFiles
private

Definition at line 142 of file FileMgr.h.

boost::optional<POSIXFileHandler> FileMgr::m_pfh
private

Definition at line 153 of file FileMgr.h.

Gaudi::Property<bool> FileMgr::m_printSummary {this, "PrintSummary", false}
private

Definition at line 116 of file FileMgr.h.

boost::optional<RootFileHandler> FileMgr::m_rfh
private

Definition at line 152 of file FileMgr.h.

Gaudi::Property<std::string> FileMgr::m_ssl_cert {this, "TSSL_CertDir", "X509"}
private

Definition at line 121 of file FileMgr.h.

Gaudi::Property<std::string> FileMgr::m_ssl_proxy {this, "TSSL_UserProxy", "X509"}
private

Definition at line 120 of file FileMgr.h.

supMap FileMgr::m_supMap
private

Definition at line 147 of file FileMgr.h.


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