XRootD
Loading...
Searching...
No Matches
XrdClHttp::Filesystem Class Referencefinal

#include <XrdClHttpFilesystem.hh>

Inheritance diagram for XrdClHttp::Filesystem:
Collaboration diagram for XrdClHttp::Filesystem:

Public Member Functions

 Filesystem (const std::string &, std::shared_ptr< HandlerQueue > queue, XrdCl::Log *log)
virtual ~Filesystem () noexcept
XrdCl::XRootDStatus DirList (const std::string &path, XrdCl::DirListFlags::Flags flags, XrdCl::ResponseHandler *handler, time_t timeout) override
virtual bool GetProperty (const std::string &name, std::string &value) const override
virtual XrdCl::XRootDStatus Locate (const std::string &path, XrdCl::OpenFlags::Flags flags, XrdCl::ResponseHandler *handler, time_t timeout) override
virtual XrdCl::XRootDStatus MkDir (const std::string &path, XrdCl::MkDirFlags::Flags flags, XrdCl::Access::Mode mode, XrdCl::ResponseHandler *handler, time_t timeout) override
virtual XrdCl::XRootDStatus Query (XrdCl::QueryCode::Code queryCode, const XrdCl::Buffer &arg, XrdCl::ResponseHandler *handler, time_t timeout) override
virtual XrdCl::XRootDStatus Rm (const std::string &path, XrdCl::ResponseHandler *handler, time_t timeout) override
virtual XrdCl::XRootDStatus RmDir (const std::string &path, XrdCl::ResponseHandler *handler, time_t timeout) override
virtual bool SetProperty (const std::string &name, const std::string &value) override
virtual XrdCl::XRootDStatus Stat (const std::string &path, XrdCl::ResponseHandler *handler, time_t timeout) override
Public Member Functions inherited from XrdCl::FileSystemPlugIn
virtual ~FileSystemPlugIn ()
 Destructor.
virtual XRootDStatus ChMod (const std::string &path, Access::Mode mode, ResponseHandler *handler, time_t timeout)
virtual XRootDStatus DeepLocate (const std::string &path, OpenFlags::Flags flags, ResponseHandler *handler, time_t timeout)
virtual XRootDStatus DelXAttr (const std::string &path, const std::vector< std::string > &attrs, ResponseHandler *handler, time_t timeout)
virtual XRootDStatus GetXAttr (const std::string &path, const std::vector< std::string > &attrs, ResponseHandler *handler, time_t timeout)
virtual XRootDStatus ListXAttr (const std::string &path, ResponseHandler *handler, time_t timeout)
virtual XRootDStatus Mv (const std::string &source, const std::string &dest, ResponseHandler *handler, time_t timeout)
virtual XRootDStatus Ping (ResponseHandler *handler, time_t timeout)
virtual XRootDStatus Prepare (const std::vector< std::string > &fileList, PrepareFlags::Flags flags, uint8_t priority, ResponseHandler *handler, time_t timeout)
virtual XRootDStatus Protocol (ResponseHandler *handler, time_t timeout=0)
virtual XRootDStatus SendInfo (const std::string &info, ResponseHandler *handler, time_t timeout)
virtual XRootDStatus SetXAttr (const std::string &path, const std::vector< xattr_t > &attrs, ResponseHandler *handler, time_t timeout)
virtual XRootDStatus StatVFS (const std::string &path, ResponseHandler *handler, time_t timeout)
virtual XRootDStatus Truncate (const std::string &path, uint64_t size, ResponseHandler *handler, time_t timeout)

Detailed Description

Definition at line 48 of file XrdClHttpFilesystem.hh.

Constructor & Destructor Documentation

◆ Filesystem()

Filesystem::Filesystem ( const std::string & url,
std::shared_ptr< HandlerQueue > queue,
XrdCl::Log * log )

Definition at line 28 of file XrdClHttpFilesystem.cc.

29 : m_queue(queue),
30 m_logger(log),
31 m_url(url)
32{
33 m_logger->Debug(kLogXrdClHttp, "Constructing filesystem object with base URL %s", url.c_str());
34 // When constructed from the root protocol handler, we've observed it include the
35 // path here (the code paths appear to be slightly different from http://). Strip
36 // it out so it's not included twice later.
37 m_url.SetPath("/");
39 m_url.SetParams(map);
40}
std::map< std::string, std::string > ParamsMap
Definition XrdClURL.hh:33
const uint64_t kLogXrdClHttp

References XrdClHttp::kLogXrdClHttp.

◆ ~Filesystem()

Filesystem::~Filesystem ( )
virtualnoexcept

