xrootd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
XrdSfsInterface.hh
Go to the documentation of this file.
1 #ifndef __SFS_INTERFACE_H__
2 #define __SFS_INTERFACE_H__
3 /******************************************************************************/
4 /* */
5 /* X r d S f s I n t e r f a c e . h h */
6 /* */
7 /* (c) 2018 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* Produced by Andrew Hanushevsky for Stanford University under contract */
9 /* DE-AC02-76-SFO0515 with the Department of Energy */
10 /* */
11 /* This file is part of the XRootD software suite. */
12 /* */
13 /* XRootD is free software: you can redistribute it and/or modify it under */
14 /* the terms of the GNU Lesser General Public License as published by the */
15 /* Free Software Foundation, either version 3 of the License, or (at your */
16 /* option) any later version. */
17 /* */
18 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
19 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
20 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
21 /* License for more details. */
22 /* */
23 /* You should have received a copy of the GNU Lesser General Public License */
24 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
25 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
26 /* */
27 /* The copyright holder's institutional names and contributor's names may not */
28 /* be used to endorse or promote products derived from this software without */
29 /* specific prior written permission of the institution or contributor. */
30 /******************************************************************************/
31 
32 #include <cstring> // For strlcpy()
33 #include <cerrno>
34 #include <cstdint>
35 #include <sys/types.h>
36 #include <sys/stat.h>
37 
38 #include "XrdOuc/XrdOucErrInfo.hh"
39 #include "XrdOuc/XrdOucIOVec.hh"
40 #include "XrdOuc/XrdOucSFVec.hh"
41 
42 #include "XrdSfs/XrdSfsGPFile.hh"
43 
44 #include "XrdSys/XrdSysPageSize.hh"
45 
46 /******************************************************************************/
47 /* O p e n M o d e s */
48 /******************************************************************************/
49 
50 #define SFS_O_RDONLY 0 // open read/only
51 #define SFS_O_WRONLY 1 // open write/only
52 #define SFS_O_RDWR 2 // open read/write
53 #define SFS_O_CREAT 0x00000100 // used for file creation
54 #define SFS_O_TRUNC 0x00000200 // used for file truncation
55 #define SFS_O_MULTIW 0x00000400 // used for multi-write locations
56 #define SFS_O_NOTPC 0x00000800 // used to suppress TPC opens
57 #define SFS_O_DIRLIST 0x00010000 // used for locate only
58 #define SFS_O_POSC 0x00100000 // persist on successful close
59 #define SFS_O_FORCE 0x00200000 // used for locate only
60 #define SFS_O_HNAME 0x00400000 // used for locate only
61 #define SFS_O_LOCAL 0x00800000 // used for locate only (local cmd)
62 #define SFS_O_NOWAIT 0x01000000 // do not impose operational delays
63 #define SFS_O_RAWIO 0x02000000 // allow client-side decompression
64 #define SFS_O_RESET 0x04000000 // Reset any cached information
65 #define SFS_O_REPLICA 0x08000000 // Open for replication
66 
67 // The following flag may be set in the access mode arg for open() & mkdir()
68 // Note that on some systems mode_t is 16-bits so we use a careful value!
69 //
70 #define SFS_O_MKPTH 0x00004000 // Make directory path if missing
71 
72 // The following options are here to provide a uniform clustering interface.
73 // They may be passed through open/locate/stat, as applicable.
74 //
75 #define SFS_O_LOCATE 0x10000000 // This request generated by locate()
76 #define SFS_O_STAT 0x20000000 // This request generated by stat()
77 #define SFS_O_META 0x40000000 // This request generated by metaop
78 
79 /******************************************************************************/
80 /* D e f i n e s */
81 /******************************************************************************/
82 
83 // Common fctl command values (0 to 255)
84 //
85 #define SFS_FCTL_GETFD 1 // Return file descriptor if possible
86 #define SFS_FCTL_STATV 2 // Return visa information
87 #define SFS_FCTL_SPEC1 3 // Return implementation defined information
88 
89 #define SFS_SFIO_FDVAL 0x80000000 // Use SendData() method GETFD response value
90 
91 // Common fsctl command values (0 to 255)
92 //
93 #define SFS_FSCTL_CMD 255
94 
95 #define SFS_FSCTL_LOCATE 1 // Locate a file
96 #define SFS_FSCTL_STATFS 2 // Return FS data
97 #define SFS_FSCTL_STATLS 3 // Return LS data
98 #define SFS_FSCTL_STATXA 4 // Return XA data
99 #define SFS_FSCTL_STATCC 5 // Return Cluster Config status
100 #define SFS_FSCTL_PLUGIN 8 // Return Implementation Dependent Data
101 #define SFS_FSCTL_PLUGIO 16 // Return Implementation Dependent Data
102 #define SFS_FSCTL_PLUGXC 32 // Perform cache oriented operation
103 
104 // Return values for integer & XrdSfsXferSize returning XrdSfs methods
105 //
106 #define SFS_STALL 1 // Return value -> Seconds to stall client
107 #define SFS_OK 0 // ErrInfo code -> All is well
108 #define SFS_ERROR -1 // ErrInfo code -> Error occurred
109 #define SFS_REDIRECT -256 // ErrInfo code -> Port number to redirect to
110 #define SFS_STARTED -512 // ErrInfo code -> Estimated seconds to completion
111 #define SFS_DATA -1024 // ErrInfo code -> Length of data
112 #define SFS_DATAVEC -2048 // ErrInfo code -> Num iovec elements in msgbuff
113 
114 // The following macros are used for dealing with special local paths
115 //
116 #define SFS_LCLPRFX "/=/"
117 #define SFS_LCLPLEN 3
118 #define SFS_LCLPATH(x) !strncmp(x, SFS_LCLPRFX, SFS_LCLPLEN)
119 #define SFS_LCLPRFY "/="
120 #define SFS_LCLROOT(x) !strncmp(x, SFS_LCLPRFX, SFS_LCLPLEN-1) \
121  && (*(x+SFS_LCLPLEN-1) == '/' || *(x+SFS_LCLPLEN-1) == 0)
122 
123 /******************************************************************************/
124 /* S t r u c t u r e s & T y p e d e f s */
125 /******************************************************************************/
126 
127 typedef long long XrdSfsFileOffset;
128 typedef int XrdSfsFileOpenMode;
129 typedef int XrdSfsMode;
130 typedef int XrdSfsXferSize;
131 
133 {
139 };
140 //------------------------------------------------
141 
142 #define Prep_PRTY0 0
143 #define Prep_PRTY1 1
144 #define Prep_PRTY2 2
145 #define Prep_PRTY3 3
146 #define Prep_PMASK 3
147 #define Prep_SENDAOK 4
148 #define Prep_SENDERR 8
149 #define Prep_SENDACK 12
150 #define Prep_WMODE 16
151 #define Prep_STAGE 32
152 #define Prep_COLOC 64
153 #define Prep_FRESH 128
154 #define Prep_CANCEL 256
155 #define Prep_QUERY 512
156 #define Prep_EVICT 1024
157 
158 class XrdOucTList;
159 
160 struct XrdSfsFSctl
161 {
162  const char *Arg1;
163  int Arg1Len;
164  int Arg2Len;
165  union{
166  const char *Arg2;
167  const char **ArgP;
168  };
169 };
170 
171 struct XrdSfsPrep
172 {
173  char *reqid;
174  char *notify;
175  int opts;
178 };
179 
180 /******************************************************************************/
181 /* F o r w a r d D e c l a r a t i o n s */
182 /******************************************************************************/
183 
184 class XrdOucEnv;
185 class XrdSecEntity;
186 struct XrdSfsFACtl;
187 
188 /******************************************************************************/
189 /* O b j e c t W r a p p i n g G u i d e */
190 /******************************************************************************/
191 
192 /* The XrdSfsDirectory and XrdSfsFile objects can be wrapped. Wraping can be
193  used to add functionality. The process is common and pretty muche rote.
194  There is only one caveat: all wrappers must use the same XrdOucErrInfo
195  object. This is because the ErrInfo object contains client parameters that
196  are used to control how things are done to be backward compatible. Newer
197  client can then use more efficient internal processing. The SFS provides
198  two ways to make sure the same ErrInfo object is used by all objects in
199  the wrapped chain. Forward propagation (the one typically used) and
200  backward propagation (used in certain unusual cases). In forward mode,
201  the ErrInfo object of the last object in the chain is propagated to the
202  front of the chain. In backward mode the reverse happens. Let's assume
203  the following scenarion. Object-A wraps object-B (the object here can be
204  directory or file object). In forward mode weneed to create objects in
205  reverse order (bottom to top) which is typically what you would do anyway
206  as you need to capture the pinter to the object your wrapping. So, using
207  newFile() as an example where sfsP points to the Interface being wrapped:
208 
209  XrdSfsFile *newFile(const char *user, int MonID)
210  {
211  XrdSfsFile *wrapped_file = sfsP->newFile(user, MonID);
212  if (!wrapped_file) return 0;
213  return new mySfsFile(wrapped_file,...);
214  }
215  class mySfsFile : public XrdSfsFile
216  {public:
217  mySfsFile(XrdSfsFile *wrapped_file,...) : XrdSfsFile(*wrapped_file)
218  {....}
219  ....
220  };
221 
222  Notice we are allocating the wrapped file ahead of the wrapper so that
223  the wrapper can use the ErrInfo object of the wrapped file.
224 
225  In backward mode we want to use the ErrInfo object of the front-most
226  wrapper for all wrappers after it. This mechanism is far more complicated
227  due to error handling requirements. However, it's useful when a wrapped
228  object is not necessarily instantiated to accomplish the needs of the
229  wrapper. An example of this is the newFile and newDir implementations for
230  XrdSsi where wrapped object creation is subject to the resource name.
231 */
232 
233 /******************************************************************************/
234 /* X r d S f s D i r e c t o r y */
235 /******************************************************************************/
236 
237 //------------------------------------------------------------------------------
240 //------------------------------------------------------------------------------
241 
243 {
244 public:
245 
246 //-----------------------------------------------------------------------------
249 //-----------------------------------------------------------------------------
250 
252 
253 //-----------------------------------------------------------------------------
261 //-----------------------------------------------------------------------------
262 
263 virtual int open(const char *path,
264  const XrdSecEntity *client = 0,
265  const char *opaque = 0) = 0;
266 
267 //-----------------------------------------------------------------------------
275 //-----------------------------------------------------------------------------
276 
277 virtual const char *nextEntry() = 0;
278 
279 //-----------------------------------------------------------------------------
283 //-----------------------------------------------------------------------------
284 
285 virtual int close() = 0;
286 
287 //-----------------------------------------------------------------------------
291 //-----------------------------------------------------------------------------
292 
293 virtual const char *FName() = 0;
294 
295 //-----------------------------------------------------------------------------
304 //-----------------------------------------------------------------------------
305 
306 virtual int autoStat(struct stat *buf);
307 
308 //-----------------------------------------------------------------------------
317 //-----------------------------------------------------------------------------
318 
319  XrdSfsDirectory(const char *user=0, int MonID=0)
320  : error(*(new XrdOucErrInfo(user, MonID)))
321  {lclEI = &error;}
322 
323 //-----------------------------------------------------------------------------
329 //-----------------------------------------------------------------------------
330 
332  : error(wrapD.error), lclEI(0) {}
333 
334 //-----------------------------------------------------------------------------
339 //-----------------------------------------------------------------------------
340 
342  : error(eInfo), lclEI(0) {}
343 
344 //-----------------------------------------------------------------------------
346 //-----------------------------------------------------------------------------
347 
348 virtual ~XrdSfsDirectory() {if (lclEI) delete lclEI;}
349 
350 private:
352 
353 }; // class XrdSfsDirectory
354 
355 /******************************************************************************/
356 /* X r d S f s F i l e */
357 /******************************************************************************/
358 
359 //------------------------------------------------------------------------------
362 //------------------------------------------------------------------------------
363 
364 class XrdSfsAio;
365 class XrdSfsDio;
366 class XrdSfsXio;
367 
369 {
370 public:
371 
372 //-----------------------------------------------------------------------------
375 //-----------------------------------------------------------------------------
376 
378 
379 //-----------------------------------------------------------------------------
401 //-----------------------------------------------------------------------------
402 
403 virtual int open(const char *fileName,
404  XrdSfsFileOpenMode openMode,
405  mode_t createMode,
406  const XrdSecEntity *client = 0,
407  const char *opaque = 0) = 0;
408 
409 //-----------------------------------------------------------------------------
430 //-----------------------------------------------------------------------------
431 
432 enum cpAct {cpCreate=0,
438  };
439 
440 virtual int checkpoint(cpAct act, struct iov *range=0, int n=0);
441 
442 //-----------------------------------------------------------------------------
446 //-----------------------------------------------------------------------------
447 
448 virtual int close() = 0;
449 
450 //-----------------------------------------------------------------------------
467 //-----------------------------------------------------------------------------
468 
469 virtual int fctl(const int cmd,
470  const char *args,
471  XrdOucErrInfo &eInfo) = 0;
472 
473 //-----------------------------------------------------------------------------
486 //-----------------------------------------------------------------------------
487 
488 virtual int fctl(const int cmd,
489  int alen,
490  const char *args,
491  const XrdSecEntity *client = 0);
492 
493 //-----------------------------------------------------------------------------
497 //-----------------------------------------------------------------------------
498 
499 virtual const char *FName() = 0;
500 
501 //-----------------------------------------------------------------------------
508 //-----------------------------------------------------------------------------
509 
510 virtual int getMmap(void **Addr, off_t &Size) = 0;
511 
512 //-----------------------------------------------------------------------------
514 //-----------------------------------------------------------------------------
515 
516 static const uint64_t
517 Verify = 0x8000000000000000ULL;
518 
519 //-----------------------------------------------------------------------------
538 //-----------------------------------------------------------------------------
539 
540 virtual XrdSfsXferSize pgRead(XrdSfsFileOffset offset,
541  char *buffer,
542  XrdSfsXferSize rdlen,
543  uint32_t *csvec,
544  uint64_t opts=0);
545 
546 //-----------------------------------------------------------------------------
554 //-----------------------------------------------------------------------------
555 
556 virtual int pgRead(XrdSfsAio *aioparm, uint64_t opts=0);
557 
558 //-----------------------------------------------------------------------------
578 //-----------------------------------------------------------------------------
579 
581  char *buffer,
582  XrdSfsXferSize wrlen,
583  uint32_t *csvec,
584  uint64_t opts=0);
585 
586 //-----------------------------------------------------------------------------
594 //-----------------------------------------------------------------------------
595 
596 virtual int pgWrite(XrdSfsAio *aioparm, uint64_t opts=0);
597 
598 //-----------------------------------------------------------------------------
606 //-----------------------------------------------------------------------------
607 
608 virtual XrdSfsXferSize read(XrdSfsFileOffset offset,
609  XrdSfsXferSize size) = 0;
610 
611 //-----------------------------------------------------------------------------
620 //-----------------------------------------------------------------------------
621 
622 virtual XrdSfsXferSize read(XrdSfsFileOffset offset,
623  char *buffer,
624  XrdSfsXferSize size) = 0;
625 
626 //-----------------------------------------------------------------------------
633 //-----------------------------------------------------------------------------
634 
635 virtual int read(XrdSfsAio *aioparm) = 0;
636 
637 //-----------------------------------------------------------------------------
647 //-----------------------------------------------------------------------------
648 
649 virtual XrdSfsXferSize readv(XrdOucIOVec *readV,
650  int rdvCnt);
651 
652 //-----------------------------------------------------------------------------
662 //-----------------------------------------------------------------------------
663 
664 virtual int SendData(XrdSfsDio *sfDio,
665  XrdSfsFileOffset offset,
666  XrdSfsXferSize size);
667 
668 //-----------------------------------------------------------------------------
677 //-----------------------------------------------------------------------------
678 
679 virtual XrdSfsXferSize write(XrdSfsFileOffset offset,
680  const char *buffer,
681  XrdSfsXferSize size) = 0;
682 
683 //-----------------------------------------------------------------------------
690 //-----------------------------------------------------------------------------
691 
692 virtual int write(XrdSfsAio *aioparm) = 0;
693 
694 //-----------------------------------------------------------------------------
704 //-----------------------------------------------------------------------------
705 
706 virtual XrdSfsXferSize writev(XrdOucIOVec *writeV,
707  int wdvCnt);
708 
709 //-----------------------------------------------------------------------------
716 //-----------------------------------------------------------------------------
717 
718 virtual int stat(struct stat *buf) = 0;
719 
720 //-----------------------------------------------------------------------------
724 //-----------------------------------------------------------------------------
725 
726 virtual int sync() = 0;
727 
728 //-----------------------------------------------------------------------------
733 //-----------------------------------------------------------------------------
734 
735 virtual int sync(XrdSfsAio *aiop) = 0;
736 
737 //-----------------------------------------------------------------------------
743 //-----------------------------------------------------------------------------
744 
745 virtual int truncate(XrdSfsFileOffset fsize) = 0;
746 
747 //-----------------------------------------------------------------------------
755 //-----------------------------------------------------------------------------
756 
757 virtual int getCXinfo(char cxtype[4], int &cxrsz) = 0;
758 
759 //-----------------------------------------------------------------------------
763 //-----------------------------------------------------------------------------
764 
765 virtual void setXio(XrdSfsXio *xioP) { (void)xioP; }
766 
767 //-----------------------------------------------------------------------------
776 //-----------------------------------------------------------------------------
777 
778  XrdSfsFile(const char *user=0, int MonID=0)
779  : error(*(new XrdOucErrInfo(user, MonID)))
780  {lclEI = &error; pgwrEOF = 0;}
781 
782 //-----------------------------------------------------------------------------
788 //-----------------------------------------------------------------------------
789 
791  : error(wrapF.error), lclEI(0), pgwrEOF(0) {}
792 
793 //-----------------------------------------------------------------------------
798 //-----------------------------------------------------------------------------
799 
801  : error(eInfo), lclEI(0), pgwrEOF(0) {}
802 
803 //-----------------------------------------------------------------------------
805 //-----------------------------------------------------------------------------
806 
807 virtual ~XrdSfsFile() {if (lclEI) delete lclEI;}
808 
809 private:
812 }; // class XrdSfsFile
813 
814 /******************************************************************************/
815 /* X r d S f s F i l e S y s t e m */
816 /******************************************************************************/
817 
818 //-----------------------------------------------------------------------------
842 //-----------------------------------------------------------------------------
843 
844 class XrdSfsFileSystem
845 {
846 public:
847 
848 //-----------------------------------------------------------------------------
858 //-----------------------------------------------------------------------------
859 
860 virtual XrdSfsDirectory *newDir(char *user=0, int MonID=0) = 0;
861 
862 //-----------------------------------------------------------------------------
873 //-----------------------------------------------------------------------------
874 
875 virtual XrdSfsDirectory *newDir(XrdOucErrInfo &eInfo) {(void)eInfo; return 0;}
876 
877 //-----------------------------------------------------------------------------
887 //-----------------------------------------------------------------------------
888 
889 virtual XrdSfsFile *newFile(char *user=0, int MonID=0) = 0;
890 
891 //-----------------------------------------------------------------------------
902 //-----------------------------------------------------------------------------
903 
904 virtual XrdSfsFile *newFile(XrdOucErrInfo &eInfo) {(void)eInfo; return 0;}
905 
906 //-----------------------------------------------------------------------------
925 //-----------------------------------------------------------------------------
926 
927 enum csFunc {csCalc = 0, csGet, csSize};
928 
929 virtual int chksum( csFunc Func,
930  const char *csName,
931  const char *path,
932  XrdOucErrInfo &eInfo,
933  const XrdSecEntity *client = 0,
934  const char *opaque = 0);
935 
936 //-----------------------------------------------------------------------------
946 //-----------------------------------------------------------------------------
947 
948 virtual int chmod(const char *path,
949  XrdSfsMode mode,
950  XrdOucErrInfo &eInfo,
951  const XrdSecEntity *client = 0,
952  const char *opaque = 0) = 0;
953 
954 //-----------------------------------------------------------------------------
958 //-----------------------------------------------------------------------------
959 
960 virtual void Connect(const XrdSecEntity *client = 0)
961 {
962  (void)client;
963 }
964 
965 //-----------------------------------------------------------------------------
969 //-----------------------------------------------------------------------------
970 
971 virtual void Disc(const XrdSecEntity *client = 0) {(void)client;}
972 
973 //-----------------------------------------------------------------------------
978 //-----------------------------------------------------------------------------
979 
980 virtual void EnvInfo(XrdOucEnv *envP) {(void)envP;}
981 
982 //-----------------------------------------------------------------------------
998 //-----------------------------------------------------------------------------
999 
1000 virtual int exists(const char *path,
1001  XrdSfsFileExistence &eFlag,
1002  XrdOucErrInfo &eInfo,
1003  const XrdSecEntity *client = 0,
1004  const char *opaque = 0) = 0;
1005 
1006 //-----------------------------------------------------------------------------
1020 //-----------------------------------------------------------------------------
1021 
1022 virtual int FAttr( XrdSfsFACtl *faReq,
1023  XrdOucErrInfo &eInfo,
1024  const XrdSecEntity *client = 0);
1025 
1026 //-----------------------------------------------------------------------------
1031 //-----------------------------------------------------------------------------
1032 
1033  uint64_t Features() {return FeatureSet;}
1034 
1035 //-----------------------------------------------------------------------------
1051 //-----------------------------------------------------------------------------
1052 
1053 virtual int FSctl(const int cmd,
1054  XrdSfsFSctl &args,
1055  XrdOucErrInfo &eInfo,
1056  const XrdSecEntity *client = 0);
1057 
1058 //-----------------------------------------------------------------------------
1086 //-----------------------------------------------------------------------------
1087 
1088 virtual int fsctl(const int cmd,
1089  const char *args,
1090  XrdOucErrInfo &eInfo,
1091  const XrdSecEntity *client = 0) = 0;
1092 
1093 //-----------------------------------------------------------------------------
1097 //-----------------------------------------------------------------------------
1098 
1099 virtual int getChkPSize() {return 0;}
1100 
1101 //-----------------------------------------------------------------------------
1111 //-----------------------------------------------------------------------------
1112 
1113 virtual int getStats(char *buff, int blen) = 0;
1114 
1115 //-----------------------------------------------------------------------------
1119 //-----------------------------------------------------------------------------
1120 
1121 virtual const char *getVersion() = 0;
1122 
1123 //-----------------------------------------------------------------------------
1134 //-----------------------------------------------------------------------------
1135 
1136 enum gpfFunc {gpfCancel=0,
1137  gpfGet,
1138  gpfPut
1139  };
1140 
1141 virtual int gpFile( gpfFunc &gpAct,
1142  XrdSfsGPFile &gpReq,
1143  XrdOucErrInfo &eInfo,
1144  const XrdSecEntity *client = 0);
1145 
1146 //-----------------------------------------------------------------------------
1156 //-----------------------------------------------------------------------------
1157 
1158 virtual int mkdir(const char *path,
1159  XrdSfsMode mode,
1160  XrdOucErrInfo &eInfo,
1161  const XrdSecEntity *client = 0,
1162  const char *opaque = 0) = 0;
1163 
1164 //-----------------------------------------------------------------------------
1172 //-----------------------------------------------------------------------------
1173 
1174 virtual int prepare( XrdSfsPrep &pargs,
1175  XrdOucErrInfo &eInfo,
1176  const XrdSecEntity *client = 0) = 0;
1177 
1178 //-----------------------------------------------------------------------------
1187 //-----------------------------------------------------------------------------
1188 
1189 virtual int rem(const char *path,
1190  XrdOucErrInfo &eInfo,
1191  const XrdSecEntity *client = 0,
1192  const char *opaque = 0) = 0;
1193 
1194 //-----------------------------------------------------------------------------
1203 //-----------------------------------------------------------------------------
1204 
1205 virtual int remdir(const char *path,
1206  XrdOucErrInfo &eInfo,
1207  const XrdSecEntity *client = 0,
1208  const char *opaque = 0) = 0;
1209 
1210 //-----------------------------------------------------------------------------
1221 //-----------------------------------------------------------------------------
1222 
1223 virtual int rename(const char *oPath,
1224  const char *nPath,
1225  XrdOucErrInfo &eInfo,
1226  const XrdSecEntity *client = 0,
1227  const char *opaqueO = 0,
1228  const char *opaqueN = 0) = 0;
1229 
1230 //-----------------------------------------------------------------------------
1241 //-----------------------------------------------------------------------------
1242 
1243 virtual int stat(const char *Name,
1244  struct stat *buf,
1245  XrdOucErrInfo &eInfo,
1246  const XrdSecEntity *client = 0,
1247  const char *opaque = 0) = 0;
1248 
1249 //-----------------------------------------------------------------------------
1261 //-----------------------------------------------------------------------------
1262 
1263 virtual int stat(const char *path,
1264  mode_t &mode,
1265  XrdOucErrInfo &eInfo,
1266  const XrdSecEntity *client = 0,
1267  const char *opaque = 0) = 0;
1268 
1269 //-----------------------------------------------------------------------------
1279 //-----------------------------------------------------------------------------
1280 
1281 virtual int truncate(const char *path,
1282  XrdSfsFileOffset fsize,
1283  XrdOucErrInfo &eInfo,
1284  const XrdSecEntity *client = 0,
1285  const char *opaque = 0) = 0;
1286 
1287 //-----------------------------------------------------------------------------
1289 //-----------------------------------------------------------------------------
1290 
1291  XrdSfsFileSystem();
1292 virtual ~XrdSfsFileSystem() {}
1293 
1294 protected:
1295 
1296 uint64_t FeatureSet;
1297 };
1298 
1299 /******************************************************************************/
1300 /* F i l e S y s t e m I n s t a n t i a t o r */
1301 /******************************************************************************/
1302 
1303 //-----------------------------------------------------------------------------
1326 typedef XrdSfsFileSystem *(*XrdSfsFileSystem2_t)(XrdSfsFileSystem *nativeFS,
1327  XrdSysLogger *Logger,
1328  const char *configFn,
1329  XrdOucEnv *envP);
1330 
1331 //-----------------------------------------------------------------------------
1343 typedef XrdSfsFileSystem *(*XrdSfsFileSystem_t) (XrdSfsFileSystem *nativeFS,
1344  XrdSysLogger *Logger,
1345  const char *configFn);
1346 
1347 //------------------------------------------------------------------------------
1359 //------------------------------------------------------------------------------
1360 #endif
virtual int SendData(XrdSfsDio *sfDio, XrdSfsFileOffset offset, XrdSfsXferSize size)
#define rename(a, b)
Definition: XrdPosix.hh:87
Truncate a file within checkpoint.
Definition: XrdSfsInterface.hh:436
int opts
Prep_xxx.
Definition: XrdSfsInterface.hh:175
#define truncate(a, b)
Definition: XrdPosix.hh:106
XrdSfsFile(const char *user=0, int MonID=0)
Definition: XrdSfsInterface.hh:778
XrdOucTList * oinfo
1-to-1 correspondence of opaque info
Definition: XrdSfsInterface.hh:177
virtual XrdSfsXferSize pgWrite(XrdSfsFileOffset offset, char *buffer, XrdSfsXferSize wrlen, uint32_t *csvec, uint64_t opts=0)
Restore an active checkpoint and delete it.
Definition: XrdSfsInterface.hh:434
virtual int checkpoint(cpAct act, struct iov *range=0, int n=0)
XrdSfsFileOffset pgwrEOF
Definition: XrdSfsInterface.hh:811
virtual XrdSfsXferSize pgRead(XrdSfsFileOffset offset, char *buffer, XrdSfsXferSize rdlen, uint32_t *csvec, uint64_t opts=0)
virtual int autoStat(struct stat *buf)
static const uint64_t Verify
Options for pgRead() and pgWrite() as noted below.
Definition: XrdSfsInterface.hh:517
Return checkpoint limits.
Definition: XrdSfsInterface.hh:435
Create a checkpoint, one must not be active.
Definition: XrdSfsInterface.hh:432
const char * Arg1
PLUGINO, PLUGION, PLUGXC.
Definition: XrdSfsInterface.hh:162
int XrdSfsXferSize
Definition: XrdSfsInterface.hh:130
XrdOucErrInfo & error
Definition: XrdSfsInterface.hh:377
virtual const char * nextEntry()=0
char * notify
Notification path or 0.
Definition: XrdSfsInterface.hh:174
XrdSfsFileExistence
Definition: XrdSfsInterface.hh:132
virtual ~XrdSfsDirectory()
Destructor.
Definition: XrdSfsInterface.hh:348
virtual XrdSfsXferSize writev(XrdOucIOVec *writeV, int wdvCnt)
virtual int truncate(XrdSfsFileOffset fsize)=0
virtual int fctl(const int cmd, const char *args, XrdOucErrInfo &eInfo)=0
virtual XrdSfsXferSize read(XrdSfsFileOffset offset, XrdSfsXferSize size)=0
virtual int close()=0
virtual XrdSfsXferSize write(XrdSfsFileOffset offset, const char *buffer, XrdSfsXferSize size)=0
Definition: XrdSfsFAttr.hh:72
Definition: XrdSfsInterface.hh:242
XrdSfsDirectory(const char *user=0, int MonID=0)
Definition: XrdSfsInterface.hh:319
Definition: XrdOucIOVec.hh:65
long long XrdSfsFileOffset
Definition: XrdSfsInterface.hh:127
int Arg1Len
Length.
Definition: XrdSfsInterface.hh:163
XrdSfsDirectory(XrdSfsDirectory &wrapD)
Definition: XrdSfsInterface.hh:331
Definition: XrdSfsInterface.hh:134
&lt; SFS_FSCTL_PLUGIN/PLUGIO/PLUGXC parms
Definition: XrdSfsInterface.hh:160
Add data to an existing checkpoint.
Definition: XrdSfsInterface.hh:437
virtual void setXio(XrdSfsXio *xioP)
Definition: XrdSfsInterface.hh:765
virtual int stat(struct stat *buf)=0
Definition: XrdOucErrInfo.hh:100
Definition: XrdSfsInterface.hh:135
Definition: XrdSfsGPFile.hh:36
const char ** ArgP
PLUGXC argument list extension.
Definition: XrdSfsInterface.hh:167
Definition: XrdSfsInterface.hh:137
Definition: XrdOucEnv.hh:41
Definition: XrdOucIOVec.hh:40
virtual int getMmap(void **Addr, off_t &Size)=0
virtual const char * FName()=0
XrdSfsFile(XrdOucErrInfo &eInfo)
Definition: XrdSfsInterface.hh:800
j template void())
Definition: XrdOucJson.hh:4121
const char * Arg2
PLUGIN opaque string.
Definition: XrdSfsInterface.hh:166
XrdSfsFile(XrdSfsFile &wrapF)
Definition: XrdSfsInterface.hh:790
Definition: XrdOucTList.hh:41
XrdOucErrInfo * lclEI
Definition: XrdSfsInterface.hh:810
XrdOucTList * paths
List of paths.
Definition: XrdSfsInterface.hh:176
cpAct
Definition: XrdSfsInterface.hh:432
Definition: XrdSysLogger.hh:52
virtual int getCXinfo(char cxtype[4], int &cxrsz)=0
virtual int open(const char *path, const XrdSecEntity *client=0, const char *opaque=0)=0
#define stat(a, b)
Definition: XrdPosix.hh:96
char * reqid
Request ID.
Definition: XrdSfsInterface.hh:173
XrdOucErrInfo * lclEI
Definition: XrdSfsInterface.hh:351
int XrdSfsMode
Definition: XrdSfsInterface.hh:129
virtual int close()=0
virtual int open(const char *fileName, XrdSfsFileOpenMode openMode, mode_t createMode, const XrdSecEntity *client=0, const char *opaque=0)=0
int Arg2Len
Length or -count of args in extension.
Definition: XrdSfsInterface.hh:164
Definition: XrdSfsDio.hh:46
Definition: XrdSecEntity.hh:64
Definition: XrdSfsInterface.hh:138
Definition: XrdSfsAio.hh:58
Definition: XrdSfsInterface.hh:368
virtual ~XrdSfsFile()
Destructor.
Definition: XrdSfsInterface.hh:807
&lt; Prepare parameters
Definition: XrdSfsInterface.hh:171
XrdOucErrInfo & error
Definition: XrdSfsInterface.hh:251
XrdSfsDirectory(XrdOucErrInfo &eInfo)
Definition: XrdSfsInterface.hh:341
virtual int sync()=0
#define mkdir(a, b)
Definition: XrdPosix.hh:69
virtual const char * FName()=0
virtual XrdSfsXferSize readv(XrdOucIOVec *readV, int rdvCnt)
int XrdSfsFileOpenMode
Definition: XrdSfsInterface.hh:128
Delete an existing checkpoint.
Definition: XrdSfsInterface.hh:433
Definition: XrdSfsXio.hh:54
Definition: XrdSfsInterface.hh:136