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 Message;
00042 class FileSystemPlugIn;
00043 struct MessageSendParams;
00044
00045
00047
00048 struct QueryCode
00049 {
00050
00052
00053 enum Code
00054 {
00055 Config = kXR_Qconfig,
00056 ChecksumCancel = kXR_Qckscan,
00057 Checksum = kXR_Qcksum,
00058 Opaque = kXR_Qopaque,
00059 OpaqueFile = kXR_Qopaquf,
00060 Prepare = kXR_QPrep,
00061 Space = kXR_Qspace,
00062 Stats = kXR_QStats,
00063 Visa = kXR_Qvisa,
00064 XAttr = kXR_Qxattr
00065 };
00066 };
00067
00068
00070
00071 struct OpenFlags
00072 {
00073
00075
00076 enum Flags
00077 {
00078 None = 0,
00079 Compress = kXR_compress,
00080
00081 Delete = kXR_delete,
00082
00083 Force = kXR_force,
00084
00085 MakePath = kXR_mkpath,
00086
00087 New = kXR_new,
00088
00089 NoWait = kXR_nowait,
00090
00091
00092
00093
00094
00095 Append = kXR_open_apnd,
00096 Read = kXR_open_read,
00097 Update = kXR_open_updt,
00098 Write = kXR_open_wrto,
00099 POSC = kXR_posc,
00100
00101 Refresh = kXR_refresh,
00102
00103 Replica = kXR_replica,
00104
00105 SeqIO = kXR_seqio,
00106 PrefName = kXR_prefname,
00107
00108 IntentDirList = kXR_4dirlist
00109
00110 };
00111 };
00112 XRDOUC_ENUM_OPERATORS( OpenFlags::Flags )
00113
00114
00116
00117 struct Access
00118 {
00119
00121
00122 enum Mode
00123 {
00124 None = 0,
00125 UR = kXR_ur,
00126 UW = kXR_uw,
00127 UX = kXR_ux,
00128 GR = kXR_gr,
00129 GW = kXR_gw,
00130 GX = kXR_gx,
00131 OR = kXR_or,
00132 OW = kXR_ow,
00133 OX = kXR_ox
00134 };
00135 };
00136 XRDOUC_ENUM_OPERATORS( Access::Mode )
00137
00138
00140
00141 struct MkDirFlags
00142 {
00143 enum Flags
00144 {
00145 None = 0,
00146 MakePath = 1
00147 };
00148 };
00149 XRDOUC_ENUM_OPERATORS( MkDirFlags::Flags )
00150
00151
00153
00154 struct DirListFlags
00155 {
00156 enum Flags
00157 {
00158 None = 0,
00159 Stat = 1,
00160 Locate = 2,
00161
00162 Recursive = 4,
00163 Merge = 8,
00164 Chunked = 16,
00165 Zip = 32
00166 };
00167 };
00168 XRDOUC_ENUM_OPERATORS( DirListFlags::Flags )
00169
00170
00172
00173 struct PrepareFlags
00174 {
00175 enum Flags
00176 {
00177 None = 0,
00178 Colocate = kXR_coloc,
00179 Fresh = kXR_fresh,
00180
00181 Stage = kXR_stage,
00182
00183 WriteMode = kXR_wmode,
00184
00185 Cancel = kXR_cancel,
00186 Evict = kXR_evict << 8
00187
00188
00189
00190 };
00191 };
00192 XRDOUC_ENUM_OPERATORS( PrepareFlags::Flags )
00193
00194
00196
00197 class FileSystem
00198 {
00199 friend class AssignLBHandler;
00200 friend class ForkHandler;
00201
00202 public:
00203 typedef std::vector<LocationInfo> LocationList;
00204
00205
00210
00211 FileSystem( const URL &url, bool enablePlugIns = true );
00212
00213
00215
00216 ~FileSystem();
00217
00218
00229
00230 XRootDStatus Locate( const std::string &path,
00231 OpenFlags::Flags flags,
00232 ResponseHandler *handler,
00233 uint16_t timeout = 0 )
00234 XRD_WARN_UNUSED_RESULT;
00235
00236
00245
00246 XRootDStatus Locate( const std::string &path,
00247 OpenFlags::Flags flags,
00248 LocationInfo *&response,
00249 uint16_t timeout = 0 )
00250 XRD_WARN_UNUSED_RESULT;
00251
00252
00263
00264 XRootDStatus DeepLocate( const std::string &path,
00265 OpenFlags::Flags flags,
00266 ResponseHandler *handler,
00267 uint16_t timeout = 0 )
00268 XRD_WARN_UNUSED_RESULT;
00269
00270
00279
00280 XRootDStatus DeepLocate( const std::string &path,
00281 OpenFlags::Flags flags,
00282 LocationInfo *&response,
00283 uint16_t timeout = 0 )
00284 XRD_WARN_UNUSED_RESULT;
00285
00286
00295
00296 XRootDStatus Mv( const std::string &source,
00297 const std::string &dest,
00298 ResponseHandler *handler,
00299 uint16_t timeout = 0 )
00300 XRD_WARN_UNUSED_RESULT;
00301
00302
00310
00311 XRootDStatus Mv( const std::string &source,
00312 const std::string &dest,
00313 uint16_t timeout = 0 )
00314 XRD_WARN_UNUSED_RESULT;
00315
00316
00327
00328 XRootDStatus Query( QueryCode::Code queryCode,
00329 const Buffer &arg,
00330 ResponseHandler *handler,
00331 uint16_t timeout = 0 )
00332 XRD_WARN_UNUSED_RESULT;
00333
00334
00343
00344 XRootDStatus Query( QueryCode::Code queryCode,
00345 const Buffer &arg,
00346 Buffer *&response,
00347 uint16_t timeout = 0 )
00348 XRD_WARN_UNUSED_RESULT;
00349
00350
00359
00360 XRootDStatus Truncate( const std::string &path,
00361 uint64_t size,
00362 ResponseHandler *handler,
00363 uint16_t timeout = 0 )
00364 XRD_WARN_UNUSED_RESULT;
00365
00366
00374
00375 XRootDStatus Truncate( const std::string &path,
00376 uint64_t size,
00377 uint16_t timeout = 0 )
00378 XRD_WARN_UNUSED_RESULT;
00379
00380
00388
00389 XRootDStatus Rm( const std::string &path,
00390 ResponseHandler *handler,
00391 uint16_t timeout = 0 )
00392 XRD_WARN_UNUSED_RESULT;
00393
00394
00401
00402 XRootDStatus Rm( const std::string &path,
00403 uint16_t timeout = 0 )
00404 XRD_WARN_UNUSED_RESULT;
00405
00406
00416
00417 XRootDStatus MkDir( const std::string &path,
00418 MkDirFlags::Flags flags,
00419 Access::Mode mode,
00420 ResponseHandler *handler,
00421 uint16_t timeout = 0 )
00422 XRD_WARN_UNUSED_RESULT;
00423
00424
00433
00434 XRootDStatus MkDir( const std::string &path,
00435 MkDirFlags::Flags flags,
00436 Access::Mode mode,
00437 uint16_t timeout = 0 )
00438 XRD_WARN_UNUSED_RESULT;
00439
00440
00448
00449 XRootDStatus RmDir( const std::string &path,
00450 ResponseHandler *handler,
00451 uint16_t timeout = 0 )
00452 XRD_WARN_UNUSED_RESULT;
00453
00454
00461
00462 XRootDStatus RmDir( const std::string &path,
00463 uint16_t timeout = 0 )
00464 XRD_WARN_UNUSED_RESULT;
00465
00466
00475
00476 XRootDStatus ChMod( const std::string &path,
00477 Access::Mode mode,
00478 ResponseHandler *handler,
00479 uint16_t timeout = 0 )
00480 XRD_WARN_UNUSED_RESULT;
00481
00482
00490
00491 XRootDStatus ChMod( const std::string &path,
00492 Access::Mode mode,
00493 uint16_t timeout = 0 )
00494 XRD_WARN_UNUSED_RESULT;
00495
00496
00503
00504 XRootDStatus Ping( ResponseHandler *handler,
00505 uint16_t timeout = 0 )
00506 XRD_WARN_UNUSED_RESULT;
00507
00508
00514
00515 XRootDStatus Ping( uint16_t timeout = 0 ) XRD_WARN_UNUSED_RESULT;
00516
00517
00527
00528 XRootDStatus Stat( const std::string &path,
00529 ResponseHandler *handler,
00530 uint16_t timeout = 0 )
00531 XRD_WARN_UNUSED_RESULT;
00532
00533
00542
00543 XRootDStatus Stat( const std::string &path,
00544 StatInfo *&response,
00545 uint16_t timeout = 0 )
00546 XRD_WARN_UNUSED_RESULT;
00547
00548
00558
00559 XRootDStatus StatVFS( const std::string &path,
00560 ResponseHandler *handler,
00561 uint16_t timeout = 0 )
00562 XRD_WARN_UNUSED_RESULT;
00563
00564
00572
00573 XRootDStatus StatVFS( const std::string &path,
00574 StatInfoVFS *&response,
00575 uint16_t timeout = 0 )
00576 XRD_WARN_UNUSED_RESULT;
00577
00578
00587
00588 XRootDStatus Protocol( ResponseHandler *handler,
00589 uint16_t timeout = 0 )
00590 XRD_WARN_UNUSED_RESULT;
00591
00592
00599
00600 XRootDStatus Protocol( ProtocolInfo *&response,
00601 uint16_t timeout = 0 )
00602 XRD_WARN_UNUSED_RESULT;
00603
00604
00615
00616 XRootDStatus DirList( const std::string &path,
00617 DirListFlags::Flags flags,
00618 ResponseHandler *handler,
00619 uint16_t timeout = 0 )
00620 XRD_WARN_UNUSED_RESULT;
00621
00622
00631
00632 XRootDStatus DirList( const std::string &path,
00633 DirListFlags::Flags flags,
00634 DirectoryList *&response,
00635 uint16_t timeout = 0 )
00636 XRD_WARN_UNUSED_RESULT;
00637
00638
00648
00649 XRootDStatus SendInfo( const std::string &info,
00650 ResponseHandler *handler,
00651 uint16_t timeout = 0 )
00652 XRD_WARN_UNUSED_RESULT;
00653
00654
00662
00663 XRootDStatus SendInfo( const std::string &info,
00664 Buffer *&response,
00665 uint16_t timeout = 0 )
00666 XRD_WARN_UNUSED_RESULT;
00667
00668
00680
00681 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00682 PrepareFlags::Flags flags,
00683 uint8_t priority,
00684 ResponseHandler *handler,
00685 uint16_t timeout = 0 )
00686 XRD_WARN_UNUSED_RESULT;
00687
00688
00698
00699 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00700 PrepareFlags::Flags flags,
00701 uint8_t priority,
00702 Buffer *&response,
00703 uint16_t timeout = 0 )
00704 XRD_WARN_UNUSED_RESULT;
00705
00706
00711
00712 bool SetProperty( const std::string &name, const std::string &value );
00713
00714
00718
00719 bool GetProperty( const std::string &name, std::string &value ) const;
00720
00721 private:
00722 FileSystem(const FileSystem &other);
00723 FileSystem &operator = (const FileSystem &other);
00724
00725
00726
00727
00728 Status Send( Message *msg,
00729 ResponseHandler *handler,
00730 MessageSendParams ¶ms );
00731
00732
00733
00734
00735 void AssignLoadBalancer( const URL &url );
00736
00737
00738
00739
00740 void Lock()
00741 {
00742 pMutex.Lock();
00743 }
00744
00745
00746
00747
00748 void UnLock()
00749 {
00750 pMutex.UnLock();
00751 }
00752
00753 XrdSysMutex pMutex;
00754 bool pLoadBalancerLookupDone;
00755 bool pFollowRedirects;
00756 URL *pUrl;
00757 FileSystemPlugIn *pPlugIn;
00758 };
00759 }
00760
00761 #endif // __XRD_CL_FILE_SYSTEM_HH__