xrootd
HttpFilePlugIn.hh
Go to the documentation of this file.
1 
5 #ifndef __HTTP_FILE_PLUG_IN_
6 #define __HTTP_FILE_PLUG_IN_
7 
8 #include "davix.hpp"
9 
10 #include "XrdCl/XrdClFile.hh"
11 #include "XrdCl/XrdClFileSystem.hh"
13 
14 #include <cstdint>
15 #include <limits>
16 #include <mutex>
17 #include <unordered_map>
18 
19 // Indicate desire to avoid http "Range: bytes=234-567" header
20 // Some HTTP(s) data source does not honor Range request, and always start from i
21 // offset 0 when encounter a Range request, for example:
22 // https://portal.nersc.gov/archive/home/projects/incite11/www/20C_Reanalysis_version_3/everymember_anal_netcdf/daily/WSPD10m/WSPD10m_1808_daily.tar
23 //
24 // 1. via Unix env via: this is global, avoid http ranger for all URLs
25 #define HTTP_FILE_PLUG_IN_AVOIDRANGE_ENV "XRDCLHTTP_AVOIDRANGE"
26 // 2. via CGI in URl, this only affect the associated URL
27 #define HTTP_FILE_PLUG_IN_AVOIDRANGE_CGI "xrdclhttp_avoidrange"
28 
29 namespace XrdCl {
30 
31 class Log;
32 
33 class HttpFilePlugIn : public FilePlugIn {
34  public:
36  virtual ~HttpFilePlugIn() noexcept = default;
37 
38  //------------------------------------------------------------------------
40  //------------------------------------------------------------------------
41  virtual XRootDStatus Open( const std::string &url,
42  OpenFlags::Flags flags,
43  Access::Mode mode,
44  ResponseHandler *handler,
45  uint16_t timeout ) override;
46 
47  //------------------------------------------------------------------------
49  //------------------------------------------------------------------------
50  virtual XRootDStatus Close( ResponseHandler *handler,
51  uint16_t timeout ) override;
52 
53  //------------------------------------------------------------------------
55  //------------------------------------------------------------------------
56  virtual XRootDStatus Stat( bool force,
57  ResponseHandler *handler,
58  uint16_t timeout ) override;
59 
60  //------------------------------------------------------------------------
62  //------------------------------------------------------------------------
63  virtual XRootDStatus Read( uint64_t offset,
64  uint32_t size,
65  void *buffer,
66  ResponseHandler *handler,
67  uint16_t timeout ) override;
68 
69  //------------------------------------------------------------------------
71  //------------------------------------------------------------------------
72  virtual XRootDStatus PgRead( uint64_t offset,
73  uint32_t size,
74  void *buffer,
75  ResponseHandler *handler,
76  uint16_t timeout ) override;
77 
78  //------------------------------------------------------------------------
80  //------------------------------------------------------------------------
81  virtual XRootDStatus Write( uint64_t offset,
82  uint32_t size,
83  const void *buffer,
84  ResponseHandler *handler,
85  uint16_t timeout ) override;
86 
87  //------------------------------------------------------------------------
89  //------------------------------------------------------------------------
90  virtual XRootDStatus Sync( ResponseHandler *handler,
91  uint16_t timeout ) override;
92 
93  //------------------------------------------------------------------------
95  //------------------------------------------------------------------------
96  virtual XRootDStatus VectorRead( const ChunkList &chunks,
97  void *buffer,
98  XrdCl::ResponseHandler *handler,
99  uint16_t timeout ) override;
100 
101  //------------------------------------------------------------------------
103  //------------------------------------------------------------------------
104  virtual bool IsOpen() const override;
105 
106  //------------------------------------------------------------------------
108  //------------------------------------------------------------------------
109  virtual bool SetProperty( const std::string &name,
110  const std::string &value ) override;
111 
112  //------------------------------------------------------------------------
114  //------------------------------------------------------------------------
115  virtual bool GetProperty( const std::string &name,
116  std::string &value ) const override;
117 
118  private:
119 
120  Davix::Context davix_context_;
121  Davix::DavPosix davix_client_;
122 
123  DAVIX_FD* davix_fd_;
124 
125  std::mutex offset_locker;
126  uint64_t curr_offset;
127 
130 
131  bool is_open_;
132 
133  std::string url_;
134 
135  std::unordered_map<std::string, std::string> properties_;
136 
138 };
139 
140 }
141 
142 #endif // __HTTP_FILE_PLUG_IN_
XrdClFileSystem.hh
XrdCl::HttpFilePlugIn::IsOpen
virtual bool IsOpen() const override
XrdCl::ResponseHandler
Handle an async response.
Definition: XrdClXRootDResponses.hh:1051
XrdCl::HttpFilePlugIn::avoid_pread_
bool avoid_pread_
Definition: HttpFilePlugIn.hh:128
XrdCl::Access
Access mode.
Definition: XrdClFileSystem.hh:117
XrdCl::HttpFilePlugIn::PgRead
virtual XRootDStatus PgRead(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout) override
XrdCl::OpenImpl
Open operation (.
Definition: XrdClFileOperations.hh:97
XrdCl::VectorReadImpl
VectorRead operation (.
Definition: XrdClFileOperations.hh:519
XrdCl::HttpFilePlugIn::offset_locker
std::mutex offset_locker
Definition: HttpFilePlugIn.hh:125
XrdCl::HttpFilePlugIn::Write
virtual XRootDStatus Write(uint64_t offset, uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout) override
XrdCl::Log
Handle diagnostics.
Definition: XrdClLog.hh:101
XrdCl::HttpFilePlugIn::isChannelEncrypted
bool isChannelEncrypted
Definition: HttpFilePlugIn.hh:129
XrdCl::OpenFlags
Open flags, may be or'd when appropriate.
Definition: XrdClFileSystem.hh:71
XrdCl::CloseImpl
Close operation (.
Definition: XrdClFileOperations.hh:276
XrdCl::FilePlugIn
An interface for file plug-ins.
Definition: XrdClPlugInInterface.hh:39
XrdCl::HttpFilePlugIn::~HttpFilePlugIn
virtual ~HttpFilePlugIn() noexcept=default
XrdCl::HttpFilePlugIn
Definition: HttpFilePlugIn.hh:33
XrdCl::XRootDStatus
Request status.
Definition: XrdClXRootDResponses.hh:219
XrdCl::HttpFilePlugIn::properties_
std::unordered_map< std::string, std::string > properties_
Definition: HttpFilePlugIn.hh:135
XrdCl::ChunkList
std::vector< ChunkInfo > ChunkList
List of chunks.
Definition: XrdClXRootDResponses.hh:980
XrdCl::HttpFilePlugIn::curr_offset
uint64_t curr_offset
Definition: HttpFilePlugIn.hh:126
XrdCl::HttpFilePlugIn::SetProperty
virtual bool SetProperty(const std::string &name, const std::string &value) override
XrdCl::HttpFilePlugIn::Read
virtual XRootDStatus Read(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout) override
XrdCl::HttpFilePlugIn::davix_client_
Davix::DavPosix davix_client_
Definition: HttpFilePlugIn.hh:121
XrdCl::HttpFilePlugIn::logger_
Log * logger_
Definition: HttpFilePlugIn.hh:137
XrdClFile.hh
XrdCl
Definition: XrdClAnyObject.hh:26
XrdCl::HttpFilePlugIn::GetProperty
virtual bool GetProperty(const std::string &name, std::string &value) const override
XrdCl::HttpFilePlugIn::HttpFilePlugIn
HttpFilePlugIn()
XrdCl::HttpFilePlugIn::url_
std::string url_
Definition: HttpFilePlugIn.hh:133
XrdCl::HttpFilePlugIn::Stat
virtual XRootDStatus Stat(bool force, ResponseHandler *handler, uint16_t timeout) override
XrdCl::SyncImpl
Sync operation (.
Definition: XrdClFileOperations.hh:426
XrdCl::HttpFilePlugIn::is_open_
bool is_open_
Definition: HttpFilePlugIn.hh:131
XrdCl::HttpFilePlugIn::davix_context_
Davix::Context davix_context_
Definition: HttpFilePlugIn.hh:120
XrdCl::HttpFilePlugIn::davix_fd_
DAVIX_FD * davix_fd_
Definition: HttpFilePlugIn.hh:123
XrdClPlugInInterface.hh