xrootd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
XrdPfcIO.hh
Go to the documentation of this file.
1 #ifndef __XRDPFC_CACHE_IO_HH__
2 #define __XRDPFC_CACHE_IO_HH__
3 
4 class XrdSysTrace;
5 
6 #include "XrdPfc.hh"
7 #include "XrdOuc/XrdOucCache.hh"
10 
11 #include <atomic>
12 
13 namespace XrdPfc
14 {
15 //----------------------------------------------------------------------------
17 //----------------------------------------------------------------------------
18 class IO : public XrdOucCacheIO
19 {
20 public:
21  IO (XrdOucCacheIO *io, Cache &cache);
22 
24  virtual XrdOucCacheIO *Base() { return m_io; }
25 
27  virtual const char *Path() { return m_io.load(std::memory_order_relaxed)->Path(); }
28 
29  using XrdOucCacheIO::Sync;
30 
31  virtual int Sync() { return 0; }
32 
34 
35  virtual int Trunc(long long Offset) { return -ENOTSUP; }
36 
38 
39  virtual int Write(char *Buffer, long long Offset, int Length) { return -ENOTSUP; }
40 
41  virtual void Update(XrdOucCacheIO &iocp);
42 
43  // Detach is virtual from XrdOucCacheIO, here it is split
44  // into abstract ioActive() and DetachFinalize().
45  bool Detach(XrdOucCacheIOCD &iocdP) /* final */;
46 
47  virtual bool ioActive() = 0;
48  virtual void DetachFinalize() = 0;
49 
50  const char* GetLocation() { return m_io.load(std::memory_order_relaxed)->Location(false); }
52 
54 
55 protected:
57  const char *m_traceID;
58 
59  const char* GetPath() { return m_io.load(std::memory_order_relaxed)->Path(); }
60  std::string GetFilename() { return XrdCl::URL(GetPath()).GetPath(); }
61  const char* RefreshLocation() { return m_io.load(std::memory_order_relaxed)->Location(true); }
62 
63 private:
64  std::atomic<XrdOucCacheIO*> m_io;
65 
66  void SetInput(XrdOucCacheIO*);
67 };
68 }
69 
70 #endif
virtual void Update(XrdOucCacheIO &iocp)
std::string GetFilename()
Definition: XrdPfcIO.hh:60
virtual int Trunc(long long offs)=0
virtual void DetachFinalize()=0
virtual const char * Path()
Original data source URL.
Definition: XrdPfcIO.hh:27
const char * m_traceID
Definition: XrdPfcIO.hh:57
Base cache-io class that implements XrdOucCacheIO abstract methods.
Definition: XrdPfcIO.hh:18
Definition: XrdOucCache.hh:104
Attaches/creates and detaches/deletes cache-io objects for disk based cache.
Definition: XrdPfc.hh:263
bool Detach(XrdOucCacheIOCD &iocdP)
const std::string & GetPath() const
Get the path.
Definition: XrdClURL.hh:212
Definition: XrdOucCache.hh:81
const char * RefreshLocation()
Definition: XrdPfcIO.hh:61
Definition: XrdSysTrace.hh:48
const char * GetLocation()
Definition: XrdPfcIO.hh:50
virtual int Trunc(long long Offset)
Definition: XrdPfcIO.hh:35
const char * GetPath()
Definition: XrdPfcIO.hh:59
void SetInput(XrdOucCacheIO *)
XrdSysTrace * GetTrace()
Definition: XrdPfc.hh:389
virtual int Sync()=0
IO(XrdOucCacheIO *io, Cache &cache)
URL representation.
Definition: XrdClURL.hh:30
virtual XrdOucCacheIO * Base()
Original data source.
Definition: XrdPfcIO.hh:24
virtual int Write(char *Buffer, long long Offset, int Length)
Definition: XrdPfcIO.hh:39
virtual bool ioActive()=0
XrdSysTrace * GetTrace()
Definition: XrdPfcIO.hh:51
XrdOucCacheIO * GetInput()
virtual int Write(char *buff, long long offs, int wlen)=0
virtual int Sync()
Definition: XrdPfcIO.hh:31
std::atomic< XrdOucCacheIO * > m_io
original data source
Definition: XrdPfcIO.hh:64
Cache & m_cache
reference to Cache needed in detach
Definition: XrdPfcIO.hh:56