8 #ifndef SRC_XRDCL_XRDCLECHANDLER_HH_
9 #define SRC_XRDCL_XRDCLECHANDLER_HH_
93 std::vector<uint32_t> cksums;
97 cksums.reserve( nbpages );
99 size_t size = chunk->
length;
100 char *buffer =
reinterpret_cast<char*
>( chunk->
buffer );
102 for(
size_t pg = 0; pg < nbpages; ++pg )
105 if( pgsize > size ) pgsize = size;
107 cksums.push_back( crcval );
115 response->
Set( pages );
127 std::unique_ptr<CheckSumHelper>
cksHelper ) : redir( redir ),
131 cksHelper( std::move( cksHelper ) )
151 if(
objcfg->plgr.empty() )
154 if( !st.
IsOK() )
return st;
157 writer->Open( handler, timeout );
163 if( flags & OpenFlags::Write )
166 if(
objcfg->plgr.empty() )
169 if( !st.
IsOK() )
return st;
172 reader->Open( handler, timeout );
186 return Open( flags, handler, timeout );
204 +
"?xrdec.objid=" +
objcfg->obj
208 std::string ckstype =
cksHelper->GetType();
210 auto st =
cksHelper->GetCheckSum( cksval, ckstype );
216 commit +=
"&xrdec.cksum=" + cksval;
291 reader->Read( offset, size, buffer, handler, timeout );
322 writer->Write( size, buffer, handler );
333 std::vector<uint32_t> &cksums,
335 uint16_t timeout = 0 )
337 if(! cksums.empty() )
339 const char *data =
static_cast<const char*
>( buffer );
340 std::vector<uint32_t> local_cksums;
342 if (data)
delete data;
343 if (local_cksums != cksums)
346 return Write(offset, size, buffer, handler, timeout);
363 std::unique_ptr<LocationInfo> ptr( infoAll );
364 if( !st.
IsOK() )
return st;
367 std::unique_ptr<LocationInfo> ptr1( info );
374 unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
375 shuffle (info->
Begin(), info->
End(), std::default_random_engine(seed));
376 for(
size_t i = 0; i <
objcfg->nbchunks; ++i )
378 auto &location = info->
At( i );
379 objcfg->plgr.emplace_back(
"root://" + location.GetAddress() +
'/' );
388 std::unique_ptr<LocationInfo> ptr( info );
389 if( !st.
IsOK() )
return st;
394 uint64_t verNumMax = 0;
395 std::vector<uint64_t> verNums;
396 std::vector<std::string> xattrkeys;
397 std::vector<XrdCl::XAttr> xattrvals;
398 xattrkeys.push_back(
"xrdec.strpver");
399 for(
size_t i = 0; i < info->
GetSize(); ++i )
403 st = fs_i->
GetXAttr(path, xattrkeys, xattrvals, 0);
404 if (st.
IsOK() && ! xattrvals[0].value.empty())
406 std::stringstream sstream(xattrvals[0].value);
409 verNums.push_back(verNum);
410 if (verNum > verNumMax)
414 verNums.push_back(0);
419 for(
size_t i = 0; i < info->
GetSize(); ++i )
421 if ( verNums.at(i) == 0 || verNums.at(i) != verNumMax )
425 auto &location = info->
At( i );
426 objcfg->plgr.emplace_back(
"root://" + location.GetAddress() +
'/' );
428 if (n < objcfg->nbdata )
451 std::unique_ptr<XrdEc::StrmWriter>
writer;
469 std::vector<std::string> &&
plgr ) :
470 nbdta( nbdta ), nbprt( nbprt ), chsz( chsz ),
plgr( std::move(
plgr ) )
490 return new EcHandler( url, objcfg,
nullptr );
FreeSpace()
Definition: XrdClEcHandler.hh:34
Definition: XrdClAnyObject.hh:32
Implementation dependent.
Definition: XrdClFileSystem.hh:58
EcHandler * GetEcHandler(const URL &headnode, const URL &redirurl)
EcPgReadResponseHandler(ResponseHandler *a)
Definition: XrdClEcHandler.hh:77
~ServerSpaceInfo()
Definition: XrdClEcHandler.hh:48
time_t lastUpdateT
Definition: XrdClEcHandler.hh:58
const uint16_t errInvalidArgs
Definition: XrdClStatus.hh:58
XRootDStatus Stat(const std::string &path, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
const std::string & GetAddress() const
Get address.
Definition: XrdClXRootDResponses.hh:86
std::vector< std::string > plgr
Definition: XrdClEcHandler.hh:505
NLOHMANN_BASIC_JSON_TPL_DECLARATION std::string to_string(const NLOHMANN_BASIC_JSON_TPL &j)
user-defined to_string function for JSON values
Definition: XrdOucJson.hh:26358
void HandleResponse(XRootDStatus *status, AnyObject *rdresp)
Definition: XrdClEcHandler.hh:80
Definition: XrdClEcHandler.hh:45
void TryInitExportPaths()
virtual ~EcHandler()
Definition: XrdClEcHandler.hh:136
void Get(Type &object)
Retrieve the object being held.
Definition: XrdClAnyObject.hh:78
std::vector< std::string > ExportPaths
Definition: XrdClEcHandler.hh:57
Object stat info.
Definition: XrdClXRootDResponses.hh:399
Definition: XrdClEcHandler.hh:30
Definition: XrdClEcHandler.hh:122
std::unique_ptr< XrdEc::ObjCfg > objcfg
Definition: XrdClEcHandler.hh:450
Open only for writing.
Definition: XrdClFileSystem.hh:97
Call the user callback.
Definition: XrdClResponseJob.hh:30
Definition: XrdClXRootDResponses.hh:946
const std::string & GetPath() const
Get the path.
Definition: XrdClURL.hh:212
Path location info.
Definition: XrdClXRootDResponses.hh:43
XRootDStatus Stat(bool force, ResponseHandler *handler, uint16_t timeout)
Definition: XrdClEcHandler.hh:244
const uint16_t errNotSupported
Definition: XrdClStatus.hh:62
std::mutex lock
Definition: XrdClEcHandler.hh:60
Definition: XrdClEcHandler.hh:71
Location.
Definition: XrdClXRootDResponses.hh:69
std::vector< FreeSpace > ServerList
Definition: XrdClEcHandler.hh:56
bool enable_plugins
Definition: XrdEcConfig.hh:77
std::unique_ptr< StatInfo > statcache
Definition: XrdClEcHandler.hh:455
Definition: XrdEcStrmWriter.hh:52
XRootDStatus LoadPlacement(const std::string &path)
Definition: XrdClEcHandler.hh:384
static void csCalc(const char *data, off_t offs, size_t count, uint32_t *csval)
void QueueJob(Job *job, void *arg=0)
Add a job to be run.
Definition: XrdClJobManager.hh:92
XRootDStatus Close(ResponseHandler *handler, uint16_t timeout)
Definition: XrdClEcHandler.hh:193
bool IsOpen() const
Definition: XrdClEcHandler.hh:352
XRootDStatus Open(const std::string &url, OpenFlags::Flags flags, Access::Mode mode, ResponseHandler *handler, uint16_t timeout)
Definition: XrdClEcHandler.hh:179
Iterator End()
Get the location end iterator.
Definition: XrdClXRootDResponses.hh:184
void * buffer
length of the chunk
Definition: XrdClXRootDResponses.hh:941
uint64_t chsz
Definition: XrdClEcHandler.hh:504
bool initExportPaths
Definition: XrdClEcHandler.hh:61
uint64_t curroff
Definition: XrdClEcHandler.hh:453
EcPlugInFactory(uint8_t nbdta, uint8_t nbprt, uint64_t chsz, std::vector< std::string > &&plgr)
Constructor.
Definition: XrdClEcHandler.hh:468
void SelectLocations(XrdCl::LocationInfo &oldList, XrdCl::LocationInfo &newList, uint32_t n)
An interface for file plug-ins.
Definition: XrdClPlugInInterface.hh:38
XRootDStatus Write(uint64_t offset, uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout)
Definition: XrdClEcHandler.hh:311
EcHandler(const URL &redir, XrdEc::ObjCfg *objcfg, std::unique_ptr< CheckSumHelper > cksHelper)
Definition: XrdClEcHandler.hh:125
std::unique_ptr< XrdEc::Reader > reader
Definition: XrdClEcHandler.hh:452
std::unique_ptr< XrdEc::StrmWriter > writer
Definition: XrdClEcHandler.hh:451
static const int PageSize
Definition: XrdSysPageSize.hh:36
Open for reading and writing.
Definition: XrdClFileSystem.hh:96
static ResponseHandler * Wrap(std::function< void(XRootDStatus &, AnyObject &)> func)
virtual ~EcPlugInFactory()
Destructor.
Definition: XrdClEcHandler.hh:477
uint32_t length
offset in the file
Definition: XrdClXRootDResponses.hh:940
void Set(Type object, bool own=true)
Definition: XrdClAnyObject.hh:59
XRootDStatus LoadPlacement()
Definition: XrdClEcHandler.hh:359
Describe a data chunk for vector read.
Definition: XrdClXRootDResponses.hh:907
const uint16_t stError
An error occurred that could potentially be retried.
Definition: XrdClStatus.hh:32
Request status.
Definition: XrdClXRootDResponses.hh:218
bool operator<(const FreeSpace &a)
Definition: XrdClEcHandler.hh:35
uint64_t freeSpace
Definition: XrdClEcHandler.hh:33
uint8_t nbprt
Definition: XrdClEcHandler.hh:503
j template void())
Definition: XrdOucJson.hh:4121
int xRatio
Definition: XrdClEcHandler.hh:59
Location & At(uint32_t index)
Get the location at index.
Definition: XrdClXRootDResponses.hh:160
Plugin factory.
Definition: XrdClPlugInInterface.hh:548
uint8_t nbdta
Definition: XrdClEcHandler.hh:502
static AnyObject * StatRsp(uint64_t size)
Definition: XrdClEcHandler.hh:433
virtual FileSystemPlugIn * CreateFileSystem(const std::string &url)
Create a file system plug-in for the given URL.
Definition: XrdClEcHandler.hh:496
XRootDStatus Open(uint16_t flags, ResponseHandler *handler, uint16_t timeout)
Definition: XrdClEcHandler.hh:140
void Dump()
Definition: XrdClEcHandler.hh:39
void FromString(const std::string str)
Fill the buffer from a string.
Definition: XrdClBuffer.hh:205
XrdCl::ResponseHandler * realHandler
Definition: XrdClEcHandler.hh:74
Handle an async response.
Definition: XrdClXRootDResponses.hh:1116
std::string address
Definition: XrdClEcHandler.hh:32
uint64_t GetFreeSpace(const std::string addr)
uint64_t offset
Definition: XrdClXRootDResponses.hh:939
virtual void HandleResponse(XRootDStatus *status, AnyObject *response)
Definition: XrdClXRootDResponses.hh:1146
virtual FilePlugIn * CreateFile(const std::string &u)
Create a file plug-in for the given URL.
Definition: XrdClEcHandler.hh:484
XRootDStatus PgWrite(uint64_t offset, uint32_t size, const void *buffer, std::vector< uint32_t > &cksums, ResponseHandler *handler, uint16_t timeout=0)
Definition: XrdClEcHandler.hh:330
XRootDStatus DeepLocate(const std::string &path, OpenFlags::Flags flags, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Definition: XrdEcReader.hh:57
Open only for reading.
Definition: XrdClFileSystem.hh:95
URL representation.
Definition: XrdClURL.hh:30
JobManager * GetJobManager()
Get the job manager object user by the post master.
const uint16_t errInternal
Internal error.
Definition: XrdClStatus.hh:56
Mode
Access mode.
Definition: XrdClFileSystem.hh:121
Definition: XrdClFileSystem.hh:86
URL redir
Definition: XrdClEcHandler.hh:448
Send file/filesystem queries to an XRootD cluster.
Definition: XrdClFileSystem.hh:202
Nothing.
Definition: XrdClFileSystem.hh:77
Definition: XrdClFileSystem.hh:80
static uint32_t Calc32C(const void *data, size_t count, uint32_t prevcs=0)
std::unique_ptr< CheckSumHelper > cksHelper
Definition: XrdClEcHandler.hh:454
Plugin factory.
Definition: XrdClEcHandler.hh:462
static Config & Instance()
Singleton access.
Definition: XrdEcConfig.hh:46
Definition: XrdEcObjCfg.hh:33
std::vector< std::string > plgr
Definition: XrdEcObjCfg.hh:92
XRootDStatus Read(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout)
Definition: XrdClEcHandler.hh:283
static PostMaster * GetPostMaster()
Get default post master.
FileSystem fs
Definition: XrdClEcHandler.hh:449
Flags
Open flags, may be or'd when appropriate.
Definition: XrdClFileSystem.hh:75
uint32_t GetSize() const
Get number of locations.
Definition: XrdClXRootDResponses.hh:152
void SetSize(uint64_t size)
Set size.
bool IsOK() const
We're fine.
Definition: XrdClStatus.hh:123
static void Schedule(ResponseHandler *handler, AnyObject *rsp)
Definition: XrdClEcHandler.hh:442
XRootDStatus Query(QueryCode::Code queryCode, const Buffer &arg, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
const uint16_t errInvalidOp
Definition: XrdClStatus.hh:51
XRootDStatus PgRead(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout)
Definition: XrdClEcHandler.hh:298
void AddServers(XrdCl::LocationInfo &locInfo)
An interface for file plug-ins.
Definition: XrdClPlugInInterface.hh:283
Iterator Begin()
Get the location begin iterator.
Definition: XrdClXRootDResponses.hh:168
bool Exists(XrdCl::LocationInfo::Location &loc)
Binary blob representation.
Definition: XrdClBuffer.hh:33
XRootDStatus GetXAttr(const std::string &path, const std::vector< std::string > &attrs, ResponseHandler *handler, uint16_t timeout=0)