Logo ROOT  
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
51class TFileStager;
52class TSocket;
53class XrdClient;
54
55class TXNetFile : public TNetFile {
56
57friend class TXNetSystem;
58
59private:
60 // Static members
61 static Bool_t fgInitDone; // Avoid initializing more than once
62 static Bool_t fgRootdBC; // Control rootd backward compatibility
63 static TFileStager *fgFileStager; // Stager for IsStaged checks
64
65 // Members
66 XrdClient *fClient; // Handle to the client object
67 Bool_t fIsRootd; // Nature of remote file server
68 void *fInitMtx; // Protects fInitDone, serializes the
69 // attempts to Init() for this object only
70
71 // Methods
72 TXNetFile(const TXNetFile&); // Not implemented
73 TXNetFile& operator=(const TXNetFile&); // Not implemented
74 void CreateXClient(const char *url, Option_t *option, Int_t netopt,
75 Bool_t parallelopen);
76
77 Int_t ParseOptions(const char *opts, Int_t &cachesz, Int_t &readaheadsz,
78 Int_t &rmpolicy, Int_t &mxredir, Int_t &rastrategy, Int_t &readtrimblksz);
79
80 // Synchronizes the cache size in XrdClient
81 // XrdClient cannot have a cache size smaller than the one in TFile
83
84 void Init(Bool_t create);
85 Bool_t Open(Option_t *option, Bool_t parallelopen);
86 Int_t SysStat(Int_t fd, Long_t *id, Long64_t *size, Long_t *flags,
87 Long_t *modtime);
88 Int_t SysOpen(const char *pathname, Int_t flags, UInt_t mode);
90
91 // Static methods
92 static void FormUrl(TUrl uut, TString &uu);
94 static void SetEnv();
95
96public:
98 TXNetFile(const char *url, Option_t *option = "", const char *fTitle = "",
99 Int_t compress = 1, Int_t netopt = 0, Bool_t parallelopen = kFALSE,
100 const char *logicalurl = 0);
101
102 virtual ~TXNetFile();
103
104 virtual void Close(const Option_t *opt ="");
105 virtual void ResetCache();
106 virtual void Flush();
107 virtual Int_t GetBytesToPrefetch() const;
108 virtual Bool_t ReadBufferAsync(Long64_t offs, Int_t len);
110 virtual Bool_t IsOpen() const;
111
112 virtual void Print(Option_t *option="") const;
113 virtual Bool_t ReadBuffer(char *buf, Int_t len);
114 virtual Bool_t ReadBuffer(char *buf, Long64_t pos, Int_t len);
115 virtual Bool_t ReadBuffers(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf);
116 virtual Int_t ReOpen(const Option_t *mode);
117 virtual Bool_t WriteBuffer(const char *buffer, Int_t BufferLength);
118
119 ClassDef(TXNetFile,0) // TFile implementation to deal with new xrootd server.
120};
121
122#endif
int Int_t
Definition: RtypesCore.h:43
const Bool_t kFALSE
Definition: RtypesCore.h:90
long Long_t
Definition: RtypesCore.h:52
bool Bool_t
Definition: RtypesCore.h:61
long long Long64_t
Definition: RtypesCore.h:71
const char Option_t
Definition: RtypesCore.h:64
#define ClassDef(name, id)
Definition: Rtypes.h:322
EAsyncOpenStatus
Asynchronous open request status.
Definition: TFile.h:64
TString fTitle
Definition: TNamed.h:33
Basic string class.
Definition: TString.h:131
This class represents a WWW compatible URL.
Definition: TUrl.h:35
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
virtual void Print(Option_t *option="") const
Print the local statistics.
Definition: TXNetFile.cxx:1442
void SynchronizeCacheSize()
Synchronize the cache size Alternative purging policy.
Definition: TXNetFile.cxx:1384
TXNetFile()
Definition: TXNetFile.h:97
static TFileStager * fgFileStager
Definition: TXNetFile.h:63
TXNetFile(const TXNetFile &)
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
static Bool_t fgInitDone
Definition: TXNetFile.h:61
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
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 ~TXNetFile()
Destructor.
Definition: TXNetFile.cxx:156
void Init(Bool_t create)
Initialize the file.
Definition: TXNetFile.cxx:920
static void SetEnv()
Set the relevant environment variables.
Definition: TXNetFile.cxx:1201
virtual void ResetCache()
Reset the cache.
Definition: TXNetFile.cxx:1416
Bool_t fIsRootd
Definition: TXNetFile.h:67
static void FormUrl(TUrl uut, TString &uu)
Form url for rootd socket.
Definition: TXNetFile.cxx:170
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
virtual Bool_t ReadBuffer(char *buf, Int_t len)
Override TNetFile::ReadBuffer to deal with the xrootd server.
Definition: TXNetFile.cxx:591
virtual Bool_t ReadBufferAsync(Long64_t offs, Int_t len)
Implementation dealing with the xrootd server.
Definition: TXNetFile.cxx:696
virtual Bool_t WriteBuffer(const char *buffer, Int_t BufferLength)
Override TNetFile::WriteBuffer to deal with the xrootd server.
Definition: TXNetFile.cxx:860
void * fInitMtx
Definition: TXNetFile.h:68
XrdClient * fClient
Definition: TXNetFile.h:66
virtual void Close(const Option_t *opt="")
Close the file (see TNetFile::Close() or TFile::Close() for more details).
Definition: TXNetFile.cxx:1037
virtual Int_t GetBytesToPrefetch() const
Max number of bytes to prefetch.
Definition: TXNetFile.cxx:1425
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
virtual void Flush()
Flushes un-written data.
Definition: TXNetFile.cxx:1061
Int_t SysClose(Int_t fd)
Override TNetFile::SysClose (see parent's method for more details).
Definition: TXNetFile.cxx:1146
Bool_t Open(Option_t *option, Bool_t parallelopen)
The real creation work is done here.
Definition: TXNetFile.cxx:476
virtual Bool_t IsOpen() const
Return kTRUE if the file is open, kFALSE otherwise.
Definition: TXNetFile.cxx:983
static Int_t GetRootdProtocol(TSocket *s)
Find out the remote rootd protocol version.
Definition: TXNetFile.cxx:421
TXNetFile & operator=(const TXNetFile &)
virtual TFile::EAsyncOpenStatus GetAsyncOpenStatus()
Return status of asynchronous request.
Definition: TXNetFile.cxx:1001
static Bool_t fgRootdBC
Definition: TXNetFile.h:62
static constexpr double s