Definition at line 42 of file XrdClHttpFilesystem.cc.

42{}

Member Function Documentation

◆ DirList()

XrdCl::XRootDStatus Filesystem::DirList ( const std::string & path,
XrdCl::DirListFlags::Flags flags,
XrdCl::ResponseHandler * handler,
time_t timeout )
overridevirtual
See also
XrdCl::FileSystem::DirlList

Reimplemented from XrdCl::FileSystemPlugIn.

Definition at line 45 of file XrdClHttpFilesystem.cc.

49{
51
52 auto full_url = GetCurrentURL(path);
53
54 m_logger->Debug(kLogXrdClHttp, "Filesystem::DirList path %s", path.c_str());
55 std::unique_ptr<XrdClHttp::CurlListdirOp> listdirOp(
56 new XrdClHttp::CurlListdirOp(
57 handler, full_url,
58 m_url.GetHostName() + ":" + std::to_string(m_url.GetPort()),
59 SendResponseInfo(), ts, m_logger,
60 GetConnCallout(), m_header_callout.load(std::memory_order_acquire)
61 )
62 );
63
64 try {
65 m_queue->Produce(std::move(listdirOp));
66 } catch (...) {
67 m_logger->Warning(kLogXrdClHttp, "Failed to add dirlist op to queue");
68 return XrdCl::XRootDStatus(XrdCl::stError, XrdCl::errOSError);
69 }
70
71 return XrdCl::XRootDStatus();
72}
static std::string ts()
timestamp output for logging messages
Definition XrdCephOss.cc:53
static struct timespec GetHeaderTimeoutWithDefault(time_t oper_timeout)
const uint16_t stError
An error occurred that could potentially be retried.
const uint16_t errOSError

References XrdCl::errOSError, XrdClHttp::Factory::GetHeaderTimeoutWithDefault(), XrdClHttp::kLogXrdClHttp, XrdCl::stError, and ts().

Here is the call graph for this function:

◆ GetProperty()

bool Filesystem::GetProperty ( const std::string & name,
std::string & value ) const
overridevirtual
See also
XrdCl::FileSystem::GetProperty

Reimplemented from XrdCl::FileSystemPlugIn.

Definition at line 93 of file XrdClHttpFilesystem.cc.

95{
96 std::shared_lock lock(m_properties_mutex);
97
98 const auto p = m_properties.find(name);
99 if (p == std::end(m_properties)) {
100 return false;
101 }
102
103 value = p->second;
104 return true;
105}

◆ Locate()

XrdCl::XRootDStatus Filesystem::Locate ( const std::string & path,
XrdCl::OpenFlags::Flags flags,
XrdCl::ResponseHandler * handler,
time_t timeout )
overridevirtual
See also
XrdCl::FileSystem::Locate

Reimplemented from XrdCl::FileSystemPlugIn.

Definition at line 113 of file XrdClHttpFilesystem.cc.

117{
118 if (!handler) return XrdCl::XRootDStatus();
119
120 auto locateInfo = std::make_unique<XrdCl::LocationInfo>();
121 locateInfo->Add(XrdCl::LocationInfo::Location(m_url.GetHostName() + ":" + std::to_string(m_url.GetPort()), XrdCl::LocationInfo::ServerOnline, XrdCl::LocationInfo::Read));
122
123 auto obj = std::make_unique<XrdCl::AnyObject>();
124 obj->Set(locateInfo.release());
125 handler->HandleResponse(new XrdCl::XRootDStatus(), obj.release());
126
127 return XrdCl::XRootDStatus();
128}
@ Read
read access is allowed
@ ServerOnline
server node where the file is online
virtual void HandleResponse(XRootDStatus *status, AnyObject *response)

References XrdCl::ResponseHandler::HandleResponse(), XrdCl::LocationInfo::Read, and XrdCl::LocationInfo::ServerOnline.

Here is the call graph for this function:

◆ MkDir()

XrdCl::XRootDStatus Filesystem::MkDir ( const std::string & path,
XrdCl::MkDirFlags::Flags flags,
XrdCl::Access::Mode mode,
XrdCl::ResponseHandler * handler,
time_t timeout )
overridevirtual
See also
XrdCl::FileSystem::MkDir

Reimplemented from XrdCl::FileSystemPlugIn.

Definition at line 130 of file XrdClHttpFilesystem.cc.

