Logo ROOT   6.10/09
Reference Guide
TXNetFile.h
Go to the documentation of this file.
1 // @(#)root/netx:$Id$
2 /*************************************************************************
3  * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
4  * All rights reserved. *
5  * *
6  * For the licensing terms see $ROOTSYS/LICENSE. *
7  * For the list of contributors see $ROOTSYS/README/CREDITS. *
8  *************************************************************************/
9 
10 #ifndef ROOT_TXNetFile
11 #define ROOT_TXNetFile
12 
13 
14 //////////////////////////////////////////////////////////////////////////
15 // //
16 // TXNetFile //
17 // //
18 // Authors: Alvise Dorigo, Fabrizio Furano //
19 // INFN Padova, 2003 //
20 // Interfaced to the posix client: G. Ganis, CERN //
21 // //
22 // TXNetFile is an extension of TNetFile able to deal with new xrootd //
23 // server. Its new features are: //
24 // - Automatic server kind recognition (xrootd load balancer, xrootd //
25 // data server, old rootd) //
26 // - Backward compatibility with old rootd server (acts as an old //
27 // TNetFile) //
28 // - Fault tolerance for read/write operations (read/write timeouts //
29 // and retry) //
30 // - Internal connection timeout (tunable indipendently from the OS //
31 // one) handled by threads //
32 // - handling of redirections from server //
33 // - Single TCP physical channel for multiple TXNetFile's instances //
34 // inside the same application //
35 // So, each TXNetFile object client must send messages containing //
36 // its ID (streamid). The server, of course, will respond with //
37 // messages containing the client's ID, in order to make the client //
38 // able to recognize its message by matching its streamid with that //
39 // one contained in the server's response. //
40 // - Tunable log verbosity level (0 = nothing, 3 = dump read/write //
41 // buffers too!) //
42 // - Many parameters configurable via TEnv facility (see SetParm() //
43 // methods) //
44 // //
45 //////////////////////////////////////////////////////////////////////////
46 
47 #include "TNetFile.h"
48 #include "TString.h"
49 #include "TUrl.h"
50 
51 class TFileStager;
52 class TSocket;
53 class XrdClient;
54 
55 class TXNetFile : public TNetFile {
56 
57 friend class TXNetSystem;
58 
59 private:
60  // Members
61  XrdClient *fClient; // Handle to the client object
62  Bool_t fIsRootd; // Nature of remote file server
63 
64  // Static members
65  static Bool_t fgInitDone; // Avoid initializing more than once
66  static Bool_t fgRootdBC; // Control rootd backward compatibility
67  static TFileStager *fgFileStager; // Stager for IsStaged checks
68 
69  void *fInitMtx; // Protects fInitDone, serializes the
70  // attempts to Init() for this object only
71 
72  // Methods
73  TXNetFile(const TXNetFile&); // Not implemented
74  TXNetFile& operator=(const TXNetFile&); // Not implemented
75  void CreateXClient(const char *url, Option_t *option, Int_t netopt,
76  Bool_t parallelopen);
77 
78  Int_t ParseOptions(const char *opts, Int_t &cachesz, Int_t &readaheadsz,
79  Int_t &rmpolicy, Int_t &mxredir, Int_t &rastrategy, Int_t &readtrimblksz);
80 
81  // Synchronizes the cache size in XrdClient
82  // XrdClient cannot have a cache size smaller than the one in TFile
83  void SynchronizeCacheSize();
84 
85  void Init(Bool_t create);
86  Bool_t Open(Option_t *option, Bool_t parallelopen);
87  Int_t SysStat(Int_t fd, Long_t *id, Long64_t *size, Long_t *flags,
88  Long_t *modtime);
89  Int_t SysOpen(const char *pathname, Int_t flags, UInt_t mode);
90  Int_t SysClose(Int_t fd);
91 
92  // Static methods
93  static void FormUrl(TUrl uut, TString &uu);
94  static Int_t GetRootdProtocol(TSocket *s);
95  static void SetEnv();
96 
97 public:
98  TXNetFile() : TNetFile(), fClient(0), fIsRootd(0), fInitMtx(0) {}
99  TXNetFile(const char *url, Option_t *option = "", const char *fTitle = "",
100  Int_t compress = 1, Int_t netopt = 0, Bool_t parallelopen = kFALSE,
101  const char *logicalurl = 0);
102 
103  virtual ~TXNetFile();
104 
105  virtual void Close(const Option_t *opt ="");
106  virtual void ResetCache();
107  virtual void Flush();
108  virtual Int_t GetBytesToPrefetch() const;
109  virtual Bool_t ReadBufferAsync(Long64_t offs, Int_t len);
111  virtual Bool_t IsOpen() const;
112 
113  virtual void Print(Option_t *option="") const;
114  virtual Bool_t ReadBuffer(char *buf, Int_t len);
115  virtual Bool_t ReadBuffer(char *buf, Long64_t pos, Int_t len);
116  virtual Bool_t ReadBuffers(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf);
117  virtual Int_t ReOpen(const Option_t *mode);
118  virtual Bool_t WriteBuffer(const char *buffer, Int_t BufferLength);
119 
120  ClassDef(TXNetFile,0) // TFile implementation to deal with new xrootd server.
121 };
122 
123 #endif
TString fTitle
Definition: TNamed.h:33
virtual ~TXNetFile()
Destructor.
Definition: TXNetFile.cxx:156
Int_t ParseOptions(const char *opts, Int_t &cachesz, Int_t &readaheadsz, Int_t &rmpolicy, Int_t &mxredir, Int_t &rastrategy, Int_t &readtrimblksz)
Parse input options for cache parameters.
Definition: TXNetFile.cxx:199
void Init(Bool_t create)
Initialize the file.
Definition: TXNetFile.cxx:920
long long Long64_t
Definition: RtypesCore.h:69
EAsyncOpenStatus
Asynchronous open request status.
Definition: TFile.h:57
Int_t SysStat(Int_t fd, Long_t *id, Long64_t *size, Long_t *flags, Long_t *modtime)
Override TNetFile::SysStat (see parent's method for more details).
Definition: TXNetFile.cxx:1099
XrdClient * fClient
Definition: TXNetFile.h:61
const char Option_t
Definition: RtypesCore.h:62
This class represents a WWW compatible URL.
Definition: TUrl.h:35
virtual TFile::EAsyncOpenStatus GetAsyncOpenStatus()
Return status of asynchronous request.
Definition: TXNetFile.cxx:1001
Basic string class.
Definition: TString.h:129
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
static Int_t GetRootdProtocol(TSocket *s)
Find out the remote rootd protocol version.
Definition: TXNetFile.cxx:421
static Bool_t fgRootdBC
Definition: TXNetFile.h:66
virtual Int_t ReOpen(const Option_t *mode)
Re-open the file (see TNetFile::ReOpen() or TFile::ReOpen() for more details).
Definition: TXNetFile.cxx:1022
virtual Bool_t ReadBuffer(char *buf, Int_t len)
Override TNetFile::ReadBuffer to deal with the xrootd server.
Definition: TXNetFile.cxx:591
TXNetFile & operator=(const TXNetFile &)
TXNetFile()
Definition: TXNetFile.h:98
#define ClassDef(name, id)
Definition: Rtypes.h:297
static Bool_t fgInitDone
Definition: TXNetFile.h:65
static TFileStager * fgFileStager
Definition: TXNetFile.h:67
virtual Bool_t ReadBufferAsync(Long64_t offs, Int_t len)
Implementation dealing with the xrootd server.
Definition: TXNetFile.cxx:696
static void SetEnv()
Set the relevant environment variables.
Definition: TXNetFile.cxx:1201
virtual void ResetCache()
Reset the cache.
Definition: TXNetFile.cxx:1416
Int_t SysOpen(const char *pathname, Int_t flags, UInt_t mode)
Override TNetFile::SysOpen (see parent's method for more details).
Definition: TXNetFile.cxx:1170
static void FormUrl(TUrl uut, TString &uu)
Form url for rootd socket.
Definition: TXNetFile.cxx:170
unsigned int UInt_t
Definition: RtypesCore.h:42
virtual void Flush()
Flushes un-written data.
Definition: TXNetFile.cxx:1061
void * fInitMtx
Definition: TXNetFile.h:69
virtual Int_t GetBytesToPrefetch() const
Max number of bytes to prefetch.
Definition: TXNetFile.cxx:1425
const Bool_t kFALSE
Definition: RtypesCore.h:92
Bool_t fIsRootd
Definition: TXNetFile.h:62
long Long_t
Definition: RtypesCore.h:50
virtual Bool_t WriteBuffer(const char *buffer, Int_t BufferLength)
Override TNetFile::WriteBuffer to deal with the xrootd server.
Definition: TXNetFile.cxx:860
virtual Bool_t IsOpen() const
Return kTRUE if the file is open, kFALSE otherwise.
Definition: TXNetFile.cxx:983
virtual void Close(const Option_t *opt="")
Close the file (see TNetFile::Close() or TFile::Close() for more details).
Definition: TXNetFile.cxx:1037
Bool_t Open(Option_t *option, Bool_t parallelopen)
The real creation work is done here.
Definition: TXNetFile.cxx:476
void CreateXClient(const char *url, Option_t *option, Int_t netopt, Bool_t parallelopen)
The real creation work is done here.
Definition: TXNetFile.cxx:251
Int_t SysClose(Int_t fd)
Override TNetFile::SysClose (see parent's method for more details).
Definition: TXNetFile.cxx:1146
virtual void Print(Option_t *option="") const
Print the local statistics.
Definition: TXNetFile.cxx:1442
virtual Bool_t ReadBuffers(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf)
Read the nbuf blocks described in arrays pos and len, where pos[i] is the seek position of block i of...
Definition: TXNetFile.cxx:763
void SynchronizeCacheSize()
Synchronize the cache size Alternative purging policy.
Definition: TXNetFile.cxx:1384