The Gaudi Framework  master (37c0b60a)
RootFileHandler Class Reference

#include </builds/gaudi/Gaudi/GaudiSvc/src/FileMgr/RootFileHandler.h>

Collaboration diagram for RootFileHandler:

Public Member Functions

 RootFileHandler (IMessageSvc *, const std::string &userProxy, const std::string &certDir)
 
Io::open_t openRootFile (const std::string &n, const Io::IoFlags &f, const std::string &desc, Io::Fd &fd, void *&ptr)
 
Io::close_t closeRootFile (void *ptr)
 
Io::reopen_t reopenRootFile (void *, const Io::IoFlags &)
 
bool setupSSL ()
 

Private Attributes

MsgStream m_log
 
int m_level
 
std::string m_userProxy
 
std::string m_certDir
 
bool m_ssl_setup = false
 

Detailed Description

Definition at line 27 of file RootFileHandler.h.

Constructor & Destructor Documentation

◆ RootFileHandler()

RootFileHandler::RootFileHandler ( IMessageSvc msg,
const std::string userProxy,
const std::string certDir 
)

Definition at line 25 of file RootFileHandler.cpp.

26  : m_log( msg, "RootFileHandler" ), m_userProxy( p ), m_certDir( c ) {
27  // Protect against multiple instances of TROOT
28  if ( !gROOT ) { static TROOT root( "root", "ROOT I/O" ); }
29  m_level = msg->outputLevel( "RootFileHandler" );
30 }

Member Function Documentation

◆ closeRootFile()

Io::close_t RootFileHandler::closeRootFile ( void *  ptr)

Definition at line 92 of file RootFileHandler.cpp.

92  {
93 
94  if ( m_log.level() <= MSG::DEBUG ) m_log << MSG::DEBUG << "closeRootFile(ptr:" << ptr << ")" << endmsg;
95 
96  if ( !ptr ) {
97  m_log << MSG::ERROR << "Unable to close file: ptr == 0" << endmsg;
98  return -1;
99  }
100 
101  TFile* tf = static_cast<TFile*>( ptr );
102 
103  try {
104  tf->Close();
105  } catch ( const std::exception& Exception ) {
106  m_log << MSG::ERROR << "exception caught while trying to close root"
107  << " file" << Exception.what() << endmsg;
108  return -1;
109  } catch ( ... ) {
110  m_log << MSG::ERROR << "Problems closing ROOT file \"" << tf->GetName() << "\"" << endmsg;
111  return -1;
112  }
113 
114  return 0;
115 }

◆ openRootFile()

Io::open_t RootFileHandler::openRootFile ( const std::string n,
const Io::IoFlags f,
const std::string desc,
Io::Fd fd,
void *&  ptr 
)

Definition at line 34 of file RootFileHandler.cpp.

35  {
36 
38 
39  if ( m_log.level() <= MSG::DEBUG )
40  m_log << MSG::DEBUG << "openRootFile(\"" << n << "\"," << f << "," << desc << ")" << endmsg;
41 
42  ptr = nullptr;
43  fd = -1;
44 
45  std::string opt;
46 
47  if ( f == Io::READ ) {
48  opt = "READ";
49  } else if ( f == ( Io::WRITE | Io::CREATE | Io::EXCL ) ) {
50  opt = "NEW";
51  } else if ( f == ( Io::WRITE | Io::CREATE ) ) {
52  opt = "RECREATE";
53  } else if ( f | Io::APPEND ) {
54  opt = "UPDATE";
55  } else {
56  m_log << MSG::ERROR << "Don't know how to handle IoFlag " << f << endmsg;
57  return 1;
58  }
59 
61 
62  try {
63  tf.reset( TFile::Open( n.c_str(), opt.c_str() ) );
64  } catch ( const std::exception& Exception ) {
65  m_log << MSG::ERROR << "exception caught while trying to open root"
66  << " file for reading: " << Exception.what() << std::endl
67  << " -> file probably corrupt." << endmsg;
68  return 1;
69  } catch ( ... ) {
70  m_log << MSG::ERROR << "Problems opening input file \"" << n << "\": probably corrupt" << endmsg;
71  return 1;
72  }
73 
74  if ( !tf || !tf->IsOpen() ) {
75  m_log << MSG::ERROR << "Unable to open ROOT file \"" << n << "\" with options \"" << opt << "\"" << endmsg;
76 
77  tf.reset();
78  return 1;
79  }
80 
81  fd = tf->GetFd();
82 
83  ptr = tf.release();
84 
85  if ( m_log.level() <= MSG::DEBUG ) m_log << MSG::DEBUG << "opened TFile " << ptr << " Fd: " << fd << endmsg;
86 
87  return 0;
88 }

