The Gaudi Framework  master (594c33fa)
Gaudi::IODataManager Class Reference

#include </builds/gaudi/Gaudi/GaudiUtils/src/component/IODataManager.h>

Inheritance diagram for Gaudi::IODataManager:
Collaboration diagram for Gaudi::IODataManager:

Classes

struct  Entry
 

Public Member Functions

StatusCode initialize () override
 IService implementation: initialize the service. More...
 
StatusCode finalize () override
 IService implementation: finalize the service. More...
 
StatusCode connectRead (bool keep_open, Connection *ioDesc) override
 Open data stream in read mode. More...
 
StatusCode connectWrite (Connection *con, IoType mode=Connection::CREATE, CSTR doctype="UNKNOWN") override
 Open data stream in write mode. More...
 
StatusCode disconnect (Connection *ioDesc) override
 Release data stream. More...
 
Connection * connection (const std::string &dsn) const override
 Retrieve known connection. More...
 
Connections connections (const IInterface *owner) const override
 Get connection by owner instance (0=ALL) More...
 
StatusCode read (Connection *ioDesc, void *const data, size_t len) override
 Read raw byte buffer from input stream. More...
 
StatusCode write (Connection *con, const void *data, int len) override
 Write raw byte buffer to output stream. More...
 
long long int seek (Connection *ioDesc, long long int where, int origin) override
 Seek on the file described by ioDesc. Arguments as in ::seek() More...
 
- Public Member Functions inherited from extends< Service, IIODataManager >
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...
 
- 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...
 
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 >
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, ToolHandle< T > &hndl, const std::string &doc="none")
 
template<class T >
StatusCode declareTool (ToolHandle< T > &handle, bool createIf=true)
 
template<class T >
StatusCode declareTool (ToolHandle< T > &handle, std::string toolTypeAndName, bool createIf=true)
 Declare used tool. More...
 
template<class T >
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, ToolHandleArray< T > &hndlArr, const std::string &doc="none")
 
template<class T >
void addToolsArray (ToolHandleArray< T > &hndlArr)
 
const std::vector< IAlgTool * > & tools () const
 
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
 
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, 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 std::string &name, const Gaudi::Details::PropertyBase &p) override
 set the property from another property with a different name More...
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string More...
 
StatusCode setProperty (const Gaudi::Details::PropertyBase &p)
 Set the property from a property. More...
 
virtual StatusCode setProperty (const std::string &name, const Gaudi::Details::PropertyBase &p)=0
 Set the property from a property with a different name. More...
 
virtual StatusCode setProperty (const std::string &s)=0
 Set the property by string. More...
 
StatusCode setProperty (const std::string &name, const char *v)
 Special case for string literals. More...
 
StatusCode setProperty (const std::string &name, const std::string &v)
 Special case for std::string. More...
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value More...
 
StatusCode setPropertyRepr (const std::string &n, const std::string &r) override
 set the property from name and value string representation More...
 
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property More...
 
const Gaudi::Details::PropertyBasegetProperty (std::string_view name) const override
 get the property by name More...
 
