| The Gaudi Framework v30r0 (c919700c)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
FileMgr Class Reference

`#include <src/FileMgr/FileMgr.h>`

Inheritance diagram for FileMgr:
[legend]
Collaboration diagram for FileMgr:
[legend]

## 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::string & | fname (const Io::Fd &) const override
const std::string & | fname (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::string > | getInterfaceNames () const override
| Implementation of IInterface::getInterfaceNames. More...
| ~extends () override=default
| Virtual destructor. More...
Public Member Functions inherited from Service
const std::string & | name () 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::PropertyBase & | declareProperty (Gaudi::Details::PropertyBase &prop)
| Declare a property. More...
Gaudi::Details::PropertyBase * | declareProperty (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::PropertyBase * | declareProperty (const std::string &name, TYPE &value, const std::string &doc="none") const
Gaudi::Details::PropertyBase * | declareProperty (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::PropertyBase * | declareRemoteProperty (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::PropertyBase & | getProperty (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
PropertyHolder & | operator= (const PropertyHolder &)=delete
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, GaudiHandleBase &ref, const std::string &doc="none")
| Specializations for various GaudiHandles. More...
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, GaudiHandleArrayBase &ref, const std::string &doc="none")
Gaudi::Details::PropertyBase * | declareProperty (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...
MsgStream & | msgStream () const
| Return an uninitialized MsgStream. More...
MsgStream & | msgStream (const MSG::Level level) const
| Predefined configurable message stream for the efficient printouts. More...
MsgStream & | always () const
| shortcut for the method msgStream(MSG::ALWAYS) More...
MsgStream & | fatal () const
| shortcut for the method msgStream(MSG::FATAL) More...
MsgStream & | err () const
| shortcut for the method msgStream(MSG::ERROR) More...
MsgStream & | error () const
| shortcut for the method msgStream(MSG::ERROR) More...
MsgStream & | warning () const
| shortcut for the method msgStream(MSG::WARNING) More...
MsgStream & | info () const
| shortcut for the method msgStream(MSG::INFO) More...
MsgStream & | debug () const
| shortcut for the method msgStream(MSG::DEBUG) More...
MsgStream & | verbose () const
| shortcut for the method msgStream(MSG::VERBOSE) More...
MsgStream & | msg () 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::string > | bfcn_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::string > | m_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::string > | m_ssl_proxy {this, "TSSL_UserProxy", "X509"}
Gaudi::Property< std::string > | m_ssl_cert {this, "TSSL_CertDir", "X509"}
fileMap | m_files
std::map< IoTech, FileHdlr > | m_handlers
std::map< Fd, FileAttr * > | m_descriptors
std::vector< std::unique_ptr< FileAttr > > | m_attr
std::vector< FileAttr * > | m_oldFiles
std::map< IoTech, actionMap > | m_actions
supMap | m_supMap
std::string | m_lastErrS
int | m_lastErr
boost::optional< RootFileHandler > | m_rfh
boost::optional< POSIXFileHandler > | m_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::PropertyBase * | property (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< IAuditorSvc > | m_pAuditorSvc
| Auditor Service. More...

## Detailed Description

Definition at line 36 of file FileMgr.h.

## Member Typedef Documentation

typedef std::map<Io::Action, std::list<bfcn_desc_t> > FileMgr::actionMap
| private

Definition at line 128 of file FileMgr.h.

typedef std::pair<Io::bfcn_action_t, std::string> FileMgr::bfcn_desc_t
| private

Definition at line 127 of file FileMgr.h.

typedef std::multimap<std::string, FileAttr*> FileMgr::fileMap
| private

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 }
CommonMessagingBase::verbose
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
Definition: CommonMessaging.h:118
Io::RDWR
Definition: IFileMgr.h:29
Io::WRITE
Definition: IFileMgr.h:28
Io::READ
Definition: IFileMgr.h:27
ON_VERBOSE
#define ON_VERBOSE
Definition: FileMgr.cpp:9
endmsg
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
550 pair<fileMap::const_iterator, fileMap::const_iterator> fitr = m_files.equal_range( fa->name() );
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 }
Io::IoTech
IoTech
Definition: IFileMgr.h:157
Io::INVALID
Definition: IFileMgr.h:37
Io::FileAttr::fptr
void * fptr() const
Definition: IFileMgr.h:194
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
CommonMessagingBase::verbose
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
Definition: CommonMessaging.h:118
Io::FileAttr::isOpen
bool isOpen() const
Definition: IFileMgr.h:195
FileMgr::execAction
StatusCode execAction(Io::FileAttr *, const std::string &, const Io::Action &) const
Definition: FileMgr.cpp:1148
std::end
T end(T...args)
Io::FileAttr::fd
Fd fd() const
Definition: IFileMgr.h:188
CommonMessagingBase::err
MsgStream & err() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:103
Io::CLOSE
Definition: IFileMgr.h:284
Io::CLOSE_ERR
Definition: IFileMgr.h:284
Io::FileAttr::name
const std::string & name() const
Definition: IFileMgr.h:189
std::vector::push_back
T push_back(T...args)
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:106
std::bad_function_call
CommonMessagingBase::warning
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
Definition: CommonMessaging.h:109
Io::FileAttr::isShared
bool isShared() const
Definition: IFileMgr.h:196
std::bad_function_call::what
T what(T...args)
FileMgr::getHandler
StatusCode getHandler(const IoTech &, FileHdlr &) const override
std::multimap::erase
T erase(T...args)
Io::FileHdlr
Definition: IFileMgr.h:260
Io::FileHdlr::b_closeP_fcn
bfcn_closeP_t b_closeP_fcn
Definition: IFileMgr.h:265
std::count_if
T count_if(T...args)
std::pair
FileMgr::m_oldFiles
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
std::find_if
T find_if(T...args)
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:115
std::begin
T begin(T...args)
ON_DEBUG
#define ON_DEBUG
Definition: FileMgr.cpp:8
StatusCode::ignore
void ignore() const
Definition: StatusCode.h:84
Io::FileAttr::flags
IoFlags flags() const
Definition: IFileMgr.h:192
ON_VERBOSE
#define ON_VERBOSE
Definition: FileMgr.cpp:9
std::multimap::equal_range
T equal_range(T...args)
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
Io::close_t
int close_t
Definition: IFileMgr.h:250
Io::FileAttr
Definition: IFileMgr.h:173

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 }
StatusCode::SUCCESS
Definition: StatusCode.h:29
std::map::end
T end(T...args)
FileMgr::m_handlers
std::map< IoTech, FileHdlr > m_handlers
Definition: FileMgr.h:138
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:106
std::map::erase
T erase(T...args)
Io::FileHdlr
Definition: IFileMgr.h:260
std::map::find
T find(T...args)
StatusCode::FAILURE
Definition: StatusCode.h:29
endmsg
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 }
Io::IoTech
IoTech
Definition: IFileMgr.h:157
StatusCode::SUCCESS
Definition: StatusCode.h:29
StatusCode::isFailure
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:61
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
FileMgr::execActs
StatusCode execActs(Io::FileAttr *, const std::string &, const Io::Action &, const actionMap &m) const
Definition: FileMgr.cpp:1171
Io::FileAttr::tech
IoTech tech() const
Definition: IFileMgr.h:191
FileMgr::m_actions
std::map< IoTech, actionMap > m_actions
Definition: FileMgr.h:144
StatusCode::FAILURE
Definition: StatusCode.h:29
Io::UNKNOWN
Definition: IFileMgr.h:157

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 }
StatusCode::SUCCESS
Definition: StatusCode.h:29
FileMgr::m_supMap
supMap m_supMap
Definition: FileMgr.h:147
std::map::end
T end(T...args)
Io::INVALID_ACTION
Definition: IFileMgr.h:284
Io::FileAttr::name
const std::string & name() const
Definition: IFileMgr.h:189
CommonMessagingBase::warning
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
Definition: CommonMessaging.h:109
Gaudi::Units::m
constexpr double m
Definition: SystemOfUnits.h:94
std::map::find
T find(T...args)
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:115
StatusCode::FAILURE
Definition: StatusCode.h:29
ON_DEBUG
#define ON_DEBUG
Definition: FileMgr.cpp:8
endmsg
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 }
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::find_if
T find_if(T...args)
std::multimap::equal_range
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 }
Io::FileAttr::fptr
void * fptr() const
Definition: IFileMgr.h:194
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::multimap::end
T end(T...args)
Io::FileAttr::fd
Fd fd() const
Definition: IFileMgr.h:188
std::find_if
T find_if(T...args)
std::multimap::begin
T begin(T...args)
FileMgr::fptr
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 }
FileMgr::m_attr
std::vector< std::unique_ptr< FileAttr > > m_attr
Definition: FileMgr.h:140
FileMgr::listHandlers
void listHandlers() const override
Definition: FileMgr.cpp:1088
FileMgr::listFiles
void listFiles() const override
Definition: FileMgr.cpp:1026
std::multimap::empty
T empty(T...args)
std::ofstream::open
T open(T...args)
Service::finalize
StatusCode finalize() override
Definition: Service.cpp:174
StatusCode::isSuccess
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:50
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
CommonMessagingBase::verbose
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
Definition: CommonMessaging.h:118
MSG::DEBUG
Definition: IMessageSvc.h:16
std::endl
T endl(T...args)
FileMgr::listActions
virtual void listActions() const
Definition: FileMgr.cpp:1120
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:106
std::ofstream
STL class.
CommonMessagingBase::warning
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
Definition: CommonMessaging.h:109
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
std::ofstream::close
T close(T...args)
FileMgr::m_rfh
boost::optional< RootFileHandler > m_rfh
Definition: FileMgr.h:152
std::vector::clear
T clear(T...args)
std::set::insert
T insert(T...args)
FileMgr::m_oldFiles
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
std::set
STL class.
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:115
FileMgr::listSuppression
virtual void listSuppression() const
Definition: FileMgr.cpp:1242
FileMgr::m_pfh
boost::optional< POSIXFileHandler > m_pfh
Definition: FileMgr.h:153
FileMgr::m_printSummary
Gaudi::Property< bool > m_printSummary
Definition: FileMgr.h:116
ON_DEBUG
#define ON_DEBUG
Definition: FileMgr.cpp:8
FileMgr::m_logfile
Gaudi::Property< std::string > m_logfile
Definition: FileMgr.h:115
CommonMessagingBase::msgLevel
MSG::Level msgLevel() const
get the cached level (originally extracted from the embedded MsgStream)
Definition: CommonMessaging.h:124
ON_VERBOSE
#define ON_VERBOSE
Definition: FileMgr.cpp:9
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
Gaudi.Configuration.log
log
Definition: Configuration.py:13

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 }
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::end
T end(T...args)
FileMgr::fd
Io::Fd fd(const std::string &) const override
Definition: FileMgr.cpp:986
std::find_if
T find_if(T...args)
std::begin
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 }
Io::FileAttr::fptr
void * fptr() const
Definition: IFileMgr.h:194
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::multimap::end
T end(T...args)
Io::FileAttr::name
const std::string & name() const
Definition: IFileMgr.h:189
std::find_if
T find_if(T...args)
std::multimap::begin
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 }
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::find_if
T find_if(T...args)
std::multimap::equal_range
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 }
Io::FileAttr::fptr
void * fptr() const
Definition: IFileMgr.h:194
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::multimap::end
T end(T...args)
Io::FileAttr::fd
Fd fd() const
Definition: IFileMgr.h:188
FileMgr::fd
Io::Fd fd(const std::string &) const override
Definition: FileMgr.cpp:986
std::find_if
T find_if(T...args)
std::multimap::begin
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 }
std::end
T end(T...args)
FileMgr::m_descriptors
std::map< Fd, FileAttr * > m_descriptors
Definition: FileMgr.h:139
std::vector::clear
T clear(T...args)
std::pair
std::vector::size
T size(T...args)
std::begin
T begin(T...args)
std::back_inserter
T back_inserter(T...args)
Io::UNKNOWN
Definition: IFileMgr.h:157
FileMgr::getFd
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 }
std::map::end
T end(T...args)
FileMgr::m_descriptors
std::map< Fd, FileAttr * > m_descriptors
Definition: FileMgr.h:139
std::vector::clear
T clear(T...args)
std::pair
std::vector::size
T size(T...args)
std::map::begin
T begin(T...args)
std::back_inserter
T back_inserter(T...args)
Io::UNKNOWN
Definition: IFileMgr.h:157

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
752 std::copy_if( std::begin( m_oldFiles ), std::end( m_oldFiles ), std::back_inserter( fa ),
753 [&]( const FileAttr* f ) { return f->name() == fname; } );
754
755 return fa.size();
756 }
std::copy_if
T copy_if(T...args)
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::end
T end(T...args)
Io::FileAttr::name
const std::string & name() const
Definition: IFileMgr.h:189
std::vector::clear
T clear(T...args)
FileMgr::m_oldFiles
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
std::vector::size
T size(T...args)
std::begin
T begin(T...args)
std::back_inserter
T back_inserter(T...args)
FileMgr::fname
const std::string & fname(const Io::Fd &) const override
Definition: FileMgr.cpp:966
std::transform
T transform(T...args)
std::multimap::equal_range
T equal_range(T...args)
Io::FileAttr
Definition: IFileMgr.h:173

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
785 auto i = std::find_if( std::begin( m_files ), std::end( m_files ),
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
792 auto j = std::find_if( std::begin( m_oldFiles ), std::end( m_oldFiles ),
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 }
StatusCode::SUCCESS
Definition: StatusCode.h:29
Io::FileAttr::fptr
void * fptr() const
Definition: IFileMgr.h:194
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::end
T end(T...args)
FileMgr::m_oldFiles
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
std::find_if
T find_if(T...args)
std::begin
T begin(T...args)
StatusCode::FAILURE
Definition: StatusCode.h:29
Io::FileAttr
Definition: IFileMgr.h:173

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 }
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::end
T end(T...args)
std::string
STL class.
std::vector::clear
T clear(T...args)
FileMgr::m_oldFiles
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
std::vector::size
T size(T...args)
std::begin
T begin(T...args)
std::back_inserter
T back_inserter(T...args)
std::none_of
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 ) {
827 std::copy( std::begin( m_oldFiles ), std::end( m_oldFiles ), std::back_inserter( files ) );
828 }
829 return files.size();
830 }
std::copy
T copy(T...args)
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::end
T end(T...args)
std::vector::clear
T clear(T...args)
FileMgr::m_oldFiles
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
std::vector::size
T size(T...args)
std::begin
T begin(T...args)
std::back_inserter
T back_inserter(T...args)
std::transform
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 }
FileMgr::getFiles
int getFiles(std::vector< std::string > &, bool onlyOpen=true) const override
Definition: FileMgr.cpp:804
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::end
T end(T...args)
std::string
STL class.
Io::FileAttr::name
const std::string & name() const
Definition: IFileMgr.h:189
std::vector::clear
T clear(T...args)
FileMgr::m_oldFiles
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
std::vector::size
T size(T...args)
Io::FileAttr::tech
IoTech tech() const
Definition: IFileMgr.h:191
std::begin
T begin(T...args)
std::back_inserter
T back_inserter(T...args)
std::none_of
T none_of(T...args)
Io::UNKNOWN
Definition: IFileMgr.h:157
Io::FileAttr
Definition: IFileMgr.h:173

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 }
std::copy_if
T copy_if(T...args)
FileMgr::getFiles
int getFiles(std::vector< std::string > &, bool onlyOpen=true) const override
Definition: FileMgr.cpp:804
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::end
T end(T...args)
std::vector::clear
T clear(T...args)
FileMgr::m_oldFiles
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
std::vector::size
T size(T...args)
std::begin
T begin(T...args)
std::back_inserter
T back_inserter(T...args)
Io::UNKNOWN
Definition: IFileMgr.h:157
Io::FileAttr
Definition: IFileMgr.h:173

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 }
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::end
T end(T...args)
std::string
STL class.
GaudiPluginService.cpluginsvc.n
n
Definition: cpluginsvc.py:228
Io::FileAttr::name
const std::string & name() const
Definition: IFileMgr.h:189
std::vector::clear
T clear(T...args)
FileMgr::m_oldFiles
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
std::vector::size
T size(T...args)
std::begin
T begin(T...args)
std::back_inserter
T back_inserter(T...args)
std::none_of
T none_of(T...args)
Io::UNKNOWN
Definition: IFileMgr.h:157
Io::FileAttr
Definition: IFileMgr.h:173

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 ) {
913 std::copy_if( std::begin( m_oldFiles ), std::end( m_oldFiles ), std::back_inserter( files ),
914 matches_tech_and_flags );
915 }
916
917 return files.size();
918 }
std::copy_if
T copy_if(T...args)
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::end
T end(T...args)
std::vector::clear
T clear(T...args)
FileMgr::m_oldFiles
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
std::vector::size
T size(T...args)
std::begin
T begin(T...args)
std::back_inserter
T back_inserter(T...args)
Io::UNKNOWN
Definition: IFileMgr.h:157
Io::FileAttr
Definition: IFileMgr.h:173

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 }
Io::IoTech
IoTech
Definition: IFileMgr.h:157
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:106
FileMgr::getHandler
StatusCode getHandler(const IoTech &, FileHdlr &) const override
StatusCode::FAILURE
Definition: StatusCode.h:29
std::multimap::equal_range
T equal_range(T...args)
endmsg
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 }
FileMgr::m_lastErrS
std::string m_lastErrS
Definition: FileMgr.h:149
FileMgr::m_lastErr
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 }
StatusCode::SUCCESS
Definition: StatusCode.h:29
std::map::end
T end(T...args)
FileMgr::m_handlers
std::map< IoTech, FileHdlr > m_handlers
Definition: FileMgr.h:138
std::map::find
T find(T...args)
StatusCode::FAILURE
Definition: StatusCode.h:29

