25#ifndef SRC_XRDEC_XRDECWRTBUFF_HH_
26#define SRC_XRDEC_XRDECWRTBUFF_HH_
39#include <condition_variable>
66 std::unique_lock<std::mutex> lck(
mtx );
89 while(
pool.empty() )
cv.wait( lck );
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;
Binary blob representation.
Definition XrdClBuffer.hh:34
void AdvanceCursor(uint32_t delta)
Advance the cursor.
Definition XrdClBuffer.hh:156
char * GetBufferAtCursor()
Get the buffer pointer at the append cursor.
Definition XrdClBuffer.hh:189
void Allocate(uint32_t size)
Allocate the buffer.
Definition XrdClBuffer.hh:110
const char * GetBuffer(uint32_t offset=0) const
Get the message buffer.
Definition XrdClBuffer.hh:72
void SetCursor(uint32_t cursor)
Set the cursor.
Definition XrdClBuffer.hh:148
uint32_t GetCursor() const
Get append cursor.
Definition XrdClBuffer.hh:140
uint32_t GetSize() const
Get the size of the message.
Definition XrdClBuffer.hh:132
Pool of buffer for caching writes.
Definition XrdEcWrtBuff.hh:49
std::mutex mtx
Definition XrdEcWrtBuff.hh:124
BufferPool(const BufferPool &)=delete
void Recycle(XrdCl::Buffer &&buffer)
Give back a buffer to the poool.
Definition XrdEcWrtBuff.hh:98
std::queue< XrdCl::Buffer > pool
Definition XrdEcWrtBuff.hh:125
const size_t totalsize
Definition XrdEcWrtBuff.hh:121
BufferPool()
Definition XrdEcWrtBuff.hh:112
static BufferPool & Instance()
Singleton access to the object.
Definition XrdEcWrtBuff.hh:55
BufferPool & operator=(BufferPool &&)=delete
BufferPool(BufferPool &&)=delete
std::condition_variable cv
Definition XrdEcWrtBuff.hh:123
BufferPool & operator=(const BufferPool &)=delete
XrdCl::Buffer Create(const ObjCfg &objcfg)
Create now buffer (or recycle existing one)
Definition XrdEcWrtBuff.hh:64
size_t currentsize
Definition XrdEcWrtBuff.hh:122
Global configuration for the EC module.
Definition XrdEcConfig.hh:40
static Config & Instance()
Singleton access.
Definition XrdEcConfig.hh:46
RedundancyProvider & GetRedundancy(const ObjCfg &objcfg)
Get redundancy provider for given data object configuration.
Definition XrdEcConfig.hh:55
void compute(stripes_t &stripes)
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
static ThreadPool & Instance()
Singleton access.
Definition XrdEcThreadPool.hh:150
Definition XrdEcWrtBuff.hh:133
ObjCfg objcfg
Definition XrdEcWrtBuff.hh:287
XrdCl::Buffer wrtbuff
Definition XrdEcWrtBuff.hh:288
uint32_t Write(uint32_t size, const char *buffer)
Definition XrdEcWrtBuff.hh:169
WrtBuff(const ObjCfg &objcfg)
Definition XrdEcWrtBuff.hh:140
uint32_t GetBlkSize()
Get size of the data in the buffer.
Definition XrdEcWrtBuff.hh:236
uint32_t GetStrpSize(uint8_t strp)
Definition XrdEcWrtBuff.hh:211
void Pad(uint32_t size)
Definition XrdEcWrtBuff.hh:183
uint32_t GetCrc32c(size_t strpnb)
Definition XrdEcWrtBuff.hh:280
void Encode()
Calculate the parity for the data stripes and the crc32cs.
Definition XrdEcWrtBuff.hh:257
bool Empty()
True if there are no data in the buffer, false otherwise.
Definition XrdEcWrtBuff.hh:250
bool Complete()
True if the buffer if full, false otherwise.
Definition XrdEcWrtBuff.hh:243
stripes_t stripes
Definition XrdEcWrtBuff.hh:289
char * GetStrpBuff(uint8_t strpnb)
Definition XrdEcWrtBuff.hh:202
WrtBuff(WrtBuff &&wrtbuff)
Move constructor.
Definition XrdEcWrtBuff.hh:149
std::vector< std::future< uint32_t > > cksums
Definition XrdEcWrtBuff.hh:290
~WrtBuff()
Definition XrdEcWrtBuff.hh:158
Definition XrdClZipArchive.hh:45
std::vector< stripe_t > stripes_t
All stripes in a block.
Definition XrdEcUtilities.hh:64
Definition XrdOucJson.hh:4517
Definition XrdEcObjCfg.hh:34
const uint64_t blksize
Definition XrdEcObjCfg.hh:91
const uint8_t nbdata
Definition XrdEcObjCfg.hh:87
const uint8_t nbchunks
Definition XrdEcObjCfg.hh:85
uint32_t(* digest)(uint32_t, void const *, size_t)
Definition XrdEcObjCfg.hh:96
const uint64_t chunksize
Definition XrdEcObjCfg.hh:89
const uint64_t datasize
Definition XrdEcObjCfg.hh:88