00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __XRD_CL_FILE_SYSTEM_HH__
00026 #define __XRD_CL_FILE_SYSTEM_HH__
00027
00028 #include "XrdCl/XrdClURL.hh"
00029 #include "XrdCl/XrdClStatus.hh"
00030 #include "XrdOuc/XrdOucEnum.hh"
00031 #include "XrdOuc/XrdOucCompiler.hh"
00032 #include "XrdCl/XrdClXRootDResponses.hh"
00033 #include "XrdSys/XrdSysPthread.hh"
00034 #include "XProtocol/XProtocol.hh"
00035 #include <string>
00036 #include <vector>
00037
00038 namespace XrdCl
00039 {
00040 class PostMaster;
00041 class FileSystemPlugIn;
00042 struct MessageSendParams;
00043
00044
00046
00047 struct QueryCode
00048 {
00049
00051
00052 enum Code
00053 {
00054 Config = kXR_Qconfig,
00055 ChecksumCancel = kXR_Qckscan,
00056 Checksum = kXR_Qcksum,
00057 Opaque = kXR_Qopaque,
00058 OpaqueFile = kXR_Qopaquf,
00059 Prepare = kXR_QPrep,
00060 Space = kXR_Qspace,
00061 Stats = kXR_QStats,
00062 Visa = kXR_Qvisa,
00063 XAttr = kXR_Qxattr
00064 };
00065 };
00066
00067
00069
00070 struct OpenFlags
00071 {
00072
00074
00075 enum Flags
00076 {
00077 None = 0,
00078 Compress = kXR_compress,
00079
00080 Delete = kXR_delete,
00081
00082 Force = kXR_force,
00083
00084 MakePath = kXR_mkpath,
00085
00086 New = kXR_new,
00087
00088 NoWait = kXR_nowait,
00089
00090
00091
00092
00093
00094
00095 Read = kXR_open_read,
00096 Update = kXR_open_updt,
00097 Write = kXR_open_wrto,
00098 POSC = kXR_posc,
00099
00100 Refresh = kXR_refresh,
00101
00102 Replica = kXR_replica,
00103
00104 SeqIO = kXR_seqio,
00105 PrefName = kXR_prefname,
00106
00107 IntentDirList = kXR_4dirlist
00108
00109 };
00110 };
00111 XRDOUC_ENUM_OPERATORS( OpenFlags::Flags )
00112
00113
00115
00116 struct Access
00117 {
00118
00120
00121 enum Mode
00122 {
00123 None = 0,
00124 UR = kXR_ur,
00125 UW = kXR_uw,
00126 UX = kXR_ux,
00127 GR = kXR_gr,
00128 GW = kXR_gw,
00129 GX = kXR_gx,
00130 OR = kXR_or,
00131 OW = kXR_ow,
00132 OX = kXR_ox
00133 };
00134 };
00135 XRDOUC_ENUM_OPERATORS( Access::Mode )
00136
00137
00139
00140 struct MkDirFlags
00141 {
00142 enum Flags
00143 {
00144 None = 0,
00145 MakePath = 1
00146 };
00147 };
00148 XRDOUC_ENUM_OPERATORS( MkDirFlags::Flags )
00149
00150
00152
00153 struct DirListFlags
00154 {
00155 enum Flags
00156 {
00157 None = 0,
00158 Stat = 1,
00159 Locate = 2,
00160
00161 Recursive = 4,
00162 Merge = 8,
00163 Chunked = 16,
00164 Zip = 32
00165 };
00166 };
00167 XRDOUC_ENUM_OPERATORS( DirListFlags::Flags )
00168
00169
00171
00172 struct PrepareFlags
00173 {
00174 enum Flags
00175 {
00176 None = 0,
00177 Colocate = kXR_coloc,
00178 Fresh = kXR_fresh,
00179
00180 Stage = kXR_stage,
00181
00182 WriteMode = kXR_wmode,
00183
00184 Cancel = kXR_cancel,
00185 Evict = kXR_evict << 8
00186
00187
00188
00189 };
00190 };
00191 XRDOUC_ENUM_OPERATORS( PrepareFlags::Flags )
00192
00193
00195
00196 struct FileSystemImpl;
00197
00198
00200
00201 class FileSystem
00202 {
00203 friend class AssignLBHandler;
00204 friend class ForkHandler;
00205
00206 public:
00207 typedef std::vector<LocationInfo> LocationList;
00208
00209
00214
00215 FileSystem( const URL &url, bool enablePlugIns = true );
00216
00217
00219
00220 ~FileSystem();
00221
00222
00233
00234 XRootDStatus Locate( const std::string &path,
00235 OpenFlags::Flags flags,
00236 ResponseHandler *handler,
00237 uint16_t timeout = 0 )
00238 XRD_WARN_UNUSED_RESULT;
00239
00240
00249
00250 XRootDStatus Locate( const std::string &path,
00251 OpenFlags::Flags flags,
00252 LocationInfo *&response,
00253 uint16_t timeout = 0 )
00254 XRD_WARN_UNUSED_RESULT;
00255
00256
00267
00268 XRootDStatus DeepLocate( const std::string &path,
00269 OpenFlags::Flags flags,
00270 ResponseHandler *handler,
00271 uint16_t timeout = 0 )
00272 XRD_WARN_UNUSED_RESULT;
00273
00274
00283
00284 XRootDStatus DeepLocate( const std::string &path,
00285 OpenFlags::Flags flags,
00286 LocationInfo *&response,
00287 uint16_t timeout = 0 )
00288 XRD_WARN_UNUSED_RESULT;
00289
00290
00299
00300 XRootDStatus Mv( const std::string &source,
00301 const std::string &dest,
00302 ResponseHandler *handler,
00303 uint16_t timeout = 0 )
00304 XRD_WARN_UNUSED_RESULT;
00305
00306
00314
00315 XRootDStatus Mv( const std::string &source,
00316 const std::string &dest,
00317 uint16_t timeout = 0 )
00318 XRD_WARN_UNUSED_RESULT;
00319
00320
00331
00332 XRootDStatus Query( QueryCode::Code queryCode,
00333 const Buffer &arg,
00334 ResponseHandler *handler,
00335 uint16_t timeout = 0 )
00336 XRD_WARN_UNUSED_RESULT;
00337
00338
00347
00348 XRootDStatus Query( QueryCode::Code queryCode,
00349 const Buffer &arg,
00350 Buffer *&response,
00351 uint16_t timeout = 0 )
00352 XRD_WARN_UNUSED_RESULT;
00353
00354
00363
00364 XRootDStatus Truncate( const std::string &path,
00365 uint64_t size,
00366 ResponseHandler *handler,
00367 uint16_t timeout = 0 )
00368 XRD_WARN_UNUSED_RESULT;
00369
00370
00378
00379 XRootDStatus Truncate( const std::string &path,
00380 uint64_t size,
00381 uint16_t timeout = 0 )
00382 XRD_WARN_UNUSED_RESULT;
00383
00384
00392
00393 XRootDStatus Rm( const std::string &path,
00394 ResponseHandler *handler,
00395 uint16_t timeout = 0 )
00396 XRD_WARN_UNUSED_RESULT;
00397
00398
00405
00406 XRootDStatus Rm( const std::string &path,
00407 uint16_t timeout = 0 )
00408 XRD_WARN_UNUSED_RESULT;
00409
00410
00420
00421 XRootDStatus MkDir( const std::string &path,
00422 MkDirFlags::Flags flags,
00423 Access::Mode mode,
00424 ResponseHandler *handler,
00425 uint16_t timeout = 0 )
00426 XRD_WARN_UNUSED_RESULT;
00427
00428
00437
00438 XRootDStatus MkDir( const std::string &path,
00439 MkDirFlags::Flags flags,
00440 Access::Mode mode,
00441 uint16_t timeout = 0 )
00442 XRD_WARN_UNUSED_RESULT;
00443
00444
00452
00453 XRootDStatus RmDir( const std::string &path,
00454 ResponseHandler *handler,
00455 uint16_t timeout = 0 )
00456 XRD_WARN_UNUSED_RESULT;
00457
00458
00465
00466 XRootDStatus RmDir( const std::string &path,
00467 uint16_t timeout = 0 )
00468 XRD_WARN_UNUSED_RESULT;
00469
00470
00479
00480 XRootDStatus ChMod( const std::string &path,
00481 Access::Mode mode,
00482 ResponseHandler *handler,
00483 uint16_t timeout = 0 )
00484 XRD_WARN_UNUSED_RESULT;
00485
00486
00494
00495 XRootDStatus ChMod( const std::string &path,
00496 Access::Mode mode,
00497 uint16_t timeout = 0 )
00498 XRD_WARN_UNUSED_RESULT;
00499
00500
00507
00508 XRootDStatus Ping( ResponseHandler *handler,
00509 uint16_t timeout = 0 )
00510 XRD_WARN_UNUSED_RESULT;
00511
00512
00518
00519 XRootDStatus Ping( uint16_t timeout = 0 ) XRD_WARN_UNUSED_RESULT;
00520
00521
00531
00532 XRootDStatus Stat( const std::string &path,
00533 ResponseHandler *handler,
00534 uint16_t timeout = 0 )
00535 XRD_WARN_UNUSED_RESULT;
00536
00537
00546
00547 XRootDStatus Stat( const std::string &path,
00548 StatInfo *&response,
00549 uint16_t timeout = 0 )
00550 XRD_WARN_UNUSED_RESULT;
00551
00552
00562
00563 XRootDStatus StatVFS( const std::string &path,
00564 ResponseHandler *handler,
00565 uint16_t timeout = 0 )
00566 XRD_WARN_UNUSED_RESULT;
00567
00568
00576
00577 XRootDStatus StatVFS( const std::string &path,
00578 StatInfoVFS *&response,
00579 uint16_t timeout = 0 )
00580 XRD_WARN_UNUSED_RESULT;
00581
00582
00591
00592 XRootDStatus Protocol( ResponseHandler *handler,
00593 uint16_t timeout = 0 )
00594 XRD_WARN_UNUSED_RESULT;
00595
00596
00603
00604 XRootDStatus Protocol( ProtocolInfo *&response,
00605 uint16_t timeout = 0 )
00606 XRD_WARN_UNUSED_RESULT;
00607
00608
00619
00620 XRootDStatus DirList( const std::string &path,
00621 DirListFlags::Flags flags,
00622 ResponseHandler *handler,
00623 uint16_t timeout = 0 )
00624 XRD_WARN_UNUSED_RESULT;
00625
00626
00635
00636 XRootDStatus DirList( const std::string &path,
00637 DirListFlags::Flags flags,
00638 DirectoryList *&response,
00639 uint16_t timeout = 0 )
00640 XRD_WARN_UNUSED_RESULT;
00641
00642
00652
00653 XRootDStatus SendInfo( const std::string &info,
00654 ResponseHandler *handler,
00655 uint16_t timeout = 0 )
00656 XRD_WARN_UNUSED_RESULT;
00657
00658
00666
00667 XRootDStatus SendInfo( const std::string &info,
00668 Buffer *&response,
00669 uint16_t timeout = 0 )
00670 XRD_WARN_UNUSED_RESULT;
00671
00672
00684
00685 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00686 PrepareFlags::Flags flags,
00687 uint8_t priority,
00688 ResponseHandler *handler,
00689 uint16_t timeout = 0 )
00690 XRD_WARN_UNUSED_RESULT;
00691
00692
00702
00703 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00704 PrepareFlags::Flags flags,
00705 uint8_t priority,
00706 Buffer *&response,
00707 uint16_t timeout = 0 )
00708 XRD_WARN_UNUSED_RESULT;
00709
00710
00721
00722 XRootDStatus SetXAttr( const std::string &path,
00723 const std::vector<xattr_t> &attrs,
00724 ResponseHandler *handler,
00725 uint16_t timeout = 0 );
00726
00727
00736
00737 XRootDStatus SetXAttr( const std::string &path,
00738 const std::vector<xattr_t> &attrs,
00739 std::vector<XAttrStatus> &result,
00740 uint16_t timeout = 0 );
00741
00742
00753
00754 XRootDStatus GetXAttr( const std::string &path,
00755 const std::vector<std::string> &attrs,
00756 ResponseHandler *handler,
00757 uint16_t timeout = 0 );
00758
00759
00768
00769 XRootDStatus GetXAttr( const std::string &path,
00770 const std::vector<std::string> &attrs,
00771 std::vector<XAttr> &result,
00772 uint16_t timeout = 0 );
00773
00774
00785
00786 XRootDStatus DelXAttr( const std::string &path,
00787 const std::vector<std::string> &attrs,
00788 ResponseHandler *handler,
00789 uint16_t timeout = 0 );
00790
00791
00800
00801 XRootDStatus DelXAttr( const std::string &path,
00802 const std::vector<std::string> &attrs,
00803 std::vector<XAttrStatus> &result,
00804 uint16_t timeout = 0 );
00805
00806
00816
00817 XRootDStatus ListXAttr( const std::string &path,
00818 ResponseHandler *handler,
00819 uint16_t timeout = 0 );
00820
00821
00829
00830 XRootDStatus ListXAttr( const std::string &path,
00831 std::vector<XAttr> &result,
00832 uint16_t timeout = 0 );
00833
00834
00839
00840 bool SetProperty( const std::string &name, const std::string &value );
00841
00842
00846
00847 bool GetProperty( const std::string &name, std::string &value ) const;
00848
00849 private:
00850 FileSystem(const FileSystem &other);
00851 FileSystem &operator = (const FileSystem &other);
00852
00853
00854
00855
00856 void Lock();
00857
00858
00859
00860
00861 void UnLock();
00862
00863
00871
00872 template<typename T>
00873 Status XAttrOperationImpl( kXR_char subcode,
00874 kXR_char options,
00875 const std::string &path,
00876 const std::vector<T> &attrs,
00877 ResponseHandler *handler,
00878 uint16_t timeout = 0 );
00879
00880 FileSystemImpl *pImpl;
00881 FileSystemPlugIn *pPlugIn;
00882 };
00883 }
00884
00885 #endif // __XRD_CL_FILE_SYSTEM_HH__