25 #ifndef SRC_XRDEC_XRDECWRTBUFF_HH_
26 #define SRC_XRDEC_XRDECWRTBUFF_HH_
39 #include <condition_variable>
66 std::unique_lock<std::mutex> lck(
mtx );
74 return std::move( buffer );
84 return std::move( buffer );
89 while(
pool.empty() )
cv.wait( lck );
92 return std::move( buffer );
100 if( !buffer.GetBuffer() )
return;
101 std::unique_lock<std::mutex> lck(
mtx );
102 buffer.SetCursor( 0 );
103 pool.emplace( std::move( buffer ) );
123 std::condition_variable
cv;
125 std::queue<XrdCl::Buffer>
pool;
169 uint32_t
Write( uint32_t size,
const char *buffer )
171 uint64_t bytesAccepted = size;
176 return bytesAccepted;
271 cksums.emplace_back( std::move( ftr ) );
282 return cksums[strpnb].get();
290 std::vector<std::future<uint32_t>>
cksums;
BufferPool()
Definition: XrdEcWrtBuff.hh:112
std::mutex mtx
Definition: XrdEcWrtBuff.hh:124
void Allocate(uint32_t size)
Allocate the buffer.
Definition: XrdClBuffer.hh:110
void SetCursor(uint32_t cursor)
Set the cursor.
Definition: XrdClBuffer.hh:148
std::vector< std::future< uint32_t > > cksums
Definition: XrdEcWrtBuff.hh:290
uint32_t GetStrpSize(uint8_t strp)
Definition: XrdEcWrtBuff.hh:211
char * GetStrpBuff(uint8_t strpnb)
Definition: XrdEcWrtBuff.hh:202
static ThreadPool & Instance()
Singleton access.
Definition: XrdEcThreadPool.hh:150
bool Complete()
True if the buffer if full, false otherwise.
Definition: XrdEcWrtBuff.hh:243
uint32_t GetCrc32c(size_t strpnb)
Definition: XrdEcWrtBuff.hh:280
const uint64_t datasize
Definition: XrdEcObjCfg.hh:88
const char * GetBuffer(uint32_t offset=0) const
Get the message buffer.
Definition: XrdClBuffer.hh:72
std::condition_variable cv
Definition: XrdEcWrtBuff.hh:123
BufferPool & operator=(const BufferPool &)=delete
stripes_t stripes
Definition: XrdEcWrtBuff.hh:289
const uint64_t chunksize
Definition: XrdEcObjCfg.hh:89
const size_t totalsize
Definition: XrdEcWrtBuff.hh:121
Global configuration for the EC module.
Definition: XrdEcConfig.hh:39
uint32_t GetSize() const
Get the size of the message.
Definition: XrdClBuffer.hh:132
uint32_t Write(uint32_t size, const char *buffer)
Definition: XrdEcWrtBuff.hh:169
WrtBuff(const ObjCfg &objcfg)
Definition: XrdEcWrtBuff.hh:140
void AdvanceCursor(uint32_t delta)
Advance the cursor.
Definition: XrdClBuffer.hh:156
bool Empty()
True if there are no data in the buffer, false otherwise.
Definition: XrdEcWrtBuff.hh:250
const uint64_t blksize
Definition: XrdEcObjCfg.hh:91
WrtBuff(WrtBuff &&wrtbuff)
Move constructor.
Definition: XrdEcWrtBuff.hh:149
Pool of buffer for caching writes.
Definition: XrdEcWrtBuff.hh:48
char * GetBufferAtCursor()
Get the buffer pointer at the append cursor.
Definition: XrdClBuffer.hh:189
std::queue< XrdCl::Buffer > pool
Definition: XrdEcWrtBuff.hh:125
XrdCl::Buffer Create(const ObjCfg &objcfg)
Create now buffer (or recycle existing one)
Definition: XrdEcWrtBuff.hh:64
std::future< typename std::result_of< FUNC(ARGs...)>::type > Execute(FUNC func, ARGs...args)
Schedule a functional (together with its arguments) for execution.
Definition: XrdEcThreadPool.hh:161
size_t currentsize
Definition: XrdEcWrtBuff.hh:122
Definition: XrdEcWrtBuff.hh:132
void compute(stripes_t &stripes)
ObjCfg objcfg
Definition: XrdEcWrtBuff.hh:287
const uint8_t nbchunks
Definition: XrdEcObjCfg.hh:85
uint32_t GetCursor() const
Get append cursor.
Definition: XrdClBuffer.hh:140
static BufferPool & Instance()
Singleton access to the object.
Definition: XrdEcWrtBuff.hh:55
void Recycle(XrdCl::Buffer &&buffer)
Give back a buffer to the poool.
Definition: XrdEcWrtBuff.hh:98
RedundancyProvider & GetRedundancy(const ObjCfg &objcfg)
Get redundancy provider for given data object configuration.
Definition: XrdEcConfig.hh:55
void Encode()
Calculate the parity for the data stripes and the crc32cs.
Definition: XrdEcWrtBuff.hh:257
std::vector< stripe_t > stripes_t
All stripes in a block.
Definition: XrdEcUtilities.hh:64
static Config & Instance()
Singleton access.
Definition: XrdEcConfig.hh:46
~WrtBuff()
Definition: XrdEcWrtBuff.hh:158
Definition: XrdEcObjCfg.hh:33
uint32_t GetBlkSize()
Get size of the data in the buffer.
Definition: XrdEcWrtBuff.hh:236
void Pad(uint32_t size)
Definition: XrdEcWrtBuff.hh:183
XrdCl::Buffer wrtbuff
Definition: XrdEcWrtBuff.hh:288
Binary blob representation.
Definition: XrdClBuffer.hh:33
uint32_t(* digest)(uint32_t, void const *, size_t)
Definition: XrdEcObjCfg.hh:96
const uint8_t nbdata
Definition: XrdEcObjCfg.hh:87