8 #ifndef SRC_XRDCL_XRDCLECHANDLER_HH_
9 #define SRC_XRDCL_XRDCLECHANDLER_HH_
78 std::string commit = redir.GetPath()
79 +
"?xrdec.objid=" + objcfg->obj
80 +
"&xrdec.close=true&xrdec.size=" + std::to_string( curroff );
81 Buffer arg; arg.FromString( commit );
82 auto st = fs.Query( QueryCode::OpaqueFile, arg, handler );
83 if( !st.IsOK() ) handler->HandleResponse( new XRootDStatus( st ), nullptr );
126 reader->Read( offset, size, buffer, handler );
141 writer->Write( size, buffer, handler );
159 std::unique_ptr<XrdEc::StrmWriter>
writer;
169 URL::ParamsMap::const_iterator itr = params.find(
"xrdec.nbdta" );
170 if( itr == params.end() )
return nullptr;
171 uint8_t nbdta = std::stoul( itr->second );
173 itr = params.find(
"xrdec.nbprt" );
174 if( itr == params.end() )
return nullptr;
175 uint8_t nbprt = std::stoul( itr->second );
177 itr = params.find(
"xrdec.blksz" );
178 if( itr == params.end() )
return nullptr;
179 uint64_t blksz = std::stoul( itr->second );
181 itr = params.find(
"xrdec.plgr" );
182 if( itr == params.end() )
return nullptr;
183 std::vector<std::string> plgr;
185 if( plgr.size() < nbdta + nbprt )
return nullptr;
187 itr = params.find(
"xrdec.objid" );
188 if( itr == params.end() )
return nullptr;
189 std::string objid = itr->second;
191 itr = params.find(
"xrdec.format" );
192 if( itr == params.end() )
return nullptr;
193 size_t format = std::stoul( itr->second );
194 if( format != 1 )
return nullptr;
196 std::vector<std::string> dtacgi;
197 itr = params.find(
"xrdec.dtacgi" );
198 if( itr != params.end() )
201 if( plgr.size() != dtacgi.size() )
return nullptr;
204 std::vector<std::string> mdtacgi;
205 itr = params.find(
"xrdec.mdtacgi" );
206 if( itr != params.end() )
209 if( plgr.size() != mdtacgi.size() )
return nullptr;
212 itr = params.find(
"xrdec.cosc" );
213 if( itr == params.end() )
return nullptr;
214 std::string cosc_str = itr->second;
215 if( cosc_str !=
"true" && cosc_str !=
"false" )
return nullptr;
216 bool cosc = cosc_str ==
"true";
219 objcfg->
plgr = std::move( plgr );
220 objcfg->
dtacgi = std::move( dtacgi );
221 objcfg->
mdtacgi = std::move( mdtacgi );
223 return new EcHandler( headnode, objcfg, cosc );
Definition: XrdClAnyObject.hh:33
Definition: XrdClEcHandler.hh:22
XrdCl::XRootDStatus Write(uint64_t offset, uint32_t size, const void *buffer, XrdCl::ResponseHandler *handler, uint16_t timeout)
Definition: XrdClEcHandler.hh:133
bool cosc
Definition: XrdClEcHandler.hh:162
std::unique_ptr< XrdEc::Reader > reader
Definition: XrdClEcHandler.hh:160
std::unique_ptr< XrdEc::ObjCfg > objcfg
Definition: XrdClEcHandler.hh:158
FileSystem fs
Definition: XrdClEcHandler.hh:157
uint64_t curroff
Definition: XrdClEcHandler.hh:161
bool IsOpen() const
Definition: XrdClEcHandler.hh:149
URL redir
Definition: XrdClEcHandler.hh:156
XrdCl::XRootDStatus Read(uint64_t offset, uint32_t size, void *buffer, XrdCl::ResponseHandler *handler, uint16_t timeout)
Definition: XrdClEcHandler.hh:118
std::unique_ptr< XrdEc::StrmWriter > writer
Definition: XrdClEcHandler.hh:159
virtual ~EcHandler()
Definition: XrdClEcHandler.hh:32
XrdCl::XRootDStatus Stat(bool force, XrdCl::ResponseHandler *handler, uint16_t timeout)
Definition: XrdClEcHandler.hh:107
XrdCl::XRootDStatus Close(XrdCl::ResponseHandler *handler, uint16_t timeout)
Definition: XrdClEcHandler.hh:68
XrdCl::XRootDStatus Open(uint16_t flags, XrdCl::ResponseHandler *handler, uint16_t timeout)
Definition: XrdClEcHandler.hh:36
EcHandler(const URL &redir, XrdEc::ObjCfg *objcfg, bool cosc)
Definition: XrdClEcHandler.hh:24
An interface for file plug-ins.
Definition: XrdClPlugInInterface.hh:39
Send file/filesystem queries to an XRootD cluster.
Definition: XrdClFileSystem.hh:203
XRootDStatus Stat(const std::string &path, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Handle an async response.
Definition: XrdClXRootDResponses.hh:1051
static ResponseHandler * Wrap(std::function< void(XRootDStatus &, AnyObject &)> func)
virtual void HandleResponse(XRootDStatus *status, AnyObject *response)
Definition: XrdClXRootDResponses.hh:1080
URL representation.
Definition: XrdClURL.hh:31
std::map< std::string, std::string > ParamsMap
Definition: XrdClURL.hh:33
const ParamsMap & GetParams() const
Get the URL params.
Definition: XrdClURL.hh:239
const std::string & GetPath() const
Get the path.
Definition: XrdClURL.hh:212
static void splitString(Container &result, const std::string &input, const std::string &delimiter)
Split a string.
Definition: XrdClUtils.hh:53
Request status.
Definition: XrdClXRootDResponses.hh:219
Definition: XrdEcReader.hh:58
Definition: XrdEcStrmWriter.hh:53
Definition: XrdClAnyObject.hh:26
const uint16_t stError
An error occurred that could potentially be retried.
Definition: XrdClStatus.hh:32
const uint16_t errInternal
Internal error.
Definition: XrdClStatus.hh:56
const uint16_t errNotSupported
Definition: XrdClStatus.hh:62
EcHandler * GetEcHandler(const URL &headnode, const URL &redirurl)
Definition: XrdClEcHandler.hh:165
@ Delete
Definition: XrdClFileSystem.hh:80
@ Read
Open only for reading.
Definition: XrdClFileSystem.hh:95
@ New
Definition: XrdClFileSystem.hh:86
@ Write
Open only for writing.
Definition: XrdClFileSystem.hh:97
@ Update
Open for reading and writing.
Definition: XrdClFileSystem.hh:96
bool IsOK() const
We're fine.
Definition: XrdClStatus.hh:122
Definition: XrdEcObjCfg.hh:20
std::vector< std::string > mdtacgi
Definition: XrdEcObjCfg.hh:78
std::vector< std::string > plgr
Definition: XrdEcObjCfg.hh:76
std::vector< std::string > dtacgi
Definition: XrdEcObjCfg.hh:77