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