XRootD
XrdCephBufferAlgSimple.hh
Go to the documentation of this file.
1 #ifndef __XRD_CEPH_BUFFER_ALG_SIMPLE_HH__
2 #define __XRD_CEPH_BUFFER_ALG_SIMPLE_HH__
3 //------------------------------------------------------------------------------
4 // Implementation of the logic section of buffer code
5 //------------------------------------------------------------------------------
6 
7 #include <sys/types.h>
8 #include <mutex>
9 #include <memory>
10 
11 #include "IXrdCephBufferAlg.hh"
12 #include "ICephIOAdapter.hh"
13 #include "BufferUtils.hh"
14 
15 
16 namespace XrdCephBuffer {
17 
27 class XrdCephBufferAlgSimple : public virtual IXrdCephBufferAlg {
28  public:
29  XrdCephBufferAlgSimple(std::unique_ptr<IXrdCephBufferData> buffer, std::unique_ptr<ICephIOAdapter> cephio, int fd,
30  bool useStriperlessReads = true );
31  virtual ~XrdCephBufferAlgSimple();
32 
33  virtual ssize_t read_aio (XrdSfsAio *aoip) override;
34  virtual ssize_t write_aio(XrdSfsAio *aoip) override;
35 
36 
37  virtual ssize_t read (volatile void *buff, off_t offset, size_t blen) override;
38  virtual ssize_t write(const void *buff, off_t offset, size_t blen) override;
39  virtual ssize_t flushWriteCache() override;
40 
41  // #REVIEW
42  virtual const IXrdCephBufferData *buffer() const {return m_bufferdata.get();}
43  virtual IXrdCephBufferData *buffer() {return m_bufferdata.get();}
44 
45  protected:
46  virtual ssize_t rawRead (void *buff, off_t offset, size_t blen) ; // read from the storage, at its offset
47  virtual ssize_t rawWrite(void *buff, off_t offset, size_t blen) ; // write to the storage, to its offset posiiton
48 
49  private:
50  std::unique_ptr<IXrdCephBufferData> m_bufferdata;
51  std::unique_ptr<ICephIOAdapter> m_cephio ; // no ownership is taken here
52  int m_fd = -1;
53  bool m_useStriperlessReads {true};
54 
55  off_t m_bufferStartingOffset = 0;
56  size_t m_bufferLength = 0;
57 
58  std::recursive_mutex m_data_mutex; // any data access method on the buffer will use this
59 
60  long m_stats_bytes_fromceph{0};
61  long m_stats_bytes_bypassed{0};
62  long m_stats_bytes_toclient{0};
63 };
64 
65 }
66 
67 #endif
Interface to a holder of the main logic decisions of the buffering algortithm, decoupled from the buf...
Interface to the Buffer's physical representation. Allow an interface to encapsulate the requirements...
virtual ssize_t write_aio(XrdSfsAio *aoip) override
possible aio based code
virtual ssize_t rawWrite(void *buff, off_t offset, size_t blen)
virtual const IXrdCephBufferData * buffer() const
virtual ssize_t flushWriteCache() override
remember to flush the cache on final writes
XrdCephBufferAlgSimple(std::unique_ptr< IXrdCephBufferData > buffer, std::unique_ptr< ICephIOAdapter > cephio, int fd, bool useStriperlessReads=true)
virtual ssize_t write(const void *buff, off_t offset, size_t blen) override
write data through the buffer
virtual ssize_t rawRead(void *buff, off_t offset, size_t blen)
virtual IXrdCephBufferData * buffer()
virtual ssize_t read(volatile void *buff, off_t offset, size_t blen) override
read data through the buffer
virtual ssize_t read_aio(XrdSfsAio *aoip) override
possible aio based code
is a simple implementation of IXrdCephBufferData using std::vector<char> representation for the buffe...
Definition: BufferUtils.hh:29