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 Chunked = 16,
00163 Zip = 32
00164 };
00165 };
00166 XRDOUC_ENUM_OPERATORS( DirListFlags::Flags )
00167
00168
00170
00171 struct PrepareFlags
00172 {
00173 enum Flags
00174 {
00175 None = 0,
00176 Colocate = kXR_coloc,
00177 Fresh = kXR_fresh,
00178
00179 Stage = kXR_stage,
00180
00181 WriteMode = kXR_wmode,
00182
00183 Cancel = kXR_cancel,
00184 Evict = kXR_evict << 8
00185
00186
00187
00188 };
00189 };
00190 XRDOUC_ENUM_OPERATORS( PrepareFlags::Flags )
00191
00192
00194
00195 class FileSystem
00196 {
00197 friend class AssignLBHandler;
00198 friend class ForkHandler;
00199
00200 public:
00201 typedef std::vector<LocationInfo> LocationList;
00202
00203
00208
00209 FileSystem( const URL &url, bool enablePlugIns = true );
00210
00211
00213
00214 ~FileSystem();
00215
00216
00227
00228 XRootDStatus Locate( const std::string &path,
00229 OpenFlags::Flags flags,
00230 ResponseHandler *handler,
00231 uint16_t timeout = 0 )
00232 XRD_WARN_UNUSED_RESULT;
00233
00234
00243
00244 XRootDStatus Locate( const std::string &path,
00245 OpenFlags::Flags flags,
00246 LocationInfo *&response,
00247 uint16_t timeout = 0 )
00248 XRD_WARN_UNUSED_RESULT;
00249
00250
00261
00262 XRootDStatus DeepLocate( const std::string &path,
00263 OpenFlags::Flags flags,
00264 ResponseHandler *handler,
00265 uint16_t timeout = 0 )
00266 XRD_WARN_UNUSED_RESULT;
00267
00268
00277
00278 XRootDStatus DeepLocate( const std::string &path,
00279 OpenFlags::Flags flags,
00280 LocationInfo *&response,
00281 uint16_t timeout = 0 )
00282 XRD_WARN_UNUSED_RESULT;
00283
00284
00293
00294 XRootDStatus Mv( const std::string &source,
00295 const std::string &dest,
00296 ResponseHandler *handler,
00297 uint16_t timeout = 0 )
00298 XRD_WARN_UNUSED_RESULT;
00299
00300
00308
00309 XRootDStatus Mv( const std::string &source,
00310 const std::string &dest,
00311 uint16_t timeout = 0 )
00312 XRD_WARN_UNUSED_RESULT;
00313
00314
00325
00326 XRootDStatus Query( QueryCode::Code queryCode,
00327 const Buffer &arg,
00328 ResponseHandler *handler,
00329 uint16_t timeout = 0 )
00330 XRD_WARN_UNUSED_RESULT;
00331
00332
00341
00342 XRootDStatus Query( QueryCode::Code queryCode,
00343 const Buffer &arg,
00344 Buffer *&response,
00345 uint16_t timeout = 0 )
00346 XRD_WARN_UNUSED_RESULT;
00347
00348
00357
00358 XRootDStatus Truncate( const std::string &path,
00359 uint64_t size,
00360 ResponseHandler *handler,
00361 uint16_t timeout = 0 )
00362 XRD_WARN_UNUSED_RESULT;
00363
00364
00372
00373 XRootDStatus Truncate( const std::string &path,
00374 uint64_t size,
00375 uint16_t timeout = 0 )
00376 XRD_WARN_UNUSED_RESULT;
00377
00378
00386
00387 XRootDStatus Rm( const std::string &path,
00388 ResponseHandler *handler,
00389 uint16_t timeout = 0 )
00390 XRD_WARN_UNUSED_RESULT;
00391
00392
00399
00400 XRootDStatus Rm( const std::string &path,
00401 uint16_t timeout = 0 )
00402 XRD_WARN_UNUSED_RESULT;
00403
00404
00414
00415 XRootDStatus MkDir( const std::string &path,
00416 MkDirFlags::Flags flags,
00417 Access::Mode mode,
00418 ResponseHandler *handler,
00419 uint16_t timeout = 0 )
00420 XRD_WARN_UNUSED_RESULT;
00421
00422
00431
00432 XRootDStatus MkDir( const std::string &path,
00433 MkDirFlags::Flags flags,
00434 Access::Mode mode,
00435 uint16_t timeout = 0 )
00436 XRD_WARN_UNUSED_RESULT;
00437
00438
00446
00447 XRootDStatus RmDir( const std::string &path,
00448 ResponseHandler *handler,
00449 uint16_t timeout = 0 )
00450 XRD_WARN_UNUSED_RESULT;
00451
00452
00459
00460 XRootDStatus RmDir( const std::string &path,
00461 uint16_t timeout = 0 )
00462 XRD_WARN_UNUSED_RESULT;
00463
00464
00473
00474 XRootDStatus ChMod( const std::string &path,
00475 Access::Mode mode,
00476 ResponseHandler *handler,
00477 uint16_t timeout = 0 )
00478 XRD_WARN_UNUSED_RESULT;
00479
00480
00488
00489 XRootDStatus ChMod( const std::string &path,
00490 Access::Mode mode,
00491 uint16_t timeout = 0 )
00492 XRD_WARN_UNUSED_RESULT;
00493
00494
00501
00502 XRootDStatus Ping( ResponseHandler *handler,
00503 uint16_t timeout = 0 )
00504 XRD_WARN_UNUSED_RESULT;
00505
00506
00512
00513 XRootDStatus Ping( uint16_t timeout = 0 ) XRD_WARN_UNUSED_RESULT;
00514
00515
00525
00526 XRootDStatus Stat( const std::string &path,
00527 ResponseHandler *handler,
00528 uint16_t timeout = 0 )
00529 XRD_WARN_UNUSED_RESULT;
00530
00531
00540
00541 XRootDStatus Stat( const std::string &path,
00542 StatInfo *&response,
00543 uint16_t timeout = 0 )
00544 XRD_WARN_UNUSED_RESULT;
00545
00546
00556
00557 XRootDStatus StatVFS( const std::string &path,
00558 ResponseHandler *handler,
00559 uint16_t timeout = 0 )
00560 XRD_WARN_UNUSED_RESULT;
00561
00562
00570
00571 XRootDStatus StatVFS( const std::string &path,
00572 StatInfoVFS *&response,
00573 uint16_t timeout = 0 )
00574 XRD_WARN_UNUSED_RESULT;
00575
00576
00585
00586 XRootDStatus Protocol( ResponseHandler *handler,
00587 uint16_t timeout = 0 )
00588 XRD_WARN_UNUSED_RESULT;
00589
00590
00597
00598 XRootDStatus Protocol( ProtocolInfo *&response,
00599 uint16_t timeout = 0 )
00600 XRD_WARN_UNUSED_RESULT;
00601
00602
00613
00614 XRootDStatus DirList( const std::string &path,
00615 DirListFlags::Flags flags,
00616 ResponseHandler *handler,
00617 uint16_t timeout = 0 )
00618 XRD_WARN_UNUSED_RESULT;
00619
00620
00629
00630 XRootDStatus DirList( const std::string &path,
00631 DirListFlags::Flags flags,
00632 DirectoryList *&response,
00633 uint16_t timeout = 0 )
00634 XRD_WARN_UNUSED_RESULT;
00635
00636
00646
00647 XRootDStatus SendInfo( const std::string &info,
00648 ResponseHandler *handler,
00649 uint16_t timeout = 0 )
00650 XRD_WARN_UNUSED_RESULT;
00651
00652
00660
00661 XRootDStatus SendInfo( const std::string &info,
00662 Buffer *&response,
00663 uint16_t timeout = 0 )
00664 XRD_WARN_UNUSED_RESULT;
00665
00666
00678
00679 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00680 PrepareFlags::Flags flags,
00681 uint8_t priority,
00682 ResponseHandler *handler,
00683 uint16_t timeout = 0 )
00684 XRD_WARN_UNUSED_RESULT;
00685
00686
00696
00697 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00698 PrepareFlags::Flags flags,
00699 uint8_t priority,
00700 Buffer *&response,
00701 uint16_t timeout = 0 )
00702 XRD_WARN_UNUSED_RESULT;
00703
00704
00709
00710 bool SetProperty( const std::string &name, const std::string &value );
00711
00712
00716
00717 bool GetProperty( const std::string &name, std::string &value ) const;
00718
00719 private:
00720 FileSystem(const FileSystem &other);
00721 FileSystem &operator = (const FileSystem &other);
00722
00723
00724
00725
00726 Status Send( Message *msg,
00727 ResponseHandler *handler,
00728 MessageSendParams ¶ms );
00729
00730
00731
00732
00733 void AssignLoadBalancer( const URL &url );
00734
00735
00736
00737
00738 void Lock()
00739 {
00740 pMutex.Lock();
00741 }
00742
00743
00744
00745
00746 void UnLock()
00747 {
00748 pMutex.UnLock();
00749 }
00750
00751 XrdSysMutex pMutex;
00752 bool pLoadBalancerLookupDone;
00753 bool pFollowRedirects;
00754 URL *pUrl;
00755 FileSystemPlugIn *pPlugIn;
00756 };
00757 }
00758
00759 #endif // __XRD_CL_FILE_SYSTEM_HH__