135{
137
138 auto full_url = GetCurrentURL(path);
139 m_logger->Debug(kLogXrdClHttp, "Filesystem::MkDir path %s", full_url.c_str());
140
141 std::unique_ptr<CurlMkcolOp> mkdirOp(
142 new CurlMkcolOp(
143 handler, full_url, ts, m_logger, SendResponseInfo(), GetConnCallout(),
144 m_header_callout.load(std::memory_order_acquire)
145 )
146 );
147 try {
148 m_queue->Produce(std::move(mkdirOp));
149 } catch (...) {
150 m_logger->Warning(kLogXrdClHttp, "Failed to add filesystem mkdir op to queue");
151 return XrdCl::XRootDStatus(XrdCl::stError, XrdCl::errOSError);
152 }
153
154 return XrdCl::XRootDStatus();
155}

References XrdCl::errOSError, XrdClHttp::Factory::GetHeaderTimeoutWithDefault(), XrdClHttp::kLogXrdClHttp, XrdCl::stError, and ts().

Here is the call graph for this function:

◆ Query()

XrdCl::XRootDStatus Filesystem::Query ( XrdCl::QueryCode::Code queryCode,
const XrdCl::Buffer & arg,
XrdCl::ResponseHandler * handler,
time_t timeout )
overridevirtual
See also
XrdCl::FileSystem::Query

Reimplemented from XrdCl::FileSystemPlugIn.

Definition at line 157 of file XrdClHttpFilesystem.cc.

161{
163
164 if (queryCode == XrdCl::QueryCode::Checksum)
165 {
166 auto url = GetCurrentURL(arg.ToString());
167 m_logger->Debug(kLogXrdClHttp, "XrdClHttp::Filesystem::Query checksum path %s", url.c_str());
168
170 XrdCl::URL url_obj;
171 url_obj.FromString(url);
172 auto iter = url_obj.GetParams().find("cks.type");
173 if (iter != url_obj.GetParams().end())
174 {
175 preferred = XrdClHttp::GetTypeFromString(iter->second);
176 if (preferred == XrdClHttp::ChecksumType::kUnknown)
177 {
178 m_logger->Error(kLogXrdClHttp, "Unknown checksum type %s", iter->second.c_str());
180 }
181 }
182 // On miss, queue a checksum operation
183 std::unique_ptr<CurlChecksumOp> cksumOp(
184 new CurlChecksumOp(
185 handler, url, preferred, ts, m_logger, SendResponseInfo(),
186 GetConnCallout(), m_header_callout.load(std::memory_order_acquire)
187 )
188 );
189 try
190 {
191 m_queue->Produce(std::move(cksumOp));
192 }
193 catch (...)
194 {
195 m_logger->Warning(kLogXrdClHttp, "Failed to add checksum operation to queue");
196 return XrdCl::XRootDStatus(XrdCl::stError, XrdCl::errOSError);
197 }
198 }
199 else if (queryCode == XrdCl::QueryCode::XAttr)
200 {
201 std::string path = arg.ToString();
202 std::string full_url = m_url.GetURL();
203 m_logger->Debug(kLogXrdClHttp, "XrdClHttp::Filesystem::Query xattr full_url %s, path %s", full_url.c_str(), path.c_str());
204 full_url = m_url.GetURL();
205 std::unique_ptr<CurlQueryOp> queryOp(
206 new CurlQueryOp(
207 handler, path, ts, m_logger,SendResponseInfo(),
208 GetConnCallout(), queryCode, m_header_callout.load(std::memory_order_acquire)
209 )
210 );
211 try
212 {
213 m_queue->Produce(std::move(queryOp));
214 }
215 catch (...)
216 {
217 m_logger->Warning(kLogXrdClHttp, "Failed to add xattr query operation to queue");
218 return XrdCl::XRootDStatus(XrdCl::stError, XrdCl::errOSError);
219 }
220 }
221 else
222 {
223 return XrdCl::XRootDStatus(XrdCl::stError, XrdCl::errNotImplemented);
224 }
225 return XrdCl::XRootDStatus();
226}
std::string ToString() const
Convert the buffer to a string.
bool FromString(const std::string &url)
Parse a string and fill the URL fields.
Definition XrdClURL.cc:62
const ParamsMap & GetParams() const
Get the URL params.
Definition XrdClURL.hh:244
ChecksumType GetTypeFromString(const std::string &str)
const uint16_t errNotImplemented
Operation is not implemented.
@ XAttr
Query file extended attributes.
@ Checksum
Query file checksum.

