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 };
00109 };
00110 XRDOUC_ENUM_OPERATORS( OpenFlags::Flags )
00111
00112
00114
00115 struct Access
00116 {
00117
00119
00120 enum Mode
00121 {
00122 None = 0,
00123 UR = kXR_ur,
00124 UW = kXR_uw,
00125 UX = kXR_ux,
00126 GR = kXR_gr,
00127 GW = kXR_gw,
00128 GX = kXR_gx,
00129 OR = kXR_or,
00130 OW = kXR_ow,
00131 OX = kXR_ox
00132 };
00133 };
00134 XRDOUC_ENUM_OPERATORS( Access::Mode )
00135
00136
00138
00139 struct MkDirFlags
00140 {
00141 enum Flags
00142 {
00143 None = 0,
00144 MakePath = 1
00145 };
00146 };
00147 XRDOUC_ENUM_OPERATORS( MkDirFlags::Flags )
00148
00149
00151
00152 struct DirListFlags
00153 {
00154 enum Flags
00155 {
00156 None = 0,
00157 Stat = 1,
00158 Locate = 2,
00159
00160 Recursive = 4
00161 };
00162 };
00163 XRDOUC_ENUM_OPERATORS( DirListFlags::Flags )
00164
00165
00167
00168 struct PrepareFlags
00169 {
00170 enum Flags
00171 {
00172 None = 0,
00173 Colocate = kXR_coloc,
00174 Fresh = kXR_fresh,
00175
00176 Stage = kXR_stage,
00177
00178 WriteMode = kXR_wmode
00179
00180 };
00181 };
00182 XRDOUC_ENUM_OPERATORS( PrepareFlags::Flags )
00183
00184
00186
00187 class FileSystem
00188 {
00189 friend class AssignLBHandler;
00190 friend class ForkHandler;
00191
00192 public:
00193 typedef std::vector<LocationInfo> LocationList;
00194
00195
00200
00201 FileSystem( const URL &url, bool enablePlugIns = true );
00202
00203
00205
00206 ~FileSystem();
00207
00208
00219
00220 XRootDStatus Locate( const std::string &path,
00221 OpenFlags::Flags flags,
00222 ResponseHandler *handler,
00223 uint16_t timeout = 0 )
00224 XRD_WARN_UNUSED_RESULT;
00225
00226
00235
00236 XRootDStatus Locate( const std::string &path,
00237 OpenFlags::Flags flags,
00238 LocationInfo *&response,
00239 uint16_t timeout = 0 )
00240 XRD_WARN_UNUSED_RESULT;
00241
00242
00253
00254 XRootDStatus DeepLocate( const std::string &path,
00255 OpenFlags::Flags flags,
00256 ResponseHandler *handler,
00257 uint16_t timeout = 0 )
00258 XRD_WARN_UNUSED_RESULT;
00259
00260
00269
00270 XRootDStatus DeepLocate( const std::string &path,
00271 OpenFlags::Flags flags,
00272 LocationInfo *&response,
00273 uint16_t timeout = 0 )
00274 XRD_WARN_UNUSED_RESULT;
00275
00276
00285
00286 XRootDStatus Mv( const std::string &source,
00287 const std::string &dest,
00288 ResponseHandler *handler,
00289 uint16_t timeout = 0 )
00290 XRD_WARN_UNUSED_RESULT;
00291
00292
00300
00301 XRootDStatus Mv( const std::string &source,
00302 const std::string &dest,
00303 uint16_t timeout = 0 )
00304 XRD_WARN_UNUSED_RESULT;
00305
00306
00317
00318 XRootDStatus Query( QueryCode::Code queryCode,
00319 const Buffer &arg,
00320 ResponseHandler *handler,
00321 uint16_t timeout = 0 )
00322 XRD_WARN_UNUSED_RESULT;
00323
00324
00333
00334 XRootDStatus Query( QueryCode::Code queryCode,
00335 const Buffer &arg,
00336 Buffer *&response,
00337 uint16_t timeout = 0 )
00338 XRD_WARN_UNUSED_RESULT;
00339
00340
00349
00350 XRootDStatus Truncate( const std::string &path,
00351 uint64_t size,
00352 ResponseHandler *handler,
00353 uint16_t timeout = 0 )
00354 XRD_WARN_UNUSED_RESULT;
00355
00356
00364
00365 XRootDStatus Truncate( const std::string &path,
00366 uint64_t size,
00367 uint16_t timeout = 0 )
00368 XRD_WARN_UNUSED_RESULT;
00369
00370
00378
00379 XRootDStatus Rm( const std::string &path,
00380 ResponseHandler *handler,
00381 uint16_t timeout = 0 )
00382 XRD_WARN_UNUSED_RESULT;
00383
00384
00391
00392 XRootDStatus Rm( const std::string &path,
00393 uint16_t timeout = 0 )
00394 XRD_WARN_UNUSED_RESULT;
00395
00396
00406
00407 XRootDStatus MkDir( const std::string &path,
00408 MkDirFlags::Flags flags,
00409 Access::Mode mode,
00410 ResponseHandler *handler,
00411 uint16_t timeout = 0 )
00412 XRD_WARN_UNUSED_RESULT;
00413
00414
00423
00424 XRootDStatus MkDir( const std::string &path,
00425 MkDirFlags::Flags flags,
00426 Access::Mode mode,
00427 uint16_t timeout = 0 )
00428 XRD_WARN_UNUSED_RESULT;
00429
00430
00438
00439 XRootDStatus RmDir( const std::string &path,
00440 ResponseHandler *handler,
00441 uint16_t timeout = 0 )
00442 XRD_WARN_UNUSED_RESULT;
00443
00444
00451
00452 XRootDStatus RmDir( const std::string &path,
00453 uint16_t timeout = 0 )
00454 XRD_WARN_UNUSED_RESULT;
00455
00456
00465
00466 XRootDStatus ChMod( const std::string &path,
00467 Access::Mode mode,
00468 ResponseHandler *handler,
00469 uint16_t timeout = 0 )
00470 XRD_WARN_UNUSED_RESULT;
00471
00472
00480
00481 XRootDStatus ChMod( const std::string &path,
00482 Access::Mode mode,
00483 uint16_t timeout = 0 )
00484 XRD_WARN_UNUSED_RESULT;
00485
00486
00493
00494 XRootDStatus Ping( ResponseHandler *handler,
00495 uint16_t timeout = 0 )
00496 XRD_WARN_UNUSED_RESULT;
00497
00498
00504
00505 XRootDStatus Ping( uint16_t timeout = 0 ) XRD_WARN_UNUSED_RESULT;
00506
00507
00517
00518 XRootDStatus Stat( const std::string &path,
00519 ResponseHandler *handler,
00520 uint16_t timeout = 0 )
00521 XRD_WARN_UNUSED_RESULT;
00522
00523
00532
00533 XRootDStatus Stat( const std::string &path,
00534 StatInfo *&response,
00535 uint16_t timeout = 0 )
00536 XRD_WARN_UNUSED_RESULT;
00537
00538
00548
00549 XRootDStatus StatVFS( const std::string &path,
00550 ResponseHandler *handler,
00551 uint16_t timeout = 0 )
00552 XRD_WARN_UNUSED_RESULT;
00553
00554
00562
00563 XRootDStatus StatVFS( const std::string &path,
00564 StatInfoVFS *&response,
00565 uint16_t timeout = 0 )
00566 XRD_WARN_UNUSED_RESULT;
00567
00568
00577
00578 XRootDStatus Protocol( ResponseHandler *handler,
00579 uint16_t timeout = 0 )
00580 XRD_WARN_UNUSED_RESULT;
00581
00582
00589
00590 XRootDStatus Protocol( ProtocolInfo *&response,
00591 uint16_t timeout = 0 )
00592 XRD_WARN_UNUSED_RESULT;
00593
00594
00605
00606 XRootDStatus DirList( const std::string &path,
00607 DirListFlags::Flags flags,
00608 ResponseHandler *handler,
00609 uint16_t timeout = 0 )
00610 XRD_WARN_UNUSED_RESULT;
00611
00612
00621
00622 XRootDStatus DirList( const std::string &path,
00623 DirListFlags::Flags flags,
00624 DirectoryList *&response,
00625 uint16_t timeout = 0 )
00626 XRD_WARN_UNUSED_RESULT;
00627
00628
00638
00639 XRootDStatus SendInfo( const std::string &info,
00640 ResponseHandler *handler,
00641 uint16_t timeout = 0 )
00642 XRD_WARN_UNUSED_RESULT;
00643
00644
00652
00653 XRootDStatus SendInfo( const std::string &info,
00654 Buffer *&response,
00655 uint16_t timeout = 0 )
00656 XRD_WARN_UNUSED_RESULT;
00657
00658
00670
00671 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00672 PrepareFlags::Flags flags,
00673 uint8_t priority,
00674 ResponseHandler *handler,
00675 uint16_t timeout = 0 )
00676 XRD_WARN_UNUSED_RESULT;
00677
00678
00688
00689 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00690 PrepareFlags::Flags flags,
00691 uint8_t priority,
00692 Buffer *&response,
00693 uint16_t timeout = 0 )
00694 XRD_WARN_UNUSED_RESULT;
00695
00696
00701
00702 bool SetProperty( const std::string &name, const std::string &value );
00703
00704
00708
00709 bool GetProperty( const std::string &name, std::string &value ) const;
00710
00711 private:
00712 FileSystem(const FileSystem &other);
00713 FileSystem &operator = (const FileSystem &other);
00714
00715
00716
00717
00718 Status Send( Message *msg,
00719 ResponseHandler *handler,
00720 MessageSendParams ¶ms );
00721
00722
00723
00724
00725 void AssignLoadBalancer( const URL &url );
00726
00727
00728
00729
00730 void Lock()
00731 {
00732 pMutex.Lock();
00733 }
00734
00735
00736
00737
00738 void UnLock()
00739 {
00740 pMutex.UnLock();
00741 }
00742
00743 XrdSysMutex pMutex;
00744 bool pLoadBalancerLookupDone;
00745 bool pFollowRedirects;
00746 URL *pUrl;
00747 FileSystemPlugIn *pPlugIn;
00748 };
00749 }
00750
00751 #endif // __XRD_CL_FILE_SYSTEM_HH__