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>
147 Arg<
Access::Mode>>( std::move( f ), std::move( url ), std::move( flags ),
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;
257 return this->
file->Read( offset, size, buffer, handler, timeout );
267 return ReadImpl<false>( std::move( file ), std::move( offset ), std::move( size ),
268 std::move( buffer ) ).
Timeout( timeout );
274 template<
bool HasHndl>
303 uint16_t
timeout = pipelineTimeout < this->timeout ?
304 pipelineTimeout : this->
timeout;
305 return this->
file->Close( handler, timeout );
313 template<
bool HasHndl>
347 bool force = std::get<ForceArg>( this->
args ).Get();
348 uint16_t
timeout = pipelineTimeout < this->timeout ?
349 pipelineTimeout : this->
timeout;
350 return this->
file->Stat( force, handler, timeout );
366 template<
bool HasHndl>
368 Arg<uint32_t>, Arg<const void*>>
402 uint64_t offset = std::get<OffsetArg>( this->
args ).Get();
403 uint32_t size = std::get<SizeArg>( this->
args ).Get();
404 const void *buffer = std::get<BufferArg>( this->
args ).Get();
405 uint16_t
timeout = pipelineTimeout < this->timeout ?
406 pipelineTimeout : this->
timeout;
407 return this->
file->Write( offset, size, buffer, handler, timeout );
417 return WriteImpl<false>( std::move( file ), std::move( offset ), std::move( size ),
418 std::move( buffer ) ).
Timeout( timeout );
424 template<
bool HasHndl>
453 uint16_t
timeout = pipelineTimeout < this->timeout ?
454 pipelineTimeout : this->
timeout;
455 return this->
file->Sync( handler, timeout );
463 template<
bool HasHndl>
497 uint64_t size = std::get<SizeArg>( this->
args ).Get();
498 uint16_t
timeout = pipelineTimeout < this->timeout ?
499 pipelineTimeout : this->
timeout;
500 return this->
file->Truncate( size, handler, timeout );
516 template<
bool HasHndl>
518 Resp<VectorReadInfo>, Arg<ChunkList>, Arg<void*>>
553 void *buffer = std::get<BufferArg>( this->
args ).Get();
554 uint16_t
timeout = pipelineTimeout < this->timeout ?
555 pipelineTimeout : this->
timeout;
556 return this->
file->VectorRead( chunks, buffer, handler, timeout );
564 template<
bool HasHndl>
585 return "VectorWrite";
599 const ChunkList &chunks = std::get<ChunksArg>( this->
args ).Get();
600 uint16_t
timeout = pipelineTimeout < this->timeout ?
601 pipelineTimeout : this->
timeout;
602 return this->
file->VectorWrite( chunks, handler, timeout );
610 template<
bool HasHndl>
612 Arg<std::vector<iovec>>>
646 uint64_t offset = std::get<OffsetArg>( this->
args ).Get();
647 std::vector<iovec> &stdiov = std::get<IovArg>( this->
args ).Get();
648 uint16_t
timeout = pipelineTimeout < this->timeout ?
649 pipelineTimeout : this->
timeout;
651 int iovcnt = stdiov.size();
653 for(
size_t i = 0; i < stdiov.size(); ++i )
655 iov[i].iov_base = stdiov[i].iov_base;
656 iov[i].iov_len = stdiov[i].iov_len;
659 return this->
file->WriteV( offset, iov, iovcnt, handler, timeout );
667 Arg<std::vector<iovec>>
iov, uint16_t timeout = 0 )
676 template<
bool HasHndl>
710 Buffer &arg = std::get<BufferArg>( this->
args ).Get();
711 uint16_t
timeout = pipelineTimeout < this->timeout ?
712 pipelineTimeout : this->
timeout;
713 return this->
file->Fcntl( arg, handler, timeout );
721 template<
bool HasHndl>
750 uint16_t
timeout = pipelineTimeout < this->timeout ?
751 pipelineTimeout : this->
timeout;
752 return this->
file->Visa( handler, timeout );
760 template<
bool HasHndl>
762 Arg<std::string>, Arg<std::string>>
782 return "SetXAttrImpl";
796 std::string &name = std::get<NameArg>( this->
args ).Get();
797 std::string &value = std::get<ValueArg>( this->
args ).Get();
799 std::vector<xattr_t> attrs;
800 attrs.push_back(
xattr_t( name, value ) );
803 uint16_t
timeout = pipelineTimeout < this->timeout ?
804 pipelineTimeout : this->
timeout;
806 if( !st.
IsOK() )
delete h;
823 template<
bool HasHndl>
825 Resp<std::vector<XAttrStatus>>, Arg<std::vector<xattr_t>>>
845 return "SetXAttrBulkImpl";
860 std::vector<xattr_t> &attrs = std::get<AttrsArg>( this->
args ).Get();
861 uint16_t
timeout = pipelineTimeout < this->timeout ?
862 pipelineTimeout : this->
timeout;
863 return this->
file->SetXAttr( attrs, handler, timeout );
879 template<
bool HasHndl>
901 return "GetXAttrImpl";
915 std::string &name = std::get<NameArg>( this->
args ).Get();
917 std::vector<std::string> attrs;
918 attrs.push_back( name );
921 uint16_t
timeout = pipelineTimeout < this->timeout ?
922 pipelineTimeout : this->
timeout;
924 if( !st.
IsOK() )
delete handler;
941 template<
bool HasHndl>
943 Arg<std::vector<std::string>>>
963 return "GetXAttrBulkImpl";
978 std::vector<std::string> &attrs = std::get<NamesArg>( this->
args ).Get();
979 uint16_t
timeout = pipelineTimeout < this->timeout ?
980 pipelineTimeout : this->
timeout;
981 return this->
file->GetXAttr( attrs, handler, timeout );
997 template<
bool HasHndl>
1018 return "DelXAttrImpl";
1032 std::string &name = std::get<NameArg>( this->
args ).Get();
1034 std::vector<std::string> attrs;
1035 attrs.push_back( name );
1038 uint16_t
timeout = pipelineTimeout < this->timeout ?
1039 pipelineTimeout : this->
timeout;
1041 if( !st.
IsOK() )
delete h;
1058 template<
bool HasHndl>
1060 Resp<std::vector<XAttrStatus>>, Arg<std::vector<std::string>>>
1080 return "DelXAttrBulkImpl";
1095 std::vector<std::string> &attrs = std::get<NamesArg>( this->
args ).Get();
1096 uint16_t
timeout = pipelineTimeout < this->timeout ?
1097 pipelineTimeout : this->
timeout;
1098 return this->
file->DelXAttr( attrs, handler, timeout );
1114 template<
bool HasHndl>
1116 Resp<std::vector<XAttr>>>
1130 return "ListXAttrImpl";
1145 uint16_t
timeout = pipelineTimeout < this->timeout ?
1146 pipelineTimeout : this->
timeout;
1147 return this->
file->ListXAttr( handler, timeout );
1161 #endif // __XRD_CL_FILE_OPERATIONS_HH__
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:858
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:794
Definition: XrdClFileOperations.hh:1073
ListXAttrImpl< false > ListXAttr(Ctx< File > file)
Definition: XrdClFileOperations.hh:1155
std::string ToString()
Definition: XrdClFileOperations.hh:630
CloseImpl< false > Close
Definition: XrdClFileOperations.hh:308
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:976
std::string ToString()
Definition: XrdClFileOperations.hh:780
FileOperation(FileOperation< Derived, from, Response, Arguments...> &&op)
Definition: XrdClFileOperations.hh:69
Close operation (.
Definition: XrdClFileOperations.hh:275
Definition: XrdClFileOperations.hh:578
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:1093
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:1030
SetXAttrImpl< false > SetXAttr(Ctx< File > file, Arg< std::string > name, Arg< std::string > value)
Definition: XrdClFileOperations.hh:815
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:400
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:1143
Utility class for storing a pointer to operation context.
Definition: XrdClCtx.hh:37
std::vector< ChunkInfo > ChunkList
List of chunks.
Definition: XrdClXRootDResponses.hh:980
VectorReadImpl< false > VectorRead
Definition: XrdClFileOperations.hh:559
Definition: XrdClFileOperations.hh:894
VectorRead operation (.
Definition: XrdClFileOperations.hh:517
FcntlImpl< false > Fcntl
Definition: XrdClFileOperations.hh:716
std::string ToString()
Definition: XrdClFileOperations.hh:843
Object stat info.
Definition: XrdClXRootDResponses.hh:399
std::string ToString()
Definition: XrdClFileOperations.hh:287
std::string ToString()
Definition: XrdClFileOperations.hh:188
Definition: XrdClFileOperations.hh:625
Definition: XrdClOperationTimeout.hh:19
std::string ToString()
Definition: XrdClFileOperations.hh:1078
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:550
Ctx< File > file
The underlying XrdCl::File object.
Definition: XrdClFileOperations.hh:136
DelXAttr bulk operation (.
Definition: XrdClFileOperations.hh:1059
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:451
VectorWrite operation (.
Definition: XrdClFileOperations.hh:565
uint16_t timeout
Operation timeout.
Definition: XrdClOperations.hh:766
Fcntl operation (.
Definition: XrdClFileOperations.hh:677
DelXAttrImpl< false > DelXAttr(Ctx< File > file, Arg< std::string > name)
Definition: XrdClFileOperations.hh:1050
SyncImpl< false > Sync
Definition: XrdClFileOperations.hh:458
SetXAttr operation (.
Definition: XrdClFileOperations.hh:761
std::string ToString()
Definition: XrdClFileOperations.hh:386
Visa operation (.
Definition: XrdClFileOperations.hh:722
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:708
FileOperation(Ctx< File > f, Arguments...args)
Definition: XrdClFileOperations.hh:57
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
std::string ToString()
Definition: XrdClFileOperations.hh:481
Access mode.
Definition: XrdClFileSystem.hh:116
Definition: XrdClFileOperations.hh:476
GetXAttr operation (.
Definition: XrdClFileOperations.hh:880
std::string ToString()
Definition: XrdClFileOperations.hh:437
Definition: XrdClFileOperations.hh:231
Read operation (.
Definition: XrdClFileOperations.hh:217
std::string ToString()
Definition: XrdClFileOperations.hh:583
std::string ToString()
Definition: XrdClFileOperations.hh:694
std::string ToString()
Definition: XrdClFileOperations.hh:236
OpenImpl< true > operator>>(Hdlr &&hdlr)
Definition: XrdClFileOperations.hh:179
std::string ToString()
Definition: XrdClFileOperations.hh:1128
GetXAttrImpl< false > GetXAttr(Ctx< File > file, Arg< std::string > name)
Definition: XrdClFileOperations.hh:933
Definition: XrdClFileOperations.hh:170
TruncateImpl< false > Truncate(Ctx< File > file, Arg< uint64_t > size)
Definition: XrdClFileOperations.hh:508
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:748
VectorWriteImpl< false > VectorWrite
Definition: XrdClFileOperations.hh:605
ListXAttr bulk operation (.
Definition: XrdClFileOperations.hh:1115
std::string ToString()
Definition: XrdClFileOperations.hh:734
Definition: XrdClOperationHandlers.hh:623
Truncate operation (.
Definition: XrdClFileOperations.hh:464
WriteV operation (.
Definition: XrdClFileOperations.hh:611
Open flags, may be or'd when appropriate.
Definition: XrdClFileSystem.hh:70
Definition: XrdClFileOperations.hh:231
Definition: XrdOucIOVec.hh:65
std::string ToString()
Definition: XrdClFileOperations.hh:331
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:414
Definition: XrdClFileOperations.hh:775
Definition: XrdClFileOperations.hh:381
virtual ~FileOperation()
Destructor.
Definition: XrdClFileOperations.hh:78
SetXAttr bulk operation (.
Definition: XrdClFileOperations.hh:824
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:644
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: XrdClArg.hh:232
Definition: XrdClFileOperations.hh:105
Definition: XrdClArg.hh:294
Stat operation (.
Definition: XrdClFileOperations.hh:314
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:495
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:913
Request status.
Definition: XrdClXRootDResponses.hh:218
StatImpl< false > Stat(Ctx< File > file, Arg< bool > force, uint16_t timeout=0)
Definition: XrdClFileOperations.hh:358
Definition: XrdClFileOperations.hh:231
GetXAttr bulk operation (.
Definition: XrdClFileOperations.hh:942
Sync operation (.
Definition: XrdClFileOperations.hh:425
Definition: XrdClFileOperations.hh:326
std::string ToString()
Definition: XrdClFileOperations.hh:899
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:250
Definition: XrdClFileOperations.hh:381
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:1050
Definition: XrdClFileSystem.hh:123
Helper class for unpacking single XAttrStatus from bulk response.
Definition: XrdClOperationHandlers.hh:41
std::string ToString()
Definition: XrdClFileOperations.hh:536
OpenImpl< false > Open
Definition: XrdClFileOperations.hh:211
Definition: XrdClFileOperations.hh:1011
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
Mode
Access mode.
Definition: XrdClFileSystem.hh:121
std::string ToString()
Definition: XrdClFileOperations.hh:1016
#define open
Definition: XrdPosix.hh:71
Definition: XrdClFileOperations.hh:956
VisaImpl< false > Visa
Definition: XrdClFileOperations.hh:755
Definition: XrdClFileOperations.hh:531
Definition: XrdClFileOperations.hh:381
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:345
Definition: XrdClFileOperations.hh:838
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:597
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:666
Definition: XrdClFileOperations.hh:531
XRootDStatus RunImpl(PipelineHandler *handler, uint16_t pipelineTimeout)
Definition: XrdClFileOperations.hh:301
Definition: XrdClFileOperations.hh:689
Definition: XrdClFileOperations.hh:625
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
bool IsOK() const
We're fine.
Definition: XrdClStatus.hh:122
Ctx< File > file
The file object itself.
Definition: XrdClFileOperations.hh:88
Write operation (.
Definition: XrdClFileOperations.hh:367
std::string ToString()
Definition: XrdClFileOperations.hh:961
Definition: XrdClFileOperations.hh:775
ExResp(const Ctx< File > &file)
Definition: XrdClFileOperations.hh:112
std::unique_ptr< PipelineHandler > handler
Operation handler.
Definition: XrdClOperations.hh:304
OpenImpl(Ctx< File > f, Arg< std::string > url, Arg< OpenFlags::Flags > flags, Arg< Access::Mode > mode=Access::None)
Constructor (.
Definition: XrdClFileOperations.hh:144
Binary blob representation.
Definition: XrdClBuffer.hh:33
DelXAttr operation (.
Definition: XrdClFileOperations.hh:998
Definition: XrdClOperations.hh:541