XRootD
Loading...
Searching...
No Matches
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
16namespace XrdCephBuffer {
17
26
28 public:
29 XrdCephBufferAlgSimple(std::unique_ptr<IXrdCephBufferData> buffer, std::unique_ptr<ICephIOAdapter> cephio, int fd,
30 bool useStriperlessReads = true );
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
#define write(a, b, c)
Definition XrdPosix.hh:115
#define read(a, b, c)
Definition XrdPosix.hh:82
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 rawRead(void *buff, off_t offset, size_t blen)
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...