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 Merge = 8
00162 };
00163 };
00164 XRDOUC_ENUM_OPERATORS( DirListFlags::Flags )
00165
00166
00168
00169 struct PrepareFlags
00170 {
00171 enum Flags
00172 {
00173 None = 0,
00174 Colocate = kXR_coloc,
00175 Fresh = kXR_fresh,
00176
00177 Stage = kXR_stage,
00178
00179 WriteMode = kXR_wmode
00180
00181 };
00182 };
00183 XRDOUC_ENUM_OPERATORS( PrepareFlags::Flags )
00184
00185
00187
00188 class FileSystem
00189 {
00190 friend class AssignLBHandler;
00191 friend class ForkHandler;
00192
00193 public:
00194 typedef std::vector<LocationInfo> LocationList;
00195
00196
00201
00202 FileSystem( const URL &url, bool enablePlugIns = true );
00203
00204
00206
00207 ~FileSystem();
00208
00209
00220
00221 XRootDStatus Locate( const std::string &path,
00222 OpenFlags::Flags flags,
00223 ResponseHandler *handler,
00224 uint16_t timeout = 0 )
00225 XRD_WARN_UNUSED_RESULT;
00226
00227
00236
00237 XRootDStatus Locate( const std::string &path,
00238 OpenFlags::Flags flags,
00239 LocationInfo *&response,
00240 uint16_t timeout = 0 )
00241 XRD_WARN_UNUSED_RESULT;
00242
00243
00254
00255 XRootDStatus DeepLocate( const std::string &path,
00256 OpenFlags::Flags flags,
00257 ResponseHandler *handler,
00258 uint16_t timeout = 0 )
00259 XRD_WARN_UNUSED_RESULT;
00260
00261
00270
00271 XRootDStatus DeepLocate( const std::string &path,
00272 OpenFlags::Flags flags,
00273 LocationInfo *&response,
00274 uint16_t timeout = 0 )
00275 XRD_WARN_UNUSED_RESULT;
00276
00277
00286
00287 XRootDStatus Mv( const std::string &source,
00288 const std::string &dest,
00289 ResponseHandler *handler,
00290 uint16_t timeout = 0 )
00291 XRD_WARN_UNUSED_RESULT;
00292
00293
00301
00302 XRootDStatus Mv( const std::string &source,
00303 const std::string &dest,
00304 uint16_t timeout = 0 )
00305 XRD_WARN_UNUSED_RESULT;
00306
00307
00318
00319 XRootDStatus Query( QueryCode::Code queryCode,
00320 const Buffer &arg,
00321 ResponseHandler *handler,
00322 uint16_t timeout = 0 )
00323 XRD_WARN_UNUSED_RESULT;
00324
00325
00334
00335 XRootDStatus Query( QueryCode::Code queryCode,
00336 const Buffer &arg,
00337 Buffer *&response,
00338 uint16_t timeout = 0 )
00339 XRD_WARN_UNUSED_RESULT;
00340
00341
00350
00351 XRootDStatus Truncate( const std::string &path,
00352 uint64_t size,
00353 ResponseHandler *handler,
00354 uint16_t timeout = 0 )
00355 XRD_WARN_UNUSED_RESULT;
00356
00357
00365
00366 XRootDStatus Truncate( const std::string &path,
00367 uint64_t size,
00368 uint16_t timeout = 0 )
00369 XRD_WARN_UNUSED_RESULT;
00370
00371
00379
00380 XRootDStatus Rm( const std::string &path,
00381 ResponseHandler *handler,
00382 uint16_t timeout = 0 )
00383 XRD_WARN_UNUSED_RESULT;
00384
00385
00392
00393 XRootDStatus Rm( const std::string &path,
00394 uint16_t timeout = 0 )
00395 XRD_WARN_UNUSED_RESULT;
00396
00397
00407
00408 XRootDStatus MkDir( const std::string &path,
00409 MkDirFlags::Flags flags,
00410 Access::Mode mode,
00411 ResponseHandler *handler,
00412 uint16_t timeout = 0 )
00413 XRD_WARN_UNUSED_RESULT;
00414
00415
00424
00425 XRootDStatus MkDir( const std::string &path,
00426 MkDirFlags::Flags flags,
00427 Access::Mode mode,
00428 uint16_t timeout = 0 )
00429 XRD_WARN_UNUSED_RESULT;
00430
00431
00439
00440 XRootDStatus RmDir( const std::string &path,
00441 ResponseHandler *handler,
00442 uint16_t timeout = 0 )
00443 XRD_WARN_UNUSED_RESULT;
00444
00445
00452
00453 XRootDStatus RmDir( const std::string &path,
00454 uint16_t timeout = 0 )
00455 XRD_WARN_UNUSED_RESULT;
00456
00457
00466
00467 XRootDStatus ChMod( const std::string &path,
00468 Access::Mode mode,
00469 ResponseHandler *handler,
00470 uint16_t timeout = 0 )
00471 XRD_WARN_UNUSED_RESULT;
00472
00473
00481
00482 XRootDStatus ChMod( const std::string &path,
00483 Access::Mode mode,
00484 uint16_t timeout = 0 )
00485 XRD_WARN_UNUSED_RESULT;
00486
00487
00494
00495 XRootDStatus Ping( ResponseHandler *handler,
00496 uint16_t timeout = 0 )
00497 XRD_WARN_UNUSED_RESULT;
00498
00499
00505
00506 XRootDStatus Ping( uint16_t timeout = 0 ) XRD_WARN_UNUSED_RESULT;
00507
00508
00518
00519 XRootDStatus Stat( const std::string &path,
00520 ResponseHandler *handler,
00521 uint16_t timeout = 0 )
00522 XRD_WARN_UNUSED_RESULT;
00523
00524
00533
00534 XRootDStatus Stat( const std::string &path,
00535 StatInfo *&response,
00536 uint16_t timeout = 0 )
00537 XRD_WARN_UNUSED_RESULT;
00538
00539
00549
00550 XRootDStatus StatVFS( const std::string &path,
00551 ResponseHandler *handler,
00552 uint16_t timeout = 0 )
00553 XRD_WARN_UNUSED_RESULT;
00554
00555
00563
00564 XRootDStatus StatVFS( const std::string &path,
00565 StatInfoVFS *&response,
00566 uint16_t timeout = 0 )
00567 XRD_WARN_UNUSED_RESULT;
00568
00569
00578
00579 XRootDStatus Protocol( ResponseHandler *handler,
00580 uint16_t timeout = 0 )
00581 XRD_WARN_UNUSED_RESULT;
00582
00583
00590
00591 XRootDStatus Protocol( ProtocolInfo *&response,
00592 uint16_t timeout = 0 )
00593 XRD_WARN_UNUSED_RESULT;
00594
00595
00606
00607 XRootDStatus DirList( const std::string &path,
00608 DirListFlags::Flags flags,
00609 ResponseHandler *handler,
00610 uint16_t timeout = 0 )
00611 XRD_WARN_UNUSED_RESULT;
00612
00613
00622
00623 XRootDStatus DirList( const std::string &path,
00624 DirListFlags::Flags flags,
00625 DirectoryList *&response,
00626 uint16_t timeout = 0 )
00627 XRD_WARN_UNUSED_RESULT;
00628
00629
00639
00640 XRootDStatus SendInfo( const std::string &info,
00641 ResponseHandler *handler,
00642 uint16_t timeout = 0 )
00643 XRD_WARN_UNUSED_RESULT;
00644
00645
00653
00654 XRootDStatus SendInfo( const std::string &info,
00655 Buffer *&response,
00656 uint16_t timeout = 0 )
00657 XRD_WARN_UNUSED_RESULT;
00658
00659
00671
00672 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00673 PrepareFlags::Flags flags,
00674 uint8_t priority,
00675 ResponseHandler *handler,
00676 uint16_t timeout = 0 )
00677 XRD_WARN_UNUSED_RESULT;
00678
00679
00689
00690 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00691 PrepareFlags::Flags flags,
00692 uint8_t priority,
00693 Buffer *&response,
00694 uint16_t timeout = 0 )
00695 XRD_WARN_UNUSED_RESULT;
00696
00697
00702
00703 bool SetProperty( const std::string &name, const std::string &value );
00704
00705
00709
00710 bool GetProperty( const std::string &name, std::string &value ) const;
00711
00712 private:
00713 FileSystem(const FileSystem &other);
00714 FileSystem &operator = (const FileSystem &other);
00715
00716
00717
00718
00719 Status Send( Message *msg,
00720 ResponseHandler *handler,
00721 MessageSendParams ¶ms );
00722
00723
00724
00725
00726 void AssignLoadBalancer( const URL &url );
00727
00728
00729
00730
00731 void Lock()
00732 {
00733 pMutex.Lock();
00734 }
00735
00736
00737
00738
00739 void UnLock()
00740 {
00741 pMutex.UnLock();
00742 }
00743
00744 XrdSysMutex pMutex;
00745 bool pLoadBalancerLookupDone;
00746 bool pFollowRedirects;
00747 URL *pUrl;
00748 FileSystemPlugIn *pPlugIn;
00749 };
00750 }
00751
00752 #endif // __XRD_CL_FILE_SYSTEM_HH__