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"
9 
10 namespace XrdPfc
11 {
12 //----------------------------------------------------------------------------
14 //----------------------------------------------------------------------------
15 class IO : public XrdOucCacheIO
16 {
17 public:
18  IO (XrdOucCacheIO *io, Cache &cache);
19 
21  virtual XrdOucCacheIO *Base() { return m_io; }
22 
24  const char *Path() override { return m_io->Path(); }
25 
26  using XrdOucCacheIO::Sync;
27  int Sync() override { return 0; }
28 
30  int Trunc(long long Offset) override { return -ENOTSUP; }
31 
33  int Write(char *Buffer, long long Offset, int Length) override { return -ENOTSUP; }
34 
35  void Update(XrdOucCacheIO &iocp) override;
36 
37  // Detach is virtual from XrdOucCacheIO, here it is split
38  // into abstract ioActive() and DetachFinalize().
39  bool Detach(XrdOucCacheIOCD &iocdP) final;
40 
41  virtual bool ioActive() = 0;
42  virtual void DetachFinalize() = 0;
43 
44  const char* GetLocation() { return m_io->Location(false); }
46 
48 
49 protected:
51  const char *m_traceID;
52 
53  const char* GetPath() { return m_io->Path(); }
54  std::string GetFilename();
55  const char* RefreshLocation() { return m_io->Location(true); }
56 
57  unsigned short ObtainReadSid() { return m_read_seqid++; }
58 
59  struct ReadReqRHCond : public ReadReqRH
60  {
62  int m_retval {0};
63 
65 
66  void Done(int result) override
67  { m_cond.Lock(); m_retval = result; m_cond.Signal(); m_cond.UnLock(); }
68  };
69 
71 
72 private:
74  RAtomic_ushort m_read_seqid;
75 
76  void SetInput(XrdOucCacheIO*);
77 
78  // Variables used by File to store IO-relates state. Managed under
79  // File::m_state_cond mutex.
80  friend class File;
81 
82  time_t m_attach_time {0}; // Set by File::AddIO()
83  int m_active_prefetches {0};
84  bool m_allow_prefetching {true};
85  bool m_in_detach {false};
86 
87 protected:
89  std::map<int, int> m_error_counts;
91  return m_incomplete_count++ == 0;
92  }
93  bool register_block_error(int res) {
94  return m_error_counts[res]++ == 0;
95  }
96 };
97 }
98 
99 #endif
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:152
XrdSysTrace * GetTrace()
Definition: XrdPfc.hh:283
Base cache-io class that implements some XrdOucCacheIO abstract methods.
Definition: XrdPfcIO.hh:16
virtual XrdOucCacheIO * Base()
Original data source.
Definition: XrdPfcIO.hh:21
const char * GetPath()
Definition: XrdPfcIO.hh:53
XrdSysTrace * GetTrace()
Definition: XrdPfcIO.hh:45
int Sync() override
Definition: XrdPfcIO.hh:27
bool register_incomplete_read()
Definition: XrdPfcIO.hh:90
IO(XrdOucCacheIO *io, Cache &cache)
Definition: XrdPfcIO.cc:7
int m_incomplete_count
Definition: XrdPfcIO.hh:88
std::map< int, int > m_error_counts
Definition: XrdPfcIO.hh:89
XrdOucCacheIO * GetInput()
Definition: XrdPfcIO.cc:31
int Trunc(long long Offset) override
Definition: XrdPfcIO.hh:30
const char * m_traceID
Definition: XrdPfcIO.hh:51
bool register_block_error(int res)
Definition: XrdPfcIO.hh:93
Cache & m_cache
reference to Cache object
Definition: XrdPfcIO.hh:50
RAtomic_int m_active_read_reqs
number of active read requests
Definition: XrdPfcIO.hh:70
const char * Path() override
Original data source URL.
Definition: XrdPfcIO.hh:24
const char * RefreshLocation()
Definition: XrdPfcIO.hh:55
bool Detach(XrdOucCacheIOCD &iocdP) final
Definition: XrdPfcIO.cc:43
virtual bool ioActive()=0
const char * GetLocation()
Definition: XrdPfcIO.hh:44
int Write(char *Buffer, long long Offset, int Length) override
Definition: XrdPfcIO.hh:33
void Update(XrdOucCacheIO &iocp) override
Definition: XrdPfcIO.cc:17
unsigned short ObtainReadSid()
Definition: XrdPfcIO.hh:57
virtual void DetachFinalize()=0
std::string GetFilename()
Definition: XrdPfcIO.cc:36
Definition: XrdPfc.hh:41
XrdSysCondVar m_cond
Definition: XrdPfcIO.hh:61
void Done(int result) override
Definition: XrdPfcIO.hh:66
ReadReqRH(unsigned short sid, XrdOucCacheIOCB *iocb)
Definition: XrdPfcFile.hh:56