StatusCode FileMgr::initialize | ( |  | ) |
| override

Definition at line 69 of file FileMgr.cpp.

70 {
71 StatusCode status = Service::initialize();
72
73 if ( status.isFailure() ) {
74
75 ON_DEBUG
76 debug() << "Failed to initialize the base class (Service)" << endmsg;
77 return status;
78 }
79
80 ON_VERBOSE
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 }
Service::m_outputLevel
Gaudi::Property< int > m_outputLevel
Definition: Service.h:183
FileMgr::regHandler
StatusCode regHandler(FileHdlr) override
Definition: FileMgr.cpp:188
StatusCode::SUCCESS
Definition: StatusCode.h:29
Service::initialize
StatusCode initialize() override
Definition: Service.cpp:64
Io::ROOT
Definition: IFileMgr.h:157
Io::reopen_t
int reopen_t
Definition: IFileMgr.h:251
Io::Fd
int Fd
Definition: IFileMgr.h:171
FileMgr::m_loadPosixHandler
Gaudi::Property< bool > m_loadPosixHandler
Definition: FileMgr.h:118
CommonMessagingBase::verbose
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
Definition: CommonMessaging.h:118
Io::open_t
int open_t
Definition: IFileMgr.h:249
StatusCode::isFailure
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:61
std::string
STL class.
FileMgr::fd
Io::Fd fd(const std::string &) const override
Definition: FileMgr.cpp:986
GaudiPluginService.cpluginsvc.n
n
Definition: cpluginsvc.py:228
FileMgr::m_loadRootHandler
Gaudi::Property< bool > m_loadRootHandler
Definition: FileMgr.h:117
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:106
Io::POSIX
Definition: IFileMgr.h:157
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Io::IoFlags
Definition: IFileMgr.h:40
FileMgr::m_rfh
boost::optional< RootFileHandler > m_rfh
Definition: FileMgr.h:152
Io::FileHdlr
Definition: IFileMgr.h:260
CommonMessagingBase::msgSvc
const SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
Definition: CommonMessaging.h:75
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:115
FileMgr::m_pfh
boost::optional< POSIXFileHandler > m_pfh
Definition: FileMgr.h:153
FileMgr::m_ssl_proxy
Gaudi::Property< std::string > m_ssl_proxy
Definition: FileMgr.h:120
ON_DEBUG
#define ON_DEBUG
Definition: FileMgr.cpp:8
ON_VERBOSE
#define ON_VERBOSE
Definition: FileMgr.cpp:9
FileMgr::m_ssl_cert
Gaudi::Property< std::string > m_ssl_cert
Definition: FileMgr.h:121
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
Io::close_t
int close_t
Definition: IFileMgr.h:250
IMessageSvc::setOutputLevel
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 }
Io::IoTech
IoTech
Definition: IFileMgr.h:157
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:112
std::endl
T endl(T...args)
FileMgr::actionMap
std::map< Io::Action, std::list< bfcn_desc_t > > actionMap
Definition: FileMgr.h:128
Gaudi::Units::m
constexpr double m
Definition: SystemOfUnits.h:94
FileMgr::m_actions
std::map< IoTech, actionMap > m_actions
Definition: FileMgr.h:144
Io::UNKNOWN
Definition: IFileMgr.h:157
endmsg
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 }
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:112
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
std::endl
T endl(T...args)
FileMgr::m_oldFiles
std::vector< FileAttr * > m_oldFiles
Definition: FileMgr.h:142
std::multimap::size
T size(T...args)
endmsg
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 }
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:112
std::endl
T endl(T...args)
FileMgr::m_handlers
std::map< IoTech, FileHdlr > m_handlers
Definition: FileMgr.h:138
endmsg
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 }
std::map::empty
T empty(T...args)
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:112
FileMgr::m_supMap
supMap m_supMap
Definition: FileMgr.h:147
std::endl
T endl(T...args)
std::map::end
T end(T...args)
Io::INVALID_ACTION
Definition: IFileMgr.h:284
Io::Action
Action
Definition: IFileMgr.h:284
std::map::begin
T begin(T...args)
endmsg
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 }
FileMgr::open
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
FileMgr::fd
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 }
FileMgr::open
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
FileMgr::fd
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 }
Io::Fd
int Fd
Definition: IFileMgr.h:171
FileMgr::open
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
| ) |  |
| private virtual

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 }
FileMgr::regAction
StatusCode regAction(Io::bfcn_action_t, const Io::Action &, const std::string &desc="") override
Definition: FileMgr.cpp:1099
Io::UNKNOWN
Definition: IFileMgr.h:157

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 }
StatusCode::SUCCESS
Definition: StatusCode.h:29
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:336
std::function::target_type
T target_type(T...args)
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:115
FileMgr::m_actions
std::map< IoTech, actionMap > m_actions
Definition: FileMgr.h:144
ON_DEBUG
#define ON_DEBUG
Definition: FileMgr.cpp:8
endmsg
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 }
Io::IoTech
IoTech
Definition: IFileMgr.h:157
StatusCode::SUCCESS
Definition: StatusCode.h:29
Io::FileHdlr::b_reopen_fcn
bfcn_reopen_t b_reopen_fcn
Definition: IFileMgr.h:266
std::map::end
T end(T...args)
FileMgr::m_handlers
std::map< IoTech, FileHdlr > m_handlers
Definition: FileMgr.h:138
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:106
CommonMessagingBase::warning
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
Definition: CommonMessaging.h:109
Io::FileHdlr::b_close_fcn
bfcn_close_t b_close_fcn
Definition: IFileMgr.h:264
Io::FileHdlr::b_closeP_fcn
bfcn_closeP_t b_closeP_fcn
Definition: IFileMgr.h:265
Io::FileHdlr::b_reopenP_fcn
bfcn_reopenP_t b_reopenP_fcn
Definition: IFileMgr.h:267
std::map::find
T find(T...args)
Io::FileHdlr::b_open_fcn
bfcn_open_t b_open_fcn
Definition: IFileMgr.h:263
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:115
StatusCode::FAILURE
Definition: StatusCode.h:29
ON_DEBUG
#define ON_DEBUG
Definition: FileMgr.cpp:8
Io::FileHdlr::tech
IoTech tech
Definition: IFileMgr.h:261
endmsg
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 }
Io::IoTech
IoTech
Definition: IFileMgr.h:157
Io::REOPEN
Definition: IFileMgr.h:284
Io::reopen_t
int reopen_t
Definition: IFileMgr.h:251
FileMgr::m_files
fileMap m_files
Definition: FileMgr.h:137
CommonMessagingBase::verbose
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
Definition: CommonMessaging.h:118
Io::FileAttr::isOpen
bool isOpen() const
Definition: IFileMgr.h:195
FileMgr::execAction
StatusCode execAction(Io::FileAttr *, const std::string &, const Io::Action &) const
Definition: FileMgr.cpp:1148
std::end
T end(T...args)
Io::REOPEN_ERR
Definition: IFileMgr.h:284
CommonMessagingBase::err
MsgStream & err() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:103
Io::FileAttr::name
const std::string & name() const
Definition: IFileMgr.h:189
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:106
std::bad_function_call
CommonMessagingBase::warning
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
Definition: CommonMessaging.h:109
std::bad_function_call::what
T what(T...args)
FileMgr::getHandler
StatusCode getHandler(const IoTech &, FileHdlr &) const override
Io::FileHdlr
Definition: IFileMgr.h:260
Io::FileHdlr::b_reopenP_fcn
bfcn_reopenP_t b_reopenP_fcn
Definition: IFileMgr.h:267
std::find_if
T find_if(T...args)
Io::FileAttr::tech
IoTech tech() const
Definition: IFileMgr.h:191
std::begin
T begin(T...args)
StatusCode::ignore
void ignore() const
Definition: StatusCode.h:84
Io::FileAttr::flags
IoFlags flags() const
Definition: IFileMgr.h:192
ON_VERBOSE
#define ON_VERBOSE
Definition: FileMgr.cpp:9
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
Io::FileAttr
Definition: IFileMgr.h:173

void FileMgr::suppressAction | ( | const std::string & | f | ) |
| override

Definition at line 1224 of file FileMgr.cpp.

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

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 }
FileMgr::m_supMap
supMap m_supMap
Definition: FileMgr.h:147
std::map::end
T end(T...args)
std::map::find
T find(T...args)
std::map::emplace
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:

- GaudiSvc/src/FileMgr/FileMgr.h
- GaudiSvc/src/FileMgr/FileMgr.cpp