References XrdCl::QueryCode::Checksum, XrdCl::errNotImplemented, XrdCl::errOSError, XrdCl::URL::FromString(), XrdClHttp::Factory::GetHeaderTimeoutWithDefault(), XrdCl::URL::GetParams(), XrdClHttp::GetTypeFromString(), XrdClHttp::kCRC32C, XrdClHttp::kLogXrdClHttp, XrdClHttp::kUnknown, XrdCl::stError, XrdCl::Buffer::ToString(), ts(), and XrdCl::QueryCode::XAttr.

Here is the call graph for this function:

◆ Rm()

XrdCl::XRootDStatus Filesystem::Rm ( const std::string & path,
XrdCl::ResponseHandler * handler,
time_t timeout )
overridevirtual
See also
XrdCl::FileSystem::Rm

Reimplemented from XrdCl::FileSystemPlugIn.

Definition at line 229 of file XrdClHttpFilesystem.cc.

232{
234
235 auto full_url = GetCurrentURL(path);
236 m_logger->Debug(kLogXrdClHttp, "Filesystem::Rm path %s", full_url.c_str());
237
238 std::unique_ptr<CurlDeleteOp> deleteOp(
239 new CurlDeleteOp(
240 handler, full_url, ts, m_logger, SendResponseInfo(),
241 GetConnCallout(), m_header_callout.load(std::memory_order_acquire)
242 )
243 );
244 try {
245 m_queue->Produce(std::move(deleteOp));
246 } catch (...) {
247 m_logger->Warning(kLogXrdClHttp, "Failed to add filesystem delete op to queue");
248 return XrdCl::XRootDStatus(XrdCl::stError, XrdCl::errOSError);
249 }
250
251 return XrdCl::XRootDStatus();
252}

References XrdCl::errOSError, XrdClHttp::Factory::GetHeaderTimeoutWithDefault(), XrdClHttp::kLogXrdClHttp, XrdCl::stError, and ts().

Referenced by RmDir().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RmDir()

XrdCl::XRootDStatus Filesystem::RmDir ( const std::string & path,
XrdCl::ResponseHandler * handler,
time_t timeout )
overridevirtual
See also
XrdCl::FileSystem::RmDir

Reimplemented from XrdCl::FileSystemPlugIn.

Definition at line 255 of file XrdClHttpFilesystem.cc.

258{
259 return Rm(path, handler, timeout);
260}
virtual XrdCl::XRootDStatus Rm(const std::string &path, XrdCl::ResponseHandler *handler, time_t timeout) override

References Rm().

Here is the call graph for this function:

◆ SetProperty()

bool Filesystem::SetProperty ( const std::string & name,
const std::string & value )
overridevirtual
See also
XrdCl::FileSystem::SetProperty

Reimplemented from XrdCl::FileSystemPlugIn.

Definition at line 263 of file XrdClHttpFilesystem.cc.

265{
266 if (name == "XrdClHttpHeaderCallout") {
267 long long pointer;
268 try {
269 pointer = std::stoll(value, nullptr, 16);
270 } catch (...) {
271 pointer = 0;
272 }
273 if (!pointer) {
274 pointer = 0;
275 }
276 m_header_callout.store(reinterpret_cast<XrdClHttp::HeaderCallout*>(pointer), std::memory_order_release);
277 }
278
279 std::unique_lock lock(m_properties_mutex);
280 m_properties[name] = value;
281 return true;
282}

◆ Stat()

XrdCl::XRootDStatus Filesystem::Stat ( const std::string & path,
XrdCl::ResponseHandler * handler,
time_t timeout )
overridevirtual
See also
XrdCl::FileSystem::Stat

Reimplemented from XrdCl::FileSystemPlugIn.

Definition at line 285 of file XrdClHttpFilesystem.cc.

288{
290
291 auto full_url = GetCurrentURL(path);
292 m_logger->Debug(kLogXrdClHttp, "Filesystem::Stat path %s", full_url.c_str());
293
294 std::unique_ptr<CurlStatOp> statOp(
295 new CurlStatOp(
296 handler, full_url, ts, m_logger, SendResponseInfo(),
297 GetConnCallout(), m_header_callout.load(std::memory_order_acquire)
298 )
299 );
300 try {
301 m_queue->Produce(std::move(statOp));
302 } catch (...) {
303 m_logger->Warning(kLogXrdClHttp, "Failed to add filesystem stat op to queue");
304 return XrdCl::XRootDStatus(XrdCl::stError, XrdCl::errOSError);
305 }
306
307 return XrdCl::XRootDStatus();
308}

References XrdCl::errOSError, XrdClHttp::Factory::GetHeaderTimeoutWithDefault(), XrdClHttp::kLogXrdClHttp, XrdCl::stError, and ts().

Here is the call graph for this function:

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