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 Delete = kXR_delete,
00080
00081 Force = kXR_force,
00082
00083 MakePath = kXR_mkpath,
00084
00085 New = kXR_new,
00086
00087 NoWait = kXR_nowait,
00088
00089
00090
00091
00092
00093 Append = kXR_open_apnd,
00094 Read = kXR_open_read,
00095 Update = kXR_open_updt,
00096 Write = kXR_open_wrto,
00097 POSC = kXR_posc,
00098
00099 Refresh = kXR_refresh,
00100
00101 Replica = kXR_replica,
00102
00103 SeqIO = kXR_seqio,
00104 PrefName = kXR_prefname
00105
00106 };
00107 };
00108 XRDOUC_ENUM_OPERATORS( OpenFlags::Flags )
00109
00110
00112
00113 struct Access
00114 {
00115
00117
00118 enum Mode
00119 {
00120 None = 0,
00121 UR = kXR_ur,
00122 UW = kXR_uw,
00123 UX = kXR_ux,
00124 GR = kXR_gr,
00125 GW = kXR_gw,
00126 GX = kXR_gx,
00127 OR = kXR_or,
00128 OW = kXR_ow,
00129 OX = kXR_ox
00130 };
00131 };
00132 XRDOUC_ENUM_OPERATORS( Access::Mode )
00133
00134
00136
00137 struct MkDirFlags
00138 {
00139 enum Flags
00140 {
00141 None = 0,
00142 MakePath = 1
00143 };
00144 };
00145 XRDOUC_ENUM_OPERATORS( MkDirFlags::Flags )
00146
00147
00149
00150 struct DirListFlags
00151 {
00152 enum Flags
00153 {
00154 None = 0,
00155 Stat = 1,
00156 Locate = 2
00157
00158 };
00159 };
00160 XRDOUC_ENUM_OPERATORS( DirListFlags::Flags )
00161
00162
00164
00165 struct PrepareFlags
00166 {
00167 enum Flags
00168 {
00169 None = 0,
00170 Colocate = kXR_coloc,
00171 Fresh = kXR_fresh,
00172
00173 Stage = kXR_stage,
00174
00175 WriteMode = kXR_wmode
00176
00177 };
00178 };
00179 XRDOUC_ENUM_OPERATORS( PrepareFlags::Flags )
00180
00181
00183
00184 class FileSystem
00185 {
00186 friend class AssignLBHandler;
00187 friend class ForkHandler;
00188
00189 public:
00190 typedef std::vector<LocationInfo> LocationList;
00191
00192
00197
00198 FileSystem( const URL &url, bool enablePlugIns = true );
00199
00200
00202
00203 ~FileSystem();
00204
00205
00216
00217 XRootDStatus Locate( const std::string &path,
00218 OpenFlags::Flags flags,
00219 ResponseHandler *handler,
00220 uint16_t timeout = 0 )
00221 XRD_WARN_UNUSED_RESULT;
00222
00223
00232
00233 XRootDStatus Locate( const std::string &path,
00234 OpenFlags::Flags flags,
00235 LocationInfo *&response,
00236 uint16_t timeout = 0 )
00237 XRD_WARN_UNUSED_RESULT;
00238
00239
00250
00251 XRootDStatus DeepLocate( const std::string &path,
00252 OpenFlags::Flags flags,
00253 ResponseHandler *handler,
00254 uint16_t timeout = 0 )
00255 XRD_WARN_UNUSED_RESULT;
00256
00257
00266
00267 XRootDStatus DeepLocate( const std::string &path,
00268 OpenFlags::Flags flags,
00269 LocationInfo *&response,
00270 uint16_t timeout = 0 )
00271 XRD_WARN_UNUSED_RESULT;
00272
00273
00282
00283 XRootDStatus Mv( const std::string &source,
00284 const std::string &dest,
00285 ResponseHandler *handler,
00286 uint16_t timeout = 0 )
00287 XRD_WARN_UNUSED_RESULT;
00288
00289
00297
00298 XRootDStatus Mv( const std::string &source,
00299 const std::string &dest,
00300 uint16_t timeout = 0 )
00301 XRD_WARN_UNUSED_RESULT;
00302
00303
00314
00315 XRootDStatus Query( QueryCode::Code queryCode,
00316 const Buffer &arg,
00317 ResponseHandler *handler,
00318 uint16_t timeout = 0 )
00319 XRD_WARN_UNUSED_RESULT;
00320
00321
00330
00331 XRootDStatus Query( QueryCode::Code queryCode,
00332 const Buffer &arg,
00333 Buffer *&response,
00334 uint16_t timeout = 0 )
00335 XRD_WARN_UNUSED_RESULT;
00336
00337
00346
00347 XRootDStatus Truncate( const std::string &path,
00348 uint64_t size,
00349 ResponseHandler *handler,
00350 uint16_t timeout = 0 )
00351 XRD_WARN_UNUSED_RESULT;
00352
00353
00361
00362 XRootDStatus Truncate( const std::string &path,
00363 uint64_t size,
00364 uint16_t timeout = 0 )
00365 XRD_WARN_UNUSED_RESULT;
00366
00367
00375
00376 XRootDStatus Rm( const std::string &path,
00377 ResponseHandler *handler,
00378 uint16_t timeout = 0 )
00379 XRD_WARN_UNUSED_RESULT;
00380
00381
00388
00389 XRootDStatus Rm( const std::string &path,
00390 uint16_t timeout = 0 )
00391 XRD_WARN_UNUSED_RESULT;
00392
00393
00403
00404 XRootDStatus MkDir( const std::string &path,
00405 MkDirFlags::Flags flags,
00406 Access::Mode mode,
00407 ResponseHandler *handler,
00408 uint16_t timeout = 0 )
00409 XRD_WARN_UNUSED_RESULT;
00410
00411
00420
00421 XRootDStatus MkDir( const std::string &path,
00422 MkDirFlags::Flags flags,
00423 Access::Mode mode,
00424 uint16_t timeout = 0 )
00425 XRD_WARN_UNUSED_RESULT;
00426
00427
00435
00436 XRootDStatus RmDir( const std::string &path,
00437 ResponseHandler *handler,
00438 uint16_t timeout = 0 )
00439 XRD_WARN_UNUSED_RESULT;
00440
00441
00448
00449 XRootDStatus RmDir( const std::string &path,
00450 uint16_t timeout = 0 )
00451 XRD_WARN_UNUSED_RESULT;
00452
00453
00462
00463 XRootDStatus ChMod( const std::string &path,
00464 Access::Mode mode,
00465 ResponseHandler *handler,
00466 uint16_t timeout = 0 )
00467 XRD_WARN_UNUSED_RESULT;
00468
00469
00477
00478 XRootDStatus ChMod( const std::string &path,
00479 Access::Mode mode,
00480 uint16_t timeout = 0 )
00481 XRD_WARN_UNUSED_RESULT;
00482
00483
00490
00491 XRootDStatus Ping( ResponseHandler *handler,
00492 uint16_t timeout = 0 )
00493 XRD_WARN_UNUSED_RESULT;
00494
00495
00501
00502 XRootDStatus Ping( uint16_t timeout = 0 ) XRD_WARN_UNUSED_RESULT;
00503
00504
00514
00515 XRootDStatus Stat( const std::string &path,
00516 ResponseHandler *handler,
00517 uint16_t timeout = 0 )
00518 XRD_WARN_UNUSED_RESULT;
00519
00520
00528
00529 XRootDStatus Stat( const std::string &path,
00530 StatInfo *&response,
00531 uint16_t timeout = 0 )
00532 XRD_WARN_UNUSED_RESULT;
00533
00534
00544
00545 XRootDStatus StatVFS( const std::string &path,
00546 ResponseHandler *handler,
00547 uint16_t timeout = 0 )
00548 XRD_WARN_UNUSED_RESULT;
00549
00550
00558
00559 XRootDStatus StatVFS( const std::string &path,
00560 StatInfoVFS *&response,
00561 uint16_t timeout = 0 )
00562 XRD_WARN_UNUSED_RESULT;
00563
00564
00573
00574 XRootDStatus Protocol( ResponseHandler *handler,
00575 uint16_t timeout = 0 )
00576 XRD_WARN_UNUSED_RESULT;
00577
00578
00585
00586 XRootDStatus Protocol( ProtocolInfo *&response,
00587 uint16_t timeout = 0 )
00588 XRD_WARN_UNUSED_RESULT;
00589
00590
00601
00602 XRootDStatus DirList( const std::string &path,
00603 DirListFlags::Flags flags,
00604 ResponseHandler *handler,
00605 uint16_t timeout = 0 )
00606 XRD_WARN_UNUSED_RESULT;
00607
00608
00617
00618 XRootDStatus DirList( const std::string &path,
00619 DirListFlags::Flags flags,
00620 DirectoryList *&response,
00621 uint16_t timeout = 0 )
00622 XRD_WARN_UNUSED_RESULT;
00623
00624
00634
00635 XRootDStatus SendInfo( const std::string &info,
00636 ResponseHandler *handler,
00637 uint16_t timeout = 0 )
00638 XRD_WARN_UNUSED_RESULT;
00639
00640
00648
00649 XRootDStatus SendInfo( const std::string &info,
00650 Buffer *&response,
00651 uint16_t timeout = 0 )
00652 XRD_WARN_UNUSED_RESULT;
00653
00654
00666
00667 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00668 PrepareFlags::Flags flags,
00669 uint8_t priority,
00670 ResponseHandler *handler,
00671 uint16_t timeout = 0 )
00672 XRD_WARN_UNUSED_RESULT;
00673
00674
00684
00685 XRootDStatus Prepare( const std::vector<std::string> &fileList,
00686 PrepareFlags::Flags flags,
00687 uint8_t priority,
00688 Buffer *&response,
00689 uint16_t timeout = 0 )
00690 XRD_WARN_UNUSED_RESULT;
00691
00692
00697
00698 bool SetProperty( const std::string &name, const std::string &value );
00699
00700
00704
00705 bool GetProperty( const std::string &name, std::string &value ) const;
00706
00707 private:
00708 FileSystem(const FileSystem &other);
00709 FileSystem &operator = (const FileSystem &other);
00710
00711
00712
00713
00714 Status Send( Message *msg,
00715 ResponseHandler *handler,
00716 MessageSendParams ¶ms );
00717
00718
00719
00720
00721 void AssignLoadBalancer( const URL &url );
00722
00723
00724
00725
00726 void Lock()
00727 {
00728 pMutex.Lock();
00729 }
00730
00731
00732
00733
00734 void UnLock()
00735 {
00736 pMutex.UnLock();
00737 }
00738
00739 XrdSysMutex pMutex;
00740 bool pLoadBalancerLookupDone;
00741 bool pFollowRedirects;
00742 URL *pUrl;
00743 FileSystemPlugIn *pPlugIn;
00744 };
00745 }
00746
00747 #endif // __XRD_CL_FILE_SYSTEM_HH__