◆ reopenRootFile()

Io::reopen_t RootFileHandler::reopenRootFile ( void *  ,
const Io::IoFlags  
)

Definition at line 119 of file RootFileHandler.cpp.

119  {
120 
121  m_log << MSG::ERROR << "reopen not implemented" << endmsg;
122  return -1;
123 }

◆ setupSSL()

bool RootFileHandler::setupSSL ( )

Definition at line 127 of file RootFileHandler.cpp.

127  {
128 
129  if ( m_log.level() <= MSG::DEBUG ) m_log << MSG::DEBUG << "setupSSL" << endmsg;
130 
131  // don't set anything up
132  if ( m_userProxy == "NONE" || m_certDir == "NONE" ) {
133  m_ssl_setup = true;
134  return true;
135  }
136 
137  // get stuff from $X509_USER_PROXY and $X509_CERT_DIR env vars
138  if ( m_userProxy == "X509" ) {
139  if ( !System::getEnv( "X509_USER_PROXY", m_userProxy ) ) {
140  m_log << MSG::ERROR << "env var X509_USER_PROXY not set" << endmsg;
141  return false;
142  }
143  }
144 
145  if ( m_certDir == "X509" ) {
146  if ( !System::getEnv( "X509_CERT_DIR", m_certDir ) ) {
147  m_log << MSG::ERROR << "env var X509_CERT_DIR not set" << endmsg;
148  return false;
149  }
150  }
151 
152  if ( m_log.level() <= MSG::DEBUG )
153  m_log << MSG::DEBUG << "userProxy: " << m_userProxy << " certDir: " << m_certDir << endmsg;
154 
155  TSSLSocket::SetUpSSL( m_userProxy.c_str(), m_certDir.c_str(), m_userProxy.c_str(), m_userProxy.c_str() );
156 
157  m_ssl_setup = true;
158 
159  return true;
160 }

Member Data Documentation

◆ m_certDir

std::string RootFileHandler::m_certDir
private

Definition at line 44 of file RootFileHandler.h.

◆ m_level

int RootFileHandler::m_level
private

Definition at line 42 of file RootFileHandler.h.

◆ m_log

MsgStream RootFileHandler::m_log
private

Definition at line 41 of file RootFileHandler.h.

◆ m_ssl_setup

bool RootFileHandler::m_ssl_setup = false
private

Definition at line 45 of file RootFileHandler.h.

◆ m_userProxy

std::string RootFileHandler::m_userProxy
private

Definition at line 44 of file RootFileHandler.h.


The documentation for this class was generated from the following files:
MSG::DEBUG
@ DEBUG
Definition: IMessageSvc.h:25
std::string
STL class.
std::exception
STL class.
RootFileHandler::m_log
MsgStream m_log
Definition: RootFileHandler.h:41
RootFileHandler::m_ssl_setup
bool m_ssl_setup
Definition: RootFileHandler.h:45
gaudirun.fd
fd
Definition: gaudirun.py:630
System::getEnv
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition: System.cpp:390
GaudiMP.FdsRegistry.msg
msg
Definition: FdsRegistry.py:19
gaudiComponentHelp.root
root
Definition: gaudiComponentHelp.py:42
std::unique_ptr::release
T release(T... args)
gaudirun.c
c
Definition: gaudirun.py:525
Io::WRITE
@ WRITE
Definition: IFileMgr.h:38
std::unique_ptr::reset
T reset(T... args)
RootFileHandler::m_userProxy
std::string m_userProxy
Definition: RootFileHandler.h:44
RootFileHandler::m_level
int m_level
Definition: RootFileHandler.h:42
std::string::c_str
T c_str(T... args)
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202
cpluginsvc.n
n
Definition: cpluginsvc.py:234
RootFileHandler::m_certDir
std::string m_certDir
Definition: RootFileHandler.h:44
Io::EXCL
@ EXCL
Definition: IFileMgr.h:42
std::endl
T endl(T... args)
Io::CREATE
@ CREATE
Definition: IFileMgr.h:41
MSG::ERROR
@ ERROR
Definition: IMessageSvc.h:25
Io::APPEND
@ APPEND
Definition: IFileMgr.h:45
Gaudi::Details::Property::ParsingErrorPolicy::Exception
@ Exception
std::unique_ptr< TFile >
MsgStream::setLevel
void setLevel(int level)
Update outputlevel.
Definition: MsgStream.h:107
MsgStream::level
MSG::Level level() const
Retrieve output level.
Definition: MsgStream.h:112
Io::READ
@ READ
Definition: IFileMgr.h:37