XRootD
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 #include <XrdSys/XrdSysRAtomic.hh>
11 
12 namespace XrdPfc
13 {
14 //----------------------------------------------------------------------------
16 //----------------------------------------------------------------------------
17 class IO : public XrdOucCacheIO
18 {
19 public:
20  IO (XrdOucCacheIO *io, Cache &cache);
21 
23  virtual XrdOucCacheIO *Base() { return m_io; }
24 
26  const char *Path() override { return m_io->Path(); }
27 
28  using XrdOucCacheIO::Sync;
29  int Sync() override { return 0; }
30 
32  int Trunc(long long Offset) override { return -ENOTSUP; }
33 
35  int Write(char *Buffer, long long Offset, int Length) override { return -ENOTSUP; }
36 
37  void Update(XrdOucCacheIO &iocp) override;
38 
39  // Detach is virtual from XrdOucCacheIO, here it is split
40  // into abstract ioActive() and DetachFinalize().
41  bool Detach(XrdOucCacheIOCD &iocdP) final;
42 
43  virtual bool ioActive() = 0;
44  virtual void DetachFinalize() = 0;
45 
46  const char* GetLocation() { return m_io->Location(false); }
48 
50 
51 protected:
53  const char *m_traceID;
54 
55  const char* GetPath() { return m_io->Path(); }
56  std::string GetFilename() { return XrdCl::URL(GetPath()).GetPath(); }
57  const char* RefreshLocation() { return m_io->Location(true); }
58 
59  unsigned short ObtainReadSid() { return m_read_seqid++; }
60 
61  struct ReadReqRHCond : public ReadReqRH
62  {
64  int m_retval {0};
65 
67 
68  void Done(int result) override
69  { m_cond.Lock(); m_retval = result; m_cond.Signal(); m_cond.UnLock(); }
70  };
71 
73 
74 private:
76  RAtomic_ushort m_read_seqid;
77 
78  void SetInput(XrdOucCacheIO*);
79 
80  // Variables used by File to store IO-relates state. Managed under
81  // File::m_state_cond mutex.
82  friend class File;
83 
84  time_t m_attach_time {0}; // Set by File::AddIO()
85  int m_active_prefetches {0};
86  bool m_allow_prefetching {true};
87  bool m_in_detach {false};
88 };
89 }
90 
91 #endif
URL representation.
Definition: XrdClURL.hh:31
const std::string & GetPath() const
Get the path.
Definition: XrdClURL.hh:212
virtual int Write(char *buff, long long offs, int wlen)=0
virtual int Sync()=0
virtual int Trunc(long long offs)=0
Attaches/creates and detaches/deletes cache-io objects for disk based cache.
Definition: XrdPfc.hh:267
XrdSysTrace * GetTrace()
Definition: XrdPfc.hh:398
Base cache-io class that implements some XrdOucCacheIO abstract methods.
Definition: XrdPfcIO.hh:18
virtual XrdOucCacheIO * Base()
Original data source.
Definition: XrdPfcIO.hh:23
const char * GetPath()
Definition: XrdPfcIO.hh:55
XrdSysTrace * GetTrace()
Definition: XrdPfcIO.hh:47
int Sync() override
Definition: XrdPfcIO.hh:29
std::string GetFilename()
Definition: XrdPfcIO.hh:56
IO(XrdOucCacheIO *io, Cache &cache)
Definition: XrdPfcIO.cc:6
XrdOucCacheIO * GetInput()
Definition: XrdPfcIO.cc:30
int Trunc(long long Offset) override
Definition: XrdPfcIO.hh:32
const char * m_traceID
Definition: XrdPfcIO.hh:53
Cache & m_cache
reference to Cache object
Definition: XrdPfcIO.hh:52
RAtomic_int m_active_read_reqs
number of active read requests
Definition: XrdPfcIO.hh:72
const char * Path() override
Original data source URL.
Definition: XrdPfcIO.hh:26
const char * RefreshLocation()
Definition: XrdPfcIO.hh:57
bool Detach(XrdOucCacheIOCD &iocdP) final
Definition: XrdPfcIO.cc:37
virtual bool ioActive()=0
const char * GetLocation()
Definition: XrdPfcIO.hh:46
int Write(char *Buffer, long long Offset, int Length) override
Definition: XrdPfcIO.hh:35
void Update(XrdOucCacheIO &iocp) override
Definition: XrdPfcIO.cc:16
unsigned short ObtainReadSid()
Definition: XrdPfcIO.hh:59
virtual void DetachFinalize()=0
Definition: XrdPfc.hh:41
XrdSysCondVar m_cond
Definition: XrdPfcIO.hh:63
void Done(int result) override
Definition: XrdPfcIO.hh:68
ReadReqRH(unsigned short sid, XrdOucCacheIOCB *iocb)
Definition: XrdPfcFile.hh:67