StatusCode getProperty (std::string_view 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 (std::string_view name) const override
 Return true if we have a property with the given name. More...
 
Gaudi::Details::PropertyBaseproperty (std::string_view name) const
 \fixme property and bindPropertiesTo should be protected More...
 
void bindPropertiesTo (Gaudi::Interfaces::IOptionsSvc &optsSvc)
 
 PropertyHolder (const PropertyHolder &)=delete
 
PropertyHolderoperator= (const PropertyHolder &)=delete
 
- Public Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level msgLevel () const
 get the cached level (originally extracted from the embedded MsgStream) More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 

Protected Types

typedef const std::stringCSTR
 
typedef std::map< std::string, Entry * > ConnectionMap
 
typedef std::map< std::string, std::stringFidMap
 

Protected Member Functions

StatusCode connectDataIO (int typ, IoType rw, CSTR fn, CSTR technology, bool keep, Connection *con)
 
StatusCode reconnect (Entry *e)
 
StatusCode error (CSTR msg, bool rethrow)
 Small routine to issue exceptions. More...
 
StatusCode establishConnection (Connection *con)
 
- Protected Member Functions inherited from Service
std::vector< IAlgTool * > & tools ()
 
 ~Service () override
 Standard Destructor
More...
 
int outputLevel () const
 get the Service's output level More...
 
- Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level setUpMessaging () const
 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

Gaudi::Property< std::stringm_catalogSvcName
 
Gaudi::Property< bool > m_useGFAL { this, "UseGFAL", true, "flag for auto gfal data access" }
 
Gaudi::Property< bool > m_quarantine
 
Gaudi::Property< int > m_ageLimit { this, "AgeLimit", 2, "age limit" }
 
Gaudi::Property< bool > m_disablePFNWarning
 
ConnectionMap m_connectionMap
 Map with I/O descriptors. More...
 
SmartIF< IFileCatalogm_catalog
 Reference to file catalog. More...
 
FidMap m_fidMap
 Map of FID to PFN. More...
 
SmartIF< IIncidentSvcm_incSvc
 
- 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" }
 flag indicating whether ToolHandle tools have been added to m_tools More...
 
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()" }
 
Gaudi::Property< bool > m_autoRetrieveTools
 
Gaudi::Property< bool > m_checkToolDeps
 
SmartIF< IAuditorSvcm_pAuditorSvc
 Auditor Service
More...
 

Additional Inherited Members

- Public Types inherited from extends< Service, IIODataManager >
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
using Factory = Gaudi::PluginService::Factory< IService *(const std::string &, ISvcLocator *)>
 
- 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...
 

Detailed Description

Definition at line 39 of file IODataManager.h.

Member Typedef Documentation

◆ ConnectionMap

Definition at line 50 of file IODataManager.h.

◆ CSTR

typedef const std::string& Gaudi::IODataManager::CSTR
protected

Definition at line 41 of file IODataManager.h.

◆ FidMap

Definition at line 51 of file IODataManager.h.

Member Function Documentation

◆ connectDataIO()

StatusCode IODataManager::connectDataIO ( int  typ,
IoType  rw,
CSTR  fn,
CSTR  technology,
bool  keep,
Connection *  con 
)
protected

Definition at line 229 of file IODataManager.cpp.

230  {
231  MsgStream log( msgSvc(), name() );
232  std::string dsn = dataset;
233  try {
235  if ( ::strncasecmp( dsn.c_str(), "FID:", 4 ) == 0 )
236  dsn = dataset.substr( 4 ), typ = FID;
237  else if ( ::strncasecmp( dsn.c_str(), "LFN:", 4 ) == 0 )
238  dsn = dataset.substr( 4 ), typ = LFN;
239  else if ( ::strncasecmp( dsn.c_str(), "PFN:", 4 ) == 0 )
240  dsn = dataset.substr( 4 ), typ = PFN;
241  else if ( typ == UNKNOWN )
242  return connectDataIO( PFN, rw, dsn, technology, keep_open, connection );
243 
244  if ( std::find( s_badFiles.begin(), s_badFiles.end(), dsn ) != s_badFiles.end() ) {
245  m_incSvc->fireIncident( Incident( dsn, IncidentType::FailInputFile ) );
247  }
248  if ( typ == FID ) {
249  auto fi = m_connectionMap.find( dsn );
250  if ( fi == m_connectionMap.end() ) {
251  IFileCatalog::Files files;
252  m_catalog->getPFN( dsn, files );
253  if ( files.empty() ) {
254  if ( !m_useGFAL ) {
255  if ( m_quarantine ) s_badFiles.insert( dsn );
256  m_incSvc->fireIncident( Incident( dsn, IncidentType::FailInputFile ) );
257  error( "connectDataIO> failed to resolve FID:" + dsn, false ).ignore();
259  } else if ( dsn.length() == 36 && dsn[8] == '-' && dsn[13] == '-' ) {
260  std::string gfal_name = "gfal:guid:" + dsn;
261  m_fidMap[dsn] = m_fidMap[dataset] = m_fidMap[gfal_name] = dsn;
262  sc = connectDataIO( PFN, rw, gfal_name, technology, keep_open, connection );
263  if ( sc.isSuccess() ) return sc;
264  if ( m_quarantine ) s_badFiles.insert( dsn );
265  }
266  if ( m_quarantine ) s_badFiles.insert( dsn );
267  m_incSvc->fireIncident( Incident( dsn, IncidentType::FailInputFile ) );
268  error( "connectDataIO> Failed to resolve FID:" + dsn, false ).ignore();
270  }
271  // keep track of the current return code before we start iterating over
272  // replicas
273  auto appmgr = serviceLocator()->as<IProperty>();
274  int origReturnCode = Gaudi::getAppReturnCode( appmgr );
275  for ( auto i = files.cbegin(); i != files.cend(); ++i ) {
276  std::string pfn = i->first;
277  if ( i != files.cbegin() ) {
278  log << MSG::WARNING << "Attempt to connect dsn:" << dsn << " with next entry in data federation:" << pfn
279  << "." << endmsg;
280  }
281  sc = connectDataIO( PFN, rw, pfn, technology, keep_open, connection );
282  if ( !sc.isSuccess() ) {
283  if ( m_quarantine ) s_badFiles.insert( pfn );
284  m_incSvc->fireIncident( Incident( pfn, IncidentType::FailInputFile ) );
285  } else {
286  m_fidMap[dsn] = m_fidMap[dataset] = m_fidMap[pfn] = dsn;
287  // we found a working replica, let's reset the return code to the old value
288  Gaudi::setAppReturnCode( appmgr, origReturnCode, true ).ignore();
289  return sc;
290  }
291  }
292  log << MSG::ERROR << "Failed to open dsn:" << dsn << " Federated file could not be resolved from "
293  << files.size() << " entries." << endmsg;
295  }
296  return StatusCode::FAILURE;
297  }
298  std::string fid;
299  auto j = m_fidMap.find( dsn );
300  if ( j == m_fidMap.end() ) {
301  IFileCatalog::Files files;
302  switch ( typ ) {
303  case LFN:
304  fid = m_catalog->lookupLFN( dsn );
305  if ( fid.empty() ) {
306  m_incSvc->fireIncident( Incident( dsn, IncidentType::FailInputFile ) );
307  log << MSG::ERROR << "Failed to resolve LFN:" << dsn << " Cannot access this dataset." << endmsg;
309  }
310  break;
311  case PFN:
312  fid = m_catalog->lookupPFN( dsn );
313  if ( !fid.empty() ) m_catalog->getPFN( fid, files );
314  if ( files.empty() ) {
315  if ( rw == Connection::CREATE || rw == Connection::RECREATE ) {
316  if ( fid.empty() ) fid = m_catalog->createFID();
317  m_catalog->registerPFN( fid, dsn, technology );
318  log << MSG::INFO << "Referring to dataset " << dsn << " by its file ID:" << fid << endmsg;
319  } else {
320  fid = dsn;
321  }
322  }
323  break;
324  }
325  } else {
326  fid = j->second;
327  }
328  if ( typ == PFN ) {
329  // Open PFN
330  auto fi = m_connectionMap.find( fid );
331  if ( fi == m_connectionMap.end() ) {
332  connection->setFID( fid );
333  connection->setPFN( dsn );
334  auto e = new Entry( technology, keep_open, rw, connection );
335  // Here we open the file!
336  if ( !reconnect( e ).isSuccess() ) {
337  delete e;
338  if ( m_quarantine ) s_badFiles.insert( dsn );
339  m_incSvc->fireIncident( Incident( dsn, IncidentType::FailInputFile ) );
340  error( "connectDataIO> Cannot connect to database: PFN=" + dsn + " FID=" + fid, false ).ignore();
342  }
343  fid = connection->fid();
344  m_fidMap[dataset] = m_fidMap[dsn] = m_fidMap[fid] = fid;
345  if ( !( rw == Connection::CREATE || rw == Connection::RECREATE ) ) {
346  if ( !m_disablePFNWarning && strcasecmp( dsn.c_str(), fid.c_str() ) == 0 ) {
347  log << MSG::ERROR << "Referring to existing dataset " << dsn << " by its physical name." << endmsg;
348  log << "You may not be able to navigate back to the input file"
349  << " -- processing continues" << endmsg;
350  }
351  }
352  m_connectionMap.emplace( fid, e ); // note: only if we disconnect does e get deleted??
353  return StatusCode::SUCCESS;
354  }
355  // Here we open the file!
356  if ( !reconnect( ( *fi ).second ).isSuccess() ) {
357  if ( m_quarantine ) s_badFiles.insert( dsn );
358  m_incSvc->fireIncident( Incident( dsn, IncidentType::FailInputFile ) );
359  error( "connectDataIO> Cannot connect to database: PFN=" + dsn + " FID=" + fid, false ).ignore();
361  }
362  return StatusCode::SUCCESS;
363  }
364  sc = connectDataIO( FID, rw, fid, technology, keep_open, connection );
365  if ( !sc.isSuccess() && m_quarantine ) {
366  s_badFiles.insert( fid );
367  } else if ( typ == LFN ) {
368  m_fidMap[dataset] = fid;
369  }
370  return sc;
371  } catch ( std::exception& e ) {
372  error( std::string( "connectDataIO> Caught exception:" ) + e.what(), false ).ignore();
373  } catch ( ... ) { error( std::string( "connectDataIO> Caught unknown exception" ), false ).ignore(); }
374  m_incSvc->fireIncident( Incident( dsn, IncidentType::FailInputFile ) );
375  error( "connectDataIO> The dataset " + dsn + " cannot be opened.", false ).ignore();
376  s_badFiles.insert( dsn );
378 }

◆ connection()

IIODataManager::Connection * IODataManager::connection ( const std::string dsn) const
override

Retrieve known connection.

Definition at line 203 of file IODataManager.cpp.

203  {
204  auto j = m_fidMap.find( dataset );
205  if ( j == m_fidMap.end() ) return nullptr;
206  auto i = m_connectionMap.find( j->second );
207  return ( i != m_connectionMap.end() ) ? i->second->connection : nullptr;
208 }

◆ connections()

IODataManager::Connections IODataManager::connections ( const IInterface owner) const
override

Get connection by owner instance (0=ALL)

Definition at line 89 of file IODataManager.cpp.

89  {
90  Connections conns;
91  transform_copy_if(
93  []( ConnectionMap::const_reference i ) { return i.second->connection; },
94  [&]( const IDataConnection* c ) { return !owner || c->owner() == owner; } );
95  return conns;
96 }

◆ connectRead()

StatusCode IODataManager::connectRead ( bool  keep_open,
Connection *  ioDesc 
)
override

Open data stream in read mode.

Connect data file for writing.

Definition at line 99 of file IODataManager.cpp.

99  {
100  if ( !establishConnection( con ) ) {
101  return connectDataIO( UNKNOWN, Connection::READ, con->name(), "UNKNOWN", keep_open, con );
102  }
103  std::string dsn = con ? con->name() : std::string( "Unknown" );
104  return error( "Failed to connect to data:" + dsn, false );
105 }

◆ connectWrite()

StatusCode IODataManager::connectWrite ( Connection *  con,
IoType  mode = Connection::CREATE,
CSTR  doctype = "UNKNOWN" 
)
override

Open data stream in write mode.

Connect data file for reading.

Definition at line 108 of file IODataManager.cpp.

108  {
109  if ( !establishConnection( con ) ) { return connectDataIO( UNKNOWN, mode, con->name(), doctype, true, con ); }
110  std::string dsn = con ? con->name() : std::string( "Unknown" );
111  return error( "Failed to connect to data:" + dsn, false );
112 }

◆ disconnect()

StatusCode IODataManager::disconnect ( Connection *  ioDesc)
override

Release data stream.

Definition at line 129 of file IODataManager.cpp.

129  {
130  if ( con ) {
131  std::string dataset = con->name();
132  std::string dsn = dataset;
133  StatusCode sc = con->disconnect();
134  if ( ::strncasecmp( dsn.c_str(), "FID:", 4 ) == 0 )
135  dsn = dataset.substr( 4 );
136  else if ( ::strncasecmp( dsn.c_str(), "LFN:", 4 ) == 0 )
137  dsn = dataset.substr( 4 );
138  else if ( ::strncasecmp( dsn.c_str(), "PFN:", 4 ) == 0 )
139  dsn = dataset.substr( 4 );
140 
141  auto j = m_fidMap.find( dataset );
142  if ( j != m_fidMap.end() ) {
143  std::string fid = j->second;
144  std::string gfal_name = "gfal:guid:" + fid;
145  auto i = m_connectionMap.find( fid );
146  m_fidMap.erase( j );
147  if ( ( j = m_fidMap.find( fid ) ) != m_fidMap.end() ) m_fidMap.erase( j );
148  if ( ( j = m_fidMap.find( gfal_name ) ) != m_fidMap.end() ) m_fidMap.erase( j );
149  if ( i != m_connectionMap.end() && i->second ) {
150  IDataConnection* c = i->second->connection;
151  if ( ( j = m_fidMap.find( c->pfn() ) ) != m_fidMap.end() ) m_fidMap.erase( j );
152  if ( c->isConnected() ) {
153  MsgStream log( msgSvc(), name() );
154  c->disconnect().ignore( /* AUTOMATICALLY ADDED FOR gaudi/Gaudi!763 */ );
155  log << MSG::INFO << "Disconnect from dataset " << dsn << " [" << fid << "]" << endmsg;
156  }
157  delete i->second;
158  m_connectionMap.erase( i );
159  }
160  }
161  return sc;
162  }
163  return StatusCode::FAILURE;
164 }

◆ error()

StatusCode IODataManager::error ( CSTR  msg,
bool  rethrow 
)
protected

Small routine to issue exceptions.

Definition at line 81 of file IODataManager.cpp.

81  {
82  MsgStream log( msgSvc(), name() );
83  log << MSG::ERROR << "Error: " << msg << endmsg;
84  if ( rethrow ) System::breakExecution();
85  return StatusCode::FAILURE;
86 }

◆ establishConnection()

StatusCode IODataManager::establishConnection ( Connection *  con)
protected

Definition at line 210 of file IODataManager.cpp.

210  {
211  if ( !con ) return error( "Severe logic bug: No connection object avalible.", true );
212 
213  if ( con->isConnected() ) {
214  con->resetAge();
215  return StatusCode::SUCCESS;
216  }
217  auto i = m_connectionMap.find( con->name() );
218  if ( i != m_connectionMap.end() ) {
219  Connection* c = i->second->connection;
220  if ( c != con ) {
221  m_incSvc->fireIncident( Incident( con->name(), IncidentType::FailInputFile ) );
222  return error( "Severe logic bug: Twice identical connection object for DSN:" + con->name(), true );
223  }
224  if ( reconnect( i->second ).isSuccess() ) return StatusCode::SUCCESS;
225  }
226  return StatusCode::FAILURE;
227 }

◆ finalize()

StatusCode IODataManager::finalize ( )
override

IService implementation: finalize the service.

Definition at line 75 of file IODataManager.cpp.

75  {
76  m_catalog = nullptr; // release
77  return Service::finalize();
78 }

◆ initialize()

StatusCode IODataManager::initialize ( )
override

IService implementation: initialize the service.

IService implementation: Db event selector override.

Definition at line 52 of file IODataManager.cpp.

52  {
53  // Initialize base class
55  MsgStream log( msgSvc(), name() );
56  if ( !status.isSuccess() ) {
57  log << MSG::ERROR << "Error initializing base class Service!" << endmsg;
58  return status;
59  }
60  // Retrieve conversion service handling event iteration
62  if ( !m_catalog ) {
63  log << MSG::ERROR << "Unable to localize interface IFileCatalog from service:" << m_catalogSvcName << endmsg;
64  return StatusCode::FAILURE;
65  }
66  m_incSvc = serviceLocator()->service( "IncidentSvc" );
67  if ( !m_incSvc ) {
68  log << MSG::ERROR << "Error initializing IncidentSvc Service!" << endmsg;
69  return status;
70  }
71  return status;
72 }

◆ read()

StatusCode IODataManager::read ( Connection *  ioDesc,
void *const  data,
size_t  len 
)
override

Read raw byte buffer from input stream.

Definition at line 115 of file IODataManager.cpp.

115  {
116  return establishConnection( con ).isSuccess() ? con->read( data, len ) : StatusCode::FAILURE;
117 }

◆ reconnect()

StatusCode IODataManager::reconnect ( Entry e)
protected

Definition at line 166 of file IODataManager.cpp.

166  {
168  if ( e && e->connection ) {
169  switch ( e->ioType ) {
170  case Connection::READ:
171  sc = e->connection->connectRead();
172  break;
173  case Connection::UPDATE:
174  case Connection::CREATE:
175  case Connection::RECREATE:
176  sc = e->connection->connectWrite( e->ioType );
177  break;
178  default:
179  return StatusCode::FAILURE;
180  }
181  if ( sc.isSuccess() && e->ioType == Connection::READ ) {
182  std::vector<Entry*> to_retire;
183  e->connection->resetAge();
184  transform_copy_if( std::begin( m_connectionMap ), std::end( m_connectionMap ), std::back_inserter( to_retire ),
185  select2nd, [&]( Entry* i ) {
186  IDataConnection* c = i->connection;
187  return e->connection != c && c->isConnected() && !i->keepOpen && c->ageFile() > m_ageLimit;
188  } );
189  if ( !to_retire.empty() ) {
190  MsgStream log( msgSvc(), name() );
191  std::for_each( std::begin( to_retire ), std::end( to_retire ), [&]( Entry* j ) {
192  IDataConnection* c = j->connection;
193  c->disconnect().ignore( /* AUTOMATICALLY ADDED FOR gaudi/Gaudi!763 */ );
194  log << MSG::INFO << "Disconnect from dataset " << c->pfn() << " [" << c->fid() << "]" << endmsg;
195  } );
196  }
197  }
198  }
199  return sc;
200 }

◆ seek()

long long int IODataManager::seek ( Connection *  ioDesc,
long long int  where,
int  origin 
)
override

Seek on the file described by ioDesc. Arguments as in ::seek()

Definition at line 125 of file IODataManager.cpp.

125  {
126  return establishConnection( con ).isSuccess() ? con->seek( where, origin ) : -1;
127 }

◆ write()

StatusCode IODataManager::write ( Connection *  con,
const void *  data,
int  len 
)
override

Write raw byte buffer to output stream.

Definition at line 120 of file IODataManager.cpp.

120  {
121  return establishConnection( con ).isSuccess() ? con->write( data, len ) : StatusCode::FAILURE;
122 }

Member Data Documentation

◆ m_ageLimit

Gaudi::Property<int> Gaudi::IODataManager::m_ageLimit { this, "AgeLimit", 2, "age limit" }
protected

Definition at line 58 of file IODataManager.h.

◆ m_catalog

SmartIF<IFileCatalog> Gaudi::IODataManager::m_catalog
protected

Reference to file catalog.

Definition at line 66 of file IODataManager.h.

◆ m_catalogSvcName

Gaudi::Property<std::string> Gaudi::IODataManager::m_catalogSvcName
protected
Initial value:
{ this, "CatalogType", "Gaudi::MultiFileCatalog/FileCatalog",
"name of the file catalog service" }

Definition at line 53 of file IODataManager.h.

◆ m_connectionMap

ConnectionMap Gaudi::IODataManager::m_connectionMap
protected

Map with I/O descriptors.

Definition at line 64 of file IODataManager.h.

◆ m_disablePFNWarning

Gaudi::Property<bool> Gaudi::IODataManager::m_disablePFNWarning
protected
Initial value:
{
this, "DisablePFNWarning", false,
"if set to True, we will not report when a file is opened by its physical name" }

Definition at line 59 of file IODataManager.h.

◆ m_fidMap

FidMap Gaudi::IODataManager::m_fidMap
protected

Map of FID to PFN.

Definition at line 68 of file IODataManager.h.

◆ m_incSvc

SmartIF<IIncidentSvc> Gaudi::IODataManager::m_incSvc
protected

Definition at line 74 of file IODataManager.h.

◆ m_quarantine

Gaudi::Property<bool> Gaudi::IODataManager::m_quarantine
protected
Initial value:
{ this, "QuarantineFiles", true,
"if unaccessible files should be quarantines in job" }

Definition at line 56 of file IODataManager.h.

◆ m_useGFAL

Gaudi::Property<bool> Gaudi::IODataManager::m_useGFAL { this, "UseGFAL", true, "flag for auto gfal data access" }
protected

Definition at line 55 of file IODataManager.h.


The documentation for this class was generated from the following files:
std::for_each
T for_each(T... args)
Service::initialize
StatusCode initialize() override
Definition: Service.cpp:118
std::string
STL class.
std::exception
STL class.
Gaudi.Configuration.log
log
Definition: Configuration.py:28
Gaudi::IODataManager::Entry::connection
IDataConnection * connection
Definition: IODataManager.h:45
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:314
MSG::INFO
@ INFO
Definition: IMessageSvc.h:25
Gaudi::IODataManager::m_quarantine
Gaudi::Property< bool > m_quarantine
Definition: IODataManager.h:56
Gaudi::IDataConnection
Definition: IIODataManager.h:34
std::vector
STL class.
std::find
T find(T... args)
std::string::length
T length(T... args)
Gaudi::IODataManager::m_useGFAL
Gaudi::Property< bool > m_useGFAL
Definition: IODataManager.h:55
std::back_inserter
T back_inserter(T... args)
Gaudi::getAppReturnCode
int getAppReturnCode(const SmartIF< IProperty > &appmgr)
Get the application (current) return code.
Definition: AppReturnCode.h:79
Gaudi::IODataManager::establishConnection
StatusCode establishConnection(Connection *con)
Definition: IODataManager.cpp:210
Io::READ
@ READ
Definition: IFileMgr.h:37
GaudiMP.FdsRegistry.msg
msg
Definition: FdsRegistry.py:19
std::map::emplace
T emplace(T... args)
MSG::WARNING
@ WARNING
Definition: IMessageSvc.h:25
gaudirun.c
c
Definition: gaudirun.py:525
Gaudi::IODataManager::error
StatusCode error(CSTR msg, bool rethrow)
Small routine to issue exceptions.
Definition: IODataManager.cpp:81
Service::finalize
StatusCode finalize() override
Definition: Service.cpp:222
AvalancheSchedulerErrorTest.msgSvc
msgSvc
Definition: AvalancheSchedulerErrorTest.py:80
System::breakExecution
GAUDI_API long breakExecution()
Break the execution of the application and invoke the debugger.
Definition: Debugger.cpp:57
IProperty
Definition: IProperty.h:33
Gaudi::IODataManager::m_ageLimit
Gaudi::Property< int > m_ageLimit
Definition: IODataManager.h:58
Gaudi::IODataManager::m_connectionMap
ConnectionMap m_connectionMap
Map with I/O descriptors.
Definition: IODataManager.h:64
Service::name
const std::string & name() const override
Retrieve name of the service
Definition: Service.cpp:332
StatusCode
Definition: StatusCode.h:65
Gaudi::setAppReturnCode
StatusCode setAppReturnCode(SmartIF< IProperty > &appmgr, int value, bool force=false)
Set the application return code.
Definition: AppReturnCode.h:59
ProduceConsume.j
j
Definition: ProduceConsume.py:101
Io::UNKNOWN
@ UNKNOWN
Definition: IFileMgr.h:156
std::string::c_str
T c_str(T... args)
Gaudi::IODataManager::connection
Connection * connection(const std::string &dsn) const override
Retrieve known connection.
Definition: IODataManager.cpp:203
std::map::erase
T erase(T... args)
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:203
Gaudi::IODataManager::m_catalogSvcName
Gaudi::Property< std::string > m_catalogSvcName
Definition: IODataManager.h:53
MsgStream
Definition: MsgStream.h:34
Gaudi::IODataManager::m_catalog
SmartIF< IFileCatalog > m_catalog
Reference to file catalog.
Definition: IODataManager.h:66
StatusCode::ignore
const StatusCode & ignore() const
Allow discarding a StatusCode without warning.
Definition: StatusCode.h:139
SmartIF::as
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
Definition: SmartIF.h:117
std::string::substr
T substr(T... args)
Gaudi::IODataManager::reconnect
StatusCode reconnect(Entry *e)
Definition: IODataManager.cpp:166
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
Gaudi::IODataManager::m_fidMap
FidMap m_fidMap
Map of FID to PFN.
Definition: IODataManager.h:68
std::set::begin
T begin(T... args)
std::set::insert
T insert(T... args)
MSG::ERROR
@ ERROR
Definition: IMessageSvc.h:25
std::vector::empty
T empty(T... args)
Gaudi::IODataManager::m_disablePFNWarning
Gaudi::Property< bool > m_disablePFNWarning
Definition: IODataManager.h:59
std::set::end
T end(T... args)
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
Incident
Definition: Incident.h:27
Gaudi::IDataConnection::BAD_DATA_CONNECTION
@ BAD_DATA_CONNECTION
Definition: IIODataManager.h:51
Gaudi::IODataManager::m_incSvc
SmartIF< IIncidentSvc > m_incSvc
Definition: IODataManager.h:74
std::exception::what
T what(T... args)
Gaudi::IODataManager::connectDataIO
StatusCode connectDataIO(int typ, IoType rw, CSTR fn, CSTR technology, bool keep, Connection *con)
Definition: IODataManager.cpp:229
Service::serviceLocator
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator
Definition: Service.cpp:335
Io::CREATE
@ CREATE
Definition: IFileMgr.h:41