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 Cancel = kXR_cancel
00182 };
00183 };
00184 XRDOUC_ENUM_OPERATORS( PrepareFlags::Flags )
00185
00186
00188
00189 class FileSystem
00190 {
00191 friend class AssignLBHandler;
00192 friend class ForkHandler;
00193
00194 public:
00195 typedef std::vector<LocationInfo> LocationList;
00196
00197
00202
00203 FileSystem( const URL &url, bool enablePlugIns = true );
00204
00205
00207
00208 ~FileSystem();
00209
00210
00221
00222 XRootDStatus Locate( const std::string &path,
00223 OpenFlags::Flags flags,
00224 ResponseHandler *handler,
00225 uint16_t timeout = 0 )
00226 XRD_WARN_UNUSED_RESULT;
00227
00228
00237
00238 XRootDStatus Locate( const std::string &path,
00239 OpenFlags::Flags flags,
00240 LocationInfo *&response,
00241 uint16_t timeout = 0 )
00242 XRD_WARN_UNUSED_RESULT;
00243
00244
00255
00256 XRootDStatus DeepLocate( const std::string &path,
00257 OpenFlags::Flags flags,
00258 ResponseHandler *handler,
00259 uint16_t timeout = 0 )
00260 XRD_WARN_UNUSED_RESULT;
00261
00262
00271
00272 XRootDStatus DeepLocate( const std::string &path,
00273 OpenFlags::Flags flags,
00274 LocationInfo *&response,
00275 uint16_t timeout = 0 )
00276 XRD_WARN_UNUSED_RESULT;
00277
00278
00287
00288 XRootDStatus Mv( const std::string &source,
00289 const std::string &dest,
00290 ResponseHandler *handler,
00291 uint16_t timeout = 0 )
00292 XRD_WARN_UNUSED_RESULT;
00293
00294
00302
00303 XRootDStatus Mv( const std::string &source,
00304 const std::string &dest,
00305 uint16_t timeout = 0 )
00306 XRD_WARN_UNUSED_RESULT;
00307
00308
00319
00320 XRootDStatus Query( QueryCode::Code queryCode,
00321 const Buffer &arg,
00322 ResponseHandler *handler,
00323 uint16_t timeout = 0 )
00324 XRD_WARN_UNUSED_RESULT;
00325
00326
00335
00336 XRootDStatus Query( QueryCode::Code queryCode,
00337 const Buffer &arg,
00338 Buffer *&response,
00339 uint16_t timeout = 0 )
00340 XRD_WARN_UNUSED_RESULT;
00341
00342
00351
00352 XRootDStatus Truncate( const std::string &path,
00353 uint64_t size,
00354 ResponseHandler *handler,
00355 uint16_t timeout = 0 )
00356 XRD_WARN_UNUSED_RESULT;
00357
00358
00366
00367 XRootDStatus Truncate( const std::string &path,
00368 uint64_t size,
00369 uint16_t timeout = 0 )
00370 XRD_WARN_UNUSED_RESULT;
00371
00372
00380
00381 XRootDStatus Rm( const std::string &path,
00382 ResponseHandler *handler,
00383 uint16_t timeout = 0 )
00384 XRD_WARN_UNUSED_RESULT;
00385
00386
00393
00394 XRootDStatus Rm( const std::string &path,
00395 uint16_t timeout = 0 )
00396 XRD_WARN_UNUSED_RESULT;
00397
00398
00408
00409 XRootDStatus MkDir( const std::string &path,
00410 MkDirFlags::Flags flags,
00411 Access::Mode mode,
00412 ResponseHandler *handler,
00413 uint16_t timeout = 0 )
00414 XRD_WARN_UNUSED_RESULT;
00415
00416
00425
00426 XRootDStatus MkDir( const std::string &path,
00427 MkDirFlags::Flags flags,
00428 Access::Mode mode,
00429 uint16_t timeout = 0 )
00430 XRD_WARN_UNUSED_RESULT;
00431
00432
00440
00441 XRootDStatus RmDir( const std::string &path,
00442 ResponseHandler *handler,
00443 uint16_t timeout = 0 )
00444 XRD_WARN_UNUSED_RESULT;
00445
00446
00453
00454 XRootDStatus RmDir( const std::string &path,
00455 uint16_t timeout = 0 )
00456 XRD_WARN_UNUSED_RESULT;
00457
00458
00467
00468 XRootDStatus ChMod( const std::string &path,
00469 Access::Mode mode,
00470 ResponseHandler *handler,
00471 uint16_t timeout = 0 )
00472 XRD_WARN_UNUSED_RESULT;
00473
00474
00482
00483 XRootDStatus ChMod( const std::string &path,
00484 Access::Mode mode,
00485 uint16_t timeout = 0 )
00486 XRD_WARN_UNUSED_RESULT;
00487
00488
00495
00496 XRootDStatus Ping( ResponseHandler *handler,
00497 uint16_t timeout = 0 )
00498 XRD_WARN_UNUSED_RESULT;
00499
00500
00506
00507 XRootDStatus Ping( uint16_t timeout = 0 ) XRD_WARN_UNUSED_RESULT;
00508
00509
00519
00520 XRootDStatus Stat( const std::string &path,
00521 ResponseHandler *handler,
00522 uint16_t timeout = 0 )
00523 XRD_WARN_UNUSED_RESULT;
00524
00525
00534
00535 XRootDStatus Stat( const std::string &path,
00536 StatInfo *&response,
00537 uint16_t timeout = 0 )
00538 XRD_WARN_UNUSED_RESULT;
00539
00540
00550
00551 XRootDStatus StatVFS( const std::string &path,
00552 ResponseHandler *handler,
00553 uint16_t timeout = 0 )
00554 XRD_WARN_UNUSED_RESULT;
00555
00556
00564
00565 XRootDStatus StatVFS( const std::string &path,
00566 StatInfoVFS *&response,
00567 uint16_t timeout = 0 )
00568 XRD_WARN_UNUSED_RESULT;
00569
00570
00579
00580 XRootDStatus Protocol( ResponseHandler *handler,
00581 uint16_t timeout = 0 )
00582 XRD_WARN_UNUSED_RESULT;
00583
00584
00591
00592 XRootDStatus Protocol( ProtocolInfo *&response,
00593 uint16_t timeout = 0 )
00594 XRD_WARN_UNUSED_RESULT;
00595
00596
00607
00608 XRootDStatus DirList( const std::string &path,
00609 DirListFlags::Flags flags,
00610 ResponseHandler *handler,
00611 uint16_t timeout = 0 )
00612 XRD_WARN_UNUSED_RESULT;
00613
00614
00623
00624 XRootDStatus DirList( const std::string &path,
00625 DirListFlags::Flags flags,
00626 DirectoryList *&response,
00627 uint16_t timeout = 0 )
00628 XRD_WARN_UNUSED_RESULT;
00629
00630
00640
00641 XRootDStatus SendInfo( const std::string &info,
00642 ResponseHandler *handler,
00643 uint16_t timeout = 0 )
00644 XRD_WARN_UNUSED_RESULT;
00645
00646
00654
00655 XRootDStatus SendInfo( const std::string &info,
00656 Buffer *&response,
00657 uint16_t timeout = 0 )
00658 XRD_WARN_UNUSED_RESULT;
00659
00660
00672
00673 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00674 PrepareFlags::Flags flags,
00675 uint8_t priority,
00676 ResponseHandler *handler,
00677 uint16_t timeout = 0 )
00678 XRD_WARN_UNUSED_RESULT;
00679
00680
00690
00691 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00692 PrepareFlags::Flags flags,
00693 uint8_t priority,
00694 Buffer *&response,
00695 uint16_t timeout = 0 )
00696 XRD_WARN_UNUSED_RESULT;
00697
00698
00703
00704 bool SetProperty( const std::string &name, const std::string &value );
00705
00706
00710
00711 bool GetProperty( const std::string &name, std::string &value ) const;
00712
00713 private:
00714 FileSystem(const FileSystem &other);
00715 FileSystem &operator = (const FileSystem &other);
00716
00717
00718
00719
00720 Status Send( Message *msg,
00721 ResponseHandler *handler,
00722 MessageSendParams ¶ms );
00723
00724
00725
00726
00727 void AssignLoadBalancer( const URL &url );
00728
00729
00730
00731
00732 void Lock()
00733 {
00734 pMutex.Lock();
00735 }
00736
00737
00738
00739
00740 void UnLock()
00741 {
00742 pMutex.UnLock();
00743 }
00744
00745 XrdSysMutex pMutex;
00746 bool pLoadBalancerLookupDone;
00747 bool pFollowRedirects;
00748 URL *pUrl;
00749 FileSystemPlugIn *pPlugIn;
00750 };
00751 }
00752
00753 #endif // __XRD_CL_FILE_SYSTEM_HH__