xrootd
XrdTpcTPC.hh
Go to the documentation of this file.
1 
2 #include <memory>
3 #include <string>
4 #include <vector>
5 
7 
9 
10 class XrdOucErrInfo;
11 class XrdOucStream;
12 class XrdSfsFile;
13 class XrdSfsFileSystem;
14 typedef void CURL;
15 
16 namespace TPC {
17 class State;
18 
19 class TPCHandler : public XrdHttpExtHandler {
20 public:
21  TPCHandler(XrdSysError *log, const char *config, XrdOucEnv *myEnv);
22  virtual ~TPCHandler();
23 
24  virtual bool MatchesPath(const char *verb, const char *path);
25  virtual int ProcessReq(XrdHttpExtReq &req);
26  // Abstract method in the base class, but does not seem to be used
27  virtual int Init(const char *cfgfile) {return 0;}
28 
29 private:
31 
32  static std::string GetAuthz(XrdHttpExtReq &req);
33 
34  int RedirectTransfer(const std::string &redirect_resource, XrdHttpExtReq &req, XrdOucErrInfo &error);
35 
36  int OpenWaitStall(XrdSfsFile &fh, const std::string &resource, int mode,
37  int openMode, const XrdSecEntity &sec,
38  const std::string &authz);
39 
40 #ifdef XRD_CHUNK_RESP
41  int DetermineXferSize(CURL *curl, XrdHttpExtReq &req, TPC::State &state,
42  bool &success);
43 
44  int SendPerfMarker(XrdHttpExtReq &req, off_t bytes_transferred);
45 
46  // Perform the libcurl transfer, periodically sending back chunked updates.
47  int RunCurlWithUpdates(CURL *curl, XrdHttpExtReq &req, TPC::State &state,
48  const char *log_prefix);
49 
50  // Experimental multi-stream version of RunCurlWithUpdates
51  int RunCurlWithStreams(XrdHttpExtReq &req, TPC::State &state,
52  const char *log_prefix, size_t streams);
53  int RunCurlWithStreamsImpl(XrdHttpExtReq &req, TPC::State &state,
54  const char *log_prefix, size_t streams,
55  std::vector<TPC::State*> streams_handles);
56 #else
57  int RunCurlBasic(CURL *curl, XrdHttpExtReq &req, TPC::State &state,
58  const char *log_prefix);
59 #endif
60 
61  int ProcessPushReq(const std::string & resource, XrdHttpExtReq &req);
62  int ProcessPullReq(const std::string &resource, XrdHttpExtReq &req);
63 
64  bool ConfigureFSLib(XrdOucStream &Config, std::string &path1, bool &path1_alt,
65  std::string &path2, bool &path2_alt);
66  bool Configure(const char *configfn, XrdOucEnv *myEnv);
67 
68  static int m_marker_period;
69  static size_t m_block_size;
71  std::string m_cadir;
73  static uint64_t m_monid;
75  std::unique_ptr<XrdSfsFileSystem> m_sfs;
78 
79  // 16 blocks in flight at 16 MB each, meaning that there will be up to 256MB
80  // in flight; this is equal to the bandwidth delay product of a 200ms transcontinental
81  // connection at 10Gbps.
82 #ifdef USE_PIPELINING
83  static const int m_pipelining_multiplier = 16;
84 #else
85  static const int m_pipelining_multiplier = 1;
86 #endif
87 };
88 }
Definition: XrdTpcState.hh:18
std::unique_ptr< XrdSfsFileSystem > m_sfs
Definition: XrdTpcTPC.hh:75
void CURL
Definition: XrdTpcTPC.hh:13
int RedirectTransfer(const std::string &redirect_resource, XrdHttpExtReq &req, XrdOucErrInfo &error)
XrdSysError & m_log
Definition: XrdTpcTPC.hh:74
void * m_handle_base
Definition: XrdTpcTPC.hh:76
bool m_desthttps
Definition: XrdTpcTPC.hh:70
virtual int ProcessReq(XrdHttpExtReq &req)
Definition: XrdOucStream.hh:45
static size_t m_block_size
Definition: XrdTpcTPC.hh:69
int RunCurlBasic(CURL *curl, XrdHttpExtReq &req, TPC::State &state, const char *log_prefix)
Definition: XrdSysError.hh:89
std::string m_cadir
Definition: XrdTpcTPC.hh:71
static const int m_pipelining_multiplier
Definition: XrdTpcTPC.hh:85
bool ConfigureFSLib(XrdOucStream &Config, std::string &path1, bool &path1_alt, std::string &path2, bool &path2_alt)
static std::string GetAuthz(XrdHttpExtReq &req)
Definition: XrdSysPthread.hh:165
bool Configure(const char *configfn, XrdOucEnv *myEnv)
virtual int Init(const char *cfgfile)
Initializes the external request handler.
Definition: XrdTpcTPC.hh:27
TPCHandler(XrdSysError *log, const char *config, XrdOucEnv *myEnv)
int OpenWaitStall(XrdSfsFile &fh, const std::string &resource, int mode, int openMode, const XrdSecEntity &sec, const std::string &authz)
XrdCmsConfig Config
Definition: XrdTpcTPC.hh:19
Definition: XrdOucErrInfo.hh:97
virtual bool MatchesPath(const char *verb, const char *path)
Tells if the incoming path is recognized as one of the paths that have to be processed.
Definition: XrdOucEnv.hh:41
Definition: XrdHttpExtHandler.hh:79
int ProcessPullReq(const std::string &resource, XrdHttpExtReq &req)
Definition: XrdTpcState.hh:15
static int m_marker_period
Definition: XrdTpcTPC.hh:68
static uint64_t m_monid
Definition: XrdTpcTPC.hh:73
static XrdSysMutex m_monid_mutex
Definition: XrdTpcTPC.hh:72
int ProcessOptionsReq(XrdHttpExtReq &req)
Definition: XrdSecEntity.hh:51
int ProcessPushReq(const std::string &resource, XrdHttpExtReq &req)
virtual ~TPCHandler()
void * m_handle_chained
Definition: XrdTpcTPC.hh:77
Definition: XrdHttpExtHandler.hh:45
void CURL
Definition: XrdTpcState.hh:12