26 #ifndef __XRD_CL_FILE_OPERATIONS_HH__ 27 #define __XRD_CL_FILE_OPERATIONS_HH__ 44 template<
template<
bool>
class Derived,
bool HasHndl,
typename Response,
typename ... Arguments>
48 template<
template<
bool>
class, bool,
typename,
typename ...>
friend class FileOperation;
94 template<
bool HasHndl>
178 template<
typename Hdlr>
181 ExResp factory( *this->file );
182 return this->StreamImpl( factory.
Create( hdlr ) );
203 const std::string &url = std::get<UrlArg>( this->args );
206 uint16_t timeout = pipelineTimeout < this->timeout ?
207 pipelineTimeout : this->timeout;
208 return this->file->Open( url, flags, mode, handler, timeout );
216 template<
bool HasHndl>
218 Arg<uint64_t>, Arg<uint32_t>, Arg<void*>>
252 uint64_t offset = std::get<OffsetArg>( this->
args ).Get();
253 uint32_t size = std::get<SizeArg>( this->
args ).Get();
254 void *buffer = std::get<BufferArg>( this->
args ).Get();
255 uint16_t
timeout = pipelineTimeout < this->timeout ?
256 pipelineTimeout : this->
timeout;
267 return ReadImpl<false>( std::move( file ), std::move( offset ), std::move( size ),
268 std::move( buffer ) ).
Timeout( timeout );
274 template<
bool HasHndl>
276 Arg<uint64_t>, Arg<uint32_t>, Arg<void*>>
310 uint64_t offset = std::get<OffsetArg>( this->
args ).Get();
311 uint32_t size = std::get<SizeArg>( this->
args ).Get();
312 void *buffer = std::get<BufferArg>( this->
args ).Get();
313 uint16_t
timeout = pipelineTimeout < this->timeout ?
314 pipelineTimeout : this->
timeout;
324 uint16_t timeout = 0 )
326 return PgReadImpl<false>( std::move( file ), std::move( offset ), std::move( size ),
327 std::move( buffer ) ).
Timeout( timeout );
347 return Read( std::move( file ), std::move( offset ), std::move( size ),
348 std::move( buffer ), timeout );
351 template<>
inline PgReadImpl<false>
355 return PgRead( std::move( file ), std::move( offset ), std::move( size ),
356 std::move( buffer ), timeout );
362 template<
bool HasHndl>
391 uint16_t
timeout = pipelineTimeout < this->timeout ?
392 pipelineTimeout : this->
timeout;
401 template<
bool HasHndl>
435 bool force = std::get<ForceArg>( this->
args ).Get();
436 uint16_t
timeout = pipelineTimeout < this->timeout ?
437 pipelineTimeout : this->
timeout;
454 template<
bool HasHndl>
456 Arg<uint32_t>, Arg<const void*>>
490 uint64_t offset = std::get<OffsetArg>( this->
args ).Get();
491 uint32_t size = std::get<SizeArg>( this->
args ).Get();
492 const void *buffer = std::get<BufferArg>( this->
args ).Get();
493 uint16_t
timeout = pipelineTimeout < this->timeout ?
494 pipelineTimeout : this->
timeout;
495 return this->file->Write( offset, size, buffer,
handler,
timeout );
505 return WriteImpl<false>( std::move( file ), std::move( offset ), std::move( size ),
506 std::move( buffer ) ).
Timeout( timeout );
512 template<
bool HasHndl>
541 uint16_t
timeout = pipelineTimeout < this->timeout ?
542 pipelineTimeout : this->
timeout;
551 template<
bool HasHndl>
585 uint64_t size = std::get<SizeArg>( this->
args ).Get();
586 uint16_t
timeout = pipelineTimeout < this->timeout ?
587 pipelineTimeout : this->
timeout;
604 template<
bool HasHndl>
606 Resp<VectorReadInfo>, Arg<ChunkList>, Arg<void*>>
641 void *buffer = std::get<BufferArg>( this->
args ).Get();
642 uint16_t
timeout = pipelineTimeout < this->timeout ?
643 pipelineTimeout : this->
timeout;
644 return this->file->VectorRead( chunks, buffer,
handler,
timeout );
652 template<
bool HasHndl>
673 return "VectorWrite";
687 const ChunkList &chunks = std::get<ChunksArg>( this->
args ).Get();
688 uint16_t
timeout = pipelineTimeout < this->timeout ?
689 pipelineTimeout : this->
timeout;
698 template<
bool HasHndl>
700 Arg<std::vector<iovec>>>
734 uint64_t offset = std::get<OffsetArg>( this->
args ).Get();
735 std::vector<iovec> &stdiov = std::get<IovArg>( this->
args ).Get();
736 uint16_t
timeout = pipelineTimeout < this->timeout ?
737 pipelineTimeout : this->
timeout;
739 int iovcnt = stdiov.size();
741 for(
size_t i = 0; i < stdiov.size(); ++i )
743 iov[i].iov_base = stdiov[i].iov_base;
744 iov[i].iov_len = stdiov[i].iov_len;
755 Arg<std::vector<iovec>>
iov, uint16_t timeout = 0 )
764 template<
bool HasHndl>
798 Buffer &arg = std::get<BufferArg>( this->
args ).Get();
799 uint16_t
timeout = pipelineTimeout < this->timeout ?
800 pipelineTimeout : this->
timeout;
809 template<
bool HasHndl>
838 uint16_t
timeout = pipelineTimeout < this->timeout ?
839 pipelineTimeout : this->
timeout;
848 template<
bool HasHndl>
850 Arg<std::string>, Arg<std::string>>
870 return "SetXAttrImpl";
884 std::string &name = std::get<NameArg>( this->
args ).Get();
885 std::string &value = std::get<ValueArg>( this->
args ).Get();
887 std::vector<xattr_t> attrs;
888 attrs.push_back(
xattr_t( name, value ) );
891 uint16_t
timeout = pipelineTimeout < this->timeout ?
892 pipelineTimeout : this->
timeout;
894 if( !st.
IsOK() )
delete h;
911 template<
bool HasHndl>
913 Resp<std::vector<XAttrStatus>>, Arg<std::vector<xattr_t>>>
933 return "SetXAttrBulkImpl";
948 std::vector<xattr_t> &attrs = std::get<AttrsArg>( this->
args ).Get();
949 uint16_t
timeout = pipelineTimeout < this->timeout ?
950 pipelineTimeout : this->
timeout;
967 template<
bool HasHndl>
989 return "GetXAttrImpl";
1003 std::string &name = std::get<NameArg>( this->
args ).Get();
1005 std::vector<std::string> attrs;
1006 attrs.push_back( name );
1009 uint16_t
timeout = pipelineTimeout < this->timeout ?
1010 pipelineTimeout : this->
timeout;
1012 if( !st.
IsOK() )
delete h;
1029 template<
bool HasHndl>
1031 Arg<std::vector<std::string>>>
1051 return "GetXAttrBulkImpl";
1066 std::vector<std::string> &attrs = std::get<NamesArg>( this->
args ).Get();
1067 uint16_t
timeout = pipelineTimeout < this->timeout ?
1068 pipelineTimeout : this->
timeout;
1085 template<
bool HasHndl>
1106 return "DelXAttrImpl";
1120 std::string &name = std::get<NameArg>( this->
args ).Get();
1122 std::vector<std::string> attrs;
1123 attrs.push_back( name );
1126 uint16_t
timeout = pipelineTimeout < this->timeout ?
1127 pipelineTimeout : this->
timeout;
1129 if( !st.
IsOK() )
delete h;
1146 template<
bool HasHndl>
1148 Resp<std::vector<XAttrStatus>>, Arg<std::vector<std::string>>>
1168 return "DelXAttrBulkImpl";
1183 std::vector<std::string> &attrs = std::get<NamesArg>( this->
args ).Get();
1184 uint16_t
timeout = pipelineTimeout < this->timeout ?
1185 pipelineTimeout : this->
timeout;
1202 template<
bool HasHndl>
1204 Resp<std::vector<XAttr>>>
1218 return "ListXAttrImpl";
1233 uint16_t
timeout = pipelineTimeout < this->timeout ?
1234 pipelineTimeout : this->
timeout;
1249 #endif // __XRD_CL_FILE_OPERATIONS_HH__ XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:308
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:946
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:882
ListXAttrImpl< false > ListXAttr(Ctx< File > file)
Definition: XrdClFileOperations.hh:1243
std::string ToString()
Definition: XrdClFileOperations.hh:718
CloseImpl< false > Close
Definition: XrdClFileOperations.hh:396
ReadTrait< RSP >::RET RdWithRsp(Ctx< File > file, Arg< uint64_t > offset, Arg< uint32_t > size, Arg< void *> buffer, uint16_t timeout=0)
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:1064
std::string ToString()
Definition: XrdClFileOperations.hh:868
Close operation (.
Definition: XrdClFileOperations.hh:363
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:1181
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:1118
SetXAttrImpl< false > SetXAttr(Ctx< File > file, Arg< std::string > name, Arg< std::string > value)
Definition: XrdClFileOperations.hh:903
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:488
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:1231
Utility class for storing a pointer to operation context.
Definition: XrdClCtx.hh:37
std::vector< ChunkInfo > ChunkList
List of chunks.
Definition: XrdClXRootDResponses.hh:1046
VectorReadImpl< false > VectorRead
Definition: XrdClFileOperations.hh:647
VectorRead operation (.
Definition: XrdClFileOperations.hh:605
FcntlImpl< false > Fcntl
Definition: XrdClFileOperations.hh:804
std::string ToString()
Definition: XrdClFileOperations.hh:931
Object stat info.
Definition: XrdClXRootDResponses.hh:399
std::string ToString()
Definition: XrdClFileOperations.hh:375
std::string ToString()
Definition: XrdClFileOperations.hh:188
Definition: XrdClOperationTimeout.hh:19
FileOperation(FileOperation< Derived, from, Response, Arguments... > &&op)
Definition: XrdClFileOperations.hh:69
std::string ToString()
Definition: XrdClFileOperations.hh:1166
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:638
Definition: XrdClXRootDResponses.hh:946
Ctx< File > file
The underlying XrdCl::File object.
Definition: XrdClFileOperations.hh:136
Definition: XrdClFileOperations.hh:619
PgReadImpl< false > RdWithRsp< PageInfo >(Ctx< File > file, Arg< uint64_t > offset, Arg< uint32_t > size, Arg< void *> buffer, uint16_t timeout)
Definition: XrdClFileOperations.hh:352
DelXAttr bulk operation (.
Definition: XrdClFileOperations.hh:1147
Definition: XrdClFileOperations.hh:1044
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:539
VectorWrite operation (.
Definition: XrdClFileOperations.hh:653
uint16_t timeout
Operation timeout.
Definition: XrdClOperations.hh:766
Fcntl operation (.
Definition: XrdClFileOperations.hh:765
DelXAttrImpl< false > DelXAttr(Ctx< File > file, Arg< std::string > name)
Definition: XrdClFileOperations.hh:1138
Definition: XrdOucJson.hh:4516
SyncImpl< false > Sync
Definition: XrdClFileOperations.hh:546
bool IsOK() const
We're fine.
Definition: XrdClStatus.hh:123
Definition: XrdClFileOperations.hh:713
SetXAttr operation (.
Definition: XrdClFileOperations.hh:849
std::string ToString()
Definition: XrdClFileOperations.hh:474
Visa operation (.
Definition: XrdClFileOperations.hh:810
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:796
std::string ToString()
Definition: XrdClFileOperations.hh:569
WriteImpl< false > Write(Ctx< File > file, Arg< uint64_t > offset, Arg< uint32_t > size, Arg< const void *> buffer, uint16_t timeout=0)
Factory for creating WriteImpl objects.
Definition: XrdClFileOperations.hh:502
Access mode.
Definition: XrdClFileSystem.hh:116
Definition: XrdClFileOperations.hh:713
GetXAttr operation (.
Definition: XrdClFileOperations.hh:968
std::string ToString()
Definition: XrdClFileOperations.hh:525
Definition: XrdClFileOperations.hh:231
Read operation (.
Definition: XrdClFileOperations.hh:217
std::string ToString()
Definition: XrdClFileOperations.hh:671
std::string ToString()
Definition: XrdClFileOperations.hh:782
Definition: XrdClFileOperations.hh:666
std::string ToString()
Definition: XrdClFileOperations.hh:236
OpenImpl< true > operator>>(Hdlr &&hdlr)
Definition: XrdClFileOperations.hh:179
std::string ToString()
Definition: XrdClFileOperations.hh:1216
Definition: XrdClFileOperations.hh:289
GetXAttrImpl< false > GetXAttr(Ctx< File > file, Arg< std::string > name)
Definition: XrdClFileOperations.hh:1021
Definition: XrdClFileOperations.hh:170
TruncateImpl< false > Truncate(Ctx< File > file, Arg< uint64_t > size)
Definition: XrdClFileOperations.hh:596
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:836
Definition: XrdClFileOperations.hh:982
VectorWriteImpl< false > VectorWrite
Definition: XrdClFileOperations.hh:693
ListXAttr bulk operation (.
Definition: XrdClFileOperations.hh:1203
std::string ToString()
Definition: XrdClFileOperations.hh:822
Definition: XrdClOperationHandlers.hh:623
Definition: XrdClFileOperations.hh:289
Truncate operation (.
Definition: XrdClFileOperations.hh:552
Definition: XrdClFileOperations.hh:469
WriteV operation (.
Definition: XrdClFileOperations.hh:699
Open flags, may be or'd when appropriate.
Definition: XrdClFileSystem.hh:70
Definition: XrdClFileOperations.hh:469
Definition: XrdClFileOperations.hh:231
Definition: XrdOucIOVec.hh:65
std::string ToString()
Definition: XrdClFileOperations.hh:419
Definition: XrdClFileOperations.hh:863
virtual ~FileOperation()
Destructor.
Definition: XrdClFileOperations.hh:78
SetXAttr bulk operation (.
Definition: XrdClFileOperations.hh:912
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:732
Definition: XrdClFileOperations.hh:469
Helper class for unpacking single XAttr from bulk response.
Definition: XrdClOperationHandlers.hh:76
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:201
std::tuple< Args... > args
Operation arguments.
Definition: XrdClOperations.hh:761
Definition: XrdClFileOperations.hh:619
Definition: XrdClArg.hh:232
Definition: XrdClFileOperations.hh:105
Definition: XrdClArg.hh:294
Stat operation (.
Definition: XrdClFileOperations.hh:402
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:583
Describe a data chunk for vector read.
Definition: XrdClXRootDResponses.hh:907
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:1001
Request status.
Definition: XrdClXRootDResponses.hh:218
Definition: XrdClAnyObject.hh:25
ReadImpl< false > Read(Ctx< File > file, Arg< uint64_t > offset, Arg< uint32_t > size, Arg< void *> buffer, uint16_t timeout=0)
Factory for creating ReadImpl objects.
Definition: XrdClFileOperations.hh:264
StatImpl< false > Stat(Ctx< File > file, Arg< bool > force, uint16_t timeout=0)
Definition: XrdClFileOperations.hh:446
ReadImpl< false > RdWithRsp< ChunkInfo >(Ctx< File > file, Arg< uint64_t > offset, Arg< uint32_t > size, Arg< void *> buffer, uint16_t timeout)
Definition: XrdClFileOperations.hh:344
Definition: XrdClFileOperations.hh:231
GetXAttr bulk operation (.
Definition: XrdClFileOperations.hh:1030
Definition: XrdClFileOperations.hh:926
Sync operation (.
Definition: XrdClFileOperations.hh:513
std::string ToString()
Definition: XrdClFileOperations.hh:987
j template void())
Definition: XrdOucJson.hh:4121
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:250
Definition: XrdClOperations.hh:58
Lambda wrapper.
Definition: XrdClOperationHandlers.hh:311
OpenImpl(OpenImpl< from > &&open)
Definition: XrdClFileOperations.hh:160
Definition: XrdClFileOperations.hh:45
Handle an async response.
Definition: XrdClXRootDResponses.hh:1116
Definition: XrdClFileSystem.hh:123
Helper class for unpacking single XAttrStatus from bulk response.
Definition: XrdClOperationHandlers.hh:41
PgRead operation (.
Definition: XrdClFileOperations.hh:275
std::string ToString()
Definition: XrdClFileOperations.hh:624
Definition: XrdClFileOperations.hh:289
OpenImpl< false > Open
Definition: XrdClFileOperations.hh:211
Definition: XrdClFileOperations.hh:1099
friend class FileOperation
Definition: XrdClFileOperations.hh:48
ResponseHandler * Create(std::function< void(XRootDStatus &, StatInfo &)> func)
Definition: XrdClFileOperations.hh:122
Open operation (.
Definition: XrdClFileOperations.hh:95
PgReadImpl< false > PgRead(Ctx< File > file, Arg< uint64_t > offset, Arg< uint32_t > size, Arg< void *> buffer, uint16_t timeout=0)
Factory for creating PgReadImpl objects.
Definition: XrdClFileOperations.hh:322
Definition: XrdClFileOperations.hh:414
Mode
Access mode.
Definition: XrdClFileSystem.hh:121
std::string ToString()
Definition: XrdClFileOperations.hh:1104
Definition: XrdClFileOperations.hh:564
#define open
Definition: XrdPosix.hh:71
RdWithRsp: factory for creating ReadImpl/PgReadImpl objects.
Definition: XrdClFileOperations.hh:333
VisaImpl< false > Visa
Definition: XrdClFileOperations.hh:843
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:433
Definition: XrdClFileOperations.hh:1161
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:685
WriteVImpl< false > WriteV(Ctx< File > file, Arg< uint64_t > offset, Arg< std::vector< iovec >> iov, uint16_t timeout=0)
Factory for creating WriteVImpl objects.
Definition: XrdClFileOperations.hh:754
FileOperation(Ctx< File > f, Arguments... args)
Definition: XrdClFileOperations.hh:57
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:389
Flags
Open flags, may be or'd when appropriate.
Definition: XrdClFileSystem.hh:75
std::tuple< std::string, std::string > xattr_t
Extended attribute key - value pair.
Definition: XrdClXRootDResponses.hh:289
Ctx< File > file
The file object itself.
Definition: XrdClFileOperations.hh:88
Write operation (.
Definition: XrdClFileOperations.hh:455
std::string ToString()
Definition: XrdClFileOperations.hh:1049
ExResp(const Ctx< File > &file)
Definition: XrdClFileOperations.hh:112
std::unique_ptr< PipelineHandler > handler
Operation handler.
Definition: XrdClOperations.hh:304
Definition: XrdClFileOperations.hh:863
OpenImpl(Ctx< File > f, Arg< std::string > url, Arg< OpenFlags::Flags > flags, Arg< Access::Mode > mode=Access::None)
Constructor (.
Definition: XrdClFileOperations.hh:144
std::string ToString()
Definition: XrdClFileOperations.hh:294
Binary blob representation.
Definition: XrdClBuffer.hh:33
DelXAttr operation (.
Definition: XrdClFileOperations.hh:1086
Definition: XrdClOperations.hh:541
Definition: XrdClFileOperations.hh:777