The Gaudi Framework  master (ff829712)
Loading...
Searching...
No Matches
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 26 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}
std::string m_certDir
std::string m_userProxy

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}
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition MsgStream.h:198
@ DEBUG
Definition IMessageSvc.h:22
@ ERROR
Definition IMessageSvc.h:22

◆ 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
37 m_log.setLevel( m_level );
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
60 std::unique_ptr<TFile> tf;
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}
@ READ
Definition IFileMgr.h:30
@ CREATE
Definition IFileMgr.h:34
@ WRITE
Definition IFileMgr.h:31
@ EXCL
Definition IFileMgr.h:35
@ APPEND
Definition IFileMgr.h:38

◆ 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}
GAUDI_API std::vector< std::string > getEnv()
get all environment variables
Definition System.cpp:356

Member Data Documentation

◆ m_certDir

std::string RootFileHandler::m_certDir
private

Definition at line 43 of file RootFileHandler.h.

◆ m_level

int RootFileHandler::m_level
private

Definition at line 41 of file RootFileHandler.h.

◆ m_log

MsgStream RootFileHandler::m_log
private

Definition at line 40 of file RootFileHandler.h.

◆ m_ssl_setup

bool RootFileHandler::m_ssl_setup = false
private

Definition at line 44 of file RootFileHandler.h.

◆ m_userProxy

std::string RootFileHandler::m_userProxy
private

Definition at line 43 of file RootFileHandler.h.


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