xrootd
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 <string.h> // For strlcpy()
33 #include <errno.h>
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 
103 // Return values for integer & XrdSfsXferSize returning XrdSfs methods
104 //
105 #define SFS_STALL 1 // Return value -> Seconds to stall client
106 #define SFS_OK 0 // ErrInfo code -> All is well
107 #define SFS_ERROR -1 // ErrInfo code -> Error occurred
108 #define SFS_REDIRECT -256 // ErrInfo code -> Port number to redirect to
109 #define SFS_STARTED -512 // ErrInfo code -> Estimated seconds to completion
110 #define SFS_DATA -1024 // ErrInfo code -> Length of data
111 #define SFS_DATAVEC -2048 // ErrInfo code -> Num iovec elements in msgbuff
112 
113 // The following macros are used for dealing with special local paths
114 //
115 #define SFS_LCLPRFX "/=/"
116 #define SFS_LCLPLEN 3
117 #define SFS_LCLPATH(x) !strncmp(x, SFS_LCLPRFX, SFS_LCLPLEN)
118 #define SFS_LCLPRFY "/="
119 #define SFS_LCLROOT(x) !strncmp(x, SFS_LCLPRFX, SFS_LCLPLEN-1) \
120  && (*(x+SFS_LCLPLEN-1) == '/' || *(x+SFS_LCLPLEN-1) == 0)
121 
122 /******************************************************************************/
123 /* S t r u c t u r e s & T y p e d e f s */
124 /******************************************************************************/
125 
126 typedef long long XrdSfsFileOffset;
127 typedef int XrdSfsFileOpenMode;
128 typedef int XrdSfsMode;
129 typedef int XrdSfsXferSize;
130 
132 {
138 };
139 //------------------------------------------------
140 
141 #define Prep_PRTY0 0
142 #define Prep_PRTY1 1
143 #define Prep_PRTY2 2
144 #define Prep_PRTY3 3
145 #define Prep_PMASK 3
146 #define Prep_SENDAOK 4
147 #define Prep_SENDERR 8
148 #define Prep_SENDACK 12
149 #define Prep_WMODE 16
150 #define Prep_STAGE 32
151 #define Prep_COLOC 64
152 #define Prep_FRESH 128
153 #define Prep_CANCEL 256
154 #define Prep_QUERY 512
155 #define Prep_EVICT 1024
156 
157 class XrdOucTList;
158 
159 struct XrdSfsFSctl
160 {
161  const char *Arg1;
162  int Arg1Len;
163  int Arg2Len;
164  const char *Arg2;
165 };
166 
167 struct XrdSfsPrep
168 {
169  char *reqid;
170  char *notify;
171  int opts;
174 };
175 
176 /******************************************************************************/
177 /* F o r w a r d D e c l a r a t i o n s */
178 /******************************************************************************/
179 
180 class XrdOucEnv;
181 class XrdSecEntity;
182 struct XrdSfsFACtl;
183 
184 /******************************************************************************/
185 /* O b j e c t W r a p p i n g G u i d e */
186 /******************************************************************************/
187 
188 /* The XrdSfsDirectory and XrdSfsFile objects can be wrapped. Wraping can be
189  used to add functionality. The process is common and pretty muche rote.
190  There is only one caveat: all wrappers must use the same XrdOucErrInfo
191  object. This is because the ErrInfo object contains client parameters that
192  are used to control how things are done to be backward compatible. Newer
193  client can then use more efficient internal processing. The SFS provides
194  two ways to make sure the same ErrInfo object is used by all objects in
195  the wrapped chain. Forward propagation (the one typically used) and
196  backward propagation (used in certain unusual cases). In forward mode,
197  the ErrInfo object of the last object in the chain is propagated to the
198  front of the chain. In backward mode the reverse happens. Let's assume
199  the following scenarion. Object-A wraps object-B (the object here can be
200  directory or file object). In forward mode weneed to create objects in
201  reverse order (bottom to top) which is typically what you would do anyway
202  as you need to capture the pinter to the object your wrapping. So, using
203  newFile() as an example where sfsP points to the Interface being wrapped:
204 
205  XrdSfsFile *newFile(const char *user, int MonID)
206  {
207  XrdSfsFile *wrapped_file = sfsP->newFile(user, MonID);
208  if (!wrapped_file) return 0;
209  return new mySfsFile(wrapped_file,...);
210  }
211  class mySfsFile : public XrdSfsFile
212  {public:
213  mySfsFile(XrdSfsFile *wrapped_file,...) : XrdSfsFile(*wrapped_file)
214  {....}
215  ....
216  };
217 
218  Notice we are allocating the wrapped file ahead of the wrapper so that
219  the wrapper can use the ErrInfo object of the wrapped file.
220 
221  In backward mode we want to use the ErrInfo object of the front-most
222  wrapper for all wrappers after it. This mechanism is far more complicated
223  due to error handling requirements. However, it's useful when a wrapped
224  object is not necessarily instantiated to accomplish the needs of the
225  wrapper. An example of this is the newFile and newDir implementations for
226  XrdSsi where wrapped object creation is subject to the resource name.
227 */
228 
229 /******************************************************************************/
230 /* X r d S f s D i r e c t o r y */
231 /******************************************************************************/
232 
233 //------------------------------------------------------------------------------
236 //------------------------------------------------------------------------------
237 
239 {
240 public:
241 
242 //-----------------------------------------------------------------------------
245 //-----------------------------------------------------------------------------
246 
248 
249 //-----------------------------------------------------------------------------
257 //-----------------------------------------------------------------------------
258 
259 virtual int open(const char *path,
260  const XrdSecEntity *client = 0,
261  const char *opaque = 0) = 0;
262 
263 //-----------------------------------------------------------------------------
271 //-----------------------------------------------------------------------------
272 
273 virtual const char *nextEntry() = 0;
274 
275 //-----------------------------------------------------------------------------
279 //-----------------------------------------------------------------------------
280 
281 virtual int close() = 0;
282 
283 //-----------------------------------------------------------------------------
287 //-----------------------------------------------------------------------------
288 
289 virtual const char *FName() = 0;
290 
291 //-----------------------------------------------------------------------------
300 //-----------------------------------------------------------------------------
301 
302 virtual int autoStat(struct stat *buf);
303 
304 //-----------------------------------------------------------------------------
313 //-----------------------------------------------------------------------------
314 
315  XrdSfsDirectory(const char *user=0, int MonID=0)
316  : error(*(new XrdOucErrInfo(user, MonID)))
317  {lclEI = &error;}
318 
319 //-----------------------------------------------------------------------------
325 //-----------------------------------------------------------------------------
326 
328  : error(wrapD.error), lclEI(0) {}
329 
330 //-----------------------------------------------------------------------------
335 //-----------------------------------------------------------------------------
336 
338  : error(eInfo), lclEI(0) {}
339 
340 //-----------------------------------------------------------------------------
342 //-----------------------------------------------------------------------------
343 
344 virtual ~XrdSfsDirectory() {if (lclEI) delete lclEI;}
345 
346 private:
348 
349 }; // class XrdSfsDirectory
350 
351 /******************************************************************************/
352 /* X r d S f s F i l e */
353 /******************************************************************************/
354 
355 //------------------------------------------------------------------------------
358 //------------------------------------------------------------------------------
359 
360 class XrdSfsAio;
361 class XrdSfsDio;
362 class XrdSfsXio;
363 
365 {
366 public:
367 
368 //-----------------------------------------------------------------------------
371 //-----------------------------------------------------------------------------
372 
374 
375 //-----------------------------------------------------------------------------
397 //-----------------------------------------------------------------------------
398 
399 virtual int open(const char *fileName,
400  XrdSfsFileOpenMode openMode,
401  mode_t createMode,
402  const XrdSecEntity *client = 0,
403  const char *opaque = 0) = 0;
404 
405 //-----------------------------------------------------------------------------
426 //-----------------------------------------------------------------------------
427 
428 enum cpAct {cpCreate=0,
434  };
435 
436 virtual int checkpoint(cpAct act, struct iov *range=0, int n=0);
437 
438 //-----------------------------------------------------------------------------
442 //-----------------------------------------------------------------------------
443 
444 virtual int close() = 0;
445 
446 //-----------------------------------------------------------------------------
463 //-----------------------------------------------------------------------------
464 
465 virtual int fctl(const int cmd,
466  const char *args,
467  XrdOucErrInfo &eInfo) = 0;
468 
469 //-----------------------------------------------------------------------------
482 //-----------------------------------------------------------------------------
483 
484 virtual int fctl(const int cmd,
485  int alen,
486  const char *args,
487  const XrdSecEntity *client = 0);
488 
489 //-----------------------------------------------------------------------------
493 //-----------------------------------------------------------------------------
494 
495 virtual const char *FName() = 0;
496 
497 //-----------------------------------------------------------------------------
504 //-----------------------------------------------------------------------------
505 
506 virtual int getMmap(void **Addr, off_t &Size) = 0;
507 
508 //-----------------------------------------------------------------------------
510 //-----------------------------------------------------------------------------
511 
512 static const uint64_t
513 Verify = 0x8000000000000000ULL;
514 static const uint64_t
515 NetOrder = 0x4000000000000000ULL;
516 
517 //-----------------------------------------------------------------------------
536 //-----------------------------------------------------------------------------
537 
538 virtual XrdSfsXferSize pgRead(XrdSfsFileOffset offset,
539  char *buffer,
540  XrdSfsXferSize rdlen,
541  uint32_t *csvec,
542  uint64_t opts=0);
543 
544 //-----------------------------------------------------------------------------
552 //-----------------------------------------------------------------------------
553 
554 virtual int pgRead(XrdSfsAio *aioparm, uint64_t opts=0);
555 
556 //-----------------------------------------------------------------------------
576 //-----------------------------------------------------------------------------
577 
579  char *buffer,
580  XrdSfsXferSize wrlen,
581  uint32_t *csvec,
582  uint64_t opts=0);
583 
584 //-----------------------------------------------------------------------------
592 //-----------------------------------------------------------------------------
593 
594 virtual int pgWrite(XrdSfsAio *aioparm, uint64_t opts=0);
595 
596 //-----------------------------------------------------------------------------
604 //-----------------------------------------------------------------------------
605 
606 virtual XrdSfsXferSize read(XrdSfsFileOffset offset,
607  XrdSfsXferSize size) = 0;
608 
609 //-----------------------------------------------------------------------------
618 //-----------------------------------------------------------------------------
619 
620 virtual XrdSfsXferSize read(XrdSfsFileOffset offset,
621  char *buffer,
622  XrdSfsXferSize size) = 0;
623 
624 //-----------------------------------------------------------------------------
631 //-----------------------------------------------------------------------------
632 
633 virtual int read(XrdSfsAio *aioparm) = 0;
634 
635 //-----------------------------------------------------------------------------
645 //-----------------------------------------------------------------------------
646 
647 virtual XrdSfsXferSize readv(XrdOucIOVec *readV,
648  int rdvCnt);
649 
650 //-----------------------------------------------------------------------------
660 //-----------------------------------------------------------------------------
661 
662 virtual int SendData(XrdSfsDio *sfDio,
663  XrdSfsFileOffset offset,
664  XrdSfsXferSize size);
665 
666 //-----------------------------------------------------------------------------
675 //-----------------------------------------------------------------------------
676 
677 virtual XrdSfsXferSize write(XrdSfsFileOffset offset,
678  const char *buffer,
679  XrdSfsXferSize size) = 0;
680 
681 //-----------------------------------------------------------------------------
688 //-----------------------------------------------------------------------------
689 
690 virtual int write(XrdSfsAio *aioparm) = 0;
691 
692 //-----------------------------------------------------------------------------
702 //-----------------------------------------------------------------------------
703 
704 virtual XrdSfsXferSize writev(XrdOucIOVec *writeV,
705  int wdvCnt);
706 
707 //-----------------------------------------------------------------------------
714 //-----------------------------------------------------------------------------
715 
716 virtual int stat(struct stat *buf) = 0;
717 
718 //-----------------------------------------------------------------------------
722 //-----------------------------------------------------------------------------
723 
724 virtual int sync() = 0;
725 
726 //-----------------------------------------------------------------------------
731 //-----------------------------------------------------------------------------
732 
733 virtual int sync(XrdSfsAio *aiop) = 0;
734 
735 //-----------------------------------------------------------------------------
741 //-----------------------------------------------------------------------------
742 
743 virtual int truncate(XrdSfsFileOffset fsize) = 0;
744 
745 //-----------------------------------------------------------------------------
753 //-----------------------------------------------------------------------------
754 
755 virtual int getCXinfo(char cxtype[4], int &cxrsz) = 0;
756 
757 //-----------------------------------------------------------------------------
761 //-----------------------------------------------------------------------------
762 
763 virtual void setXio(XrdSfsXio *xioP) { (void)xioP; }
764 
765 //-----------------------------------------------------------------------------
774 //-----------------------------------------------------------------------------
775 
776  XrdSfsFile(const char *user=0, int MonID=0)
777  : error(*(new XrdOucErrInfo(user, MonID)))
778  {lclEI = &error; pgwrEOF = 0;}
779 
780 //-----------------------------------------------------------------------------
786 //-----------------------------------------------------------------------------
787 
789  : error(wrapF.error), lclEI(0), pgwrEOF(0) {}
790 
791 //-----------------------------------------------------------------------------
796 //-----------------------------------------------------------------------------
797 
799  : error(eInfo), lclEI(0), pgwrEOF(0) {}
800 
801 //-----------------------------------------------------------------------------
803 //-----------------------------------------------------------------------------
804 
805 virtual ~XrdSfsFile() {if (lclEI) delete lclEI;}
806 
807 private:
810 }; // class XrdSfsFile
811 
812 /******************************************************************************/
813 /* X r d S f s F i l e S y s t e m */
814 /******************************************************************************/
815 
816 //-----------------------------------------------------------------------------
840 //-----------------------------------------------------------------------------
841 
842 class XrdSfsFileSystem
843 {
844 public:
845 
846 //-----------------------------------------------------------------------------
856 //-----------------------------------------------------------------------------
857 
858 virtual XrdSfsDirectory *newDir(char *user=0, int MonID=0) = 0;
859 
860 //-----------------------------------------------------------------------------
871 //-----------------------------------------------------------------------------
872 
873 virtual XrdSfsDirectory *newDir(XrdOucErrInfo &eInfo) {(void)eInfo; return 0;}
874 
875 //-----------------------------------------------------------------------------
885 //-----------------------------------------------------------------------------
886 
887 virtual XrdSfsFile *newFile(char *user=0, int MonID=0) = 0;
888 
889 //-----------------------------------------------------------------------------
900 //-----------------------------------------------------------------------------
901 
902 virtual XrdSfsFile *newFile(XrdOucErrInfo &eInfo) {(void)eInfo; return 0;}
903 
904 //-----------------------------------------------------------------------------
923 //-----------------------------------------------------------------------------
924 
925 enum csFunc {csCalc = 0, csGet, csSize};
926 
927 virtual int chksum( csFunc Func,
928  const char *csName,
929  const char *path,
930  XrdOucErrInfo &eInfo,
931  const XrdSecEntity *client = 0,
932  const char *opaque = 0);
933 
934 //-----------------------------------------------------------------------------
944 //-----------------------------------------------------------------------------
945 
946 virtual int chmod(const char *path,
947  XrdSfsMode mode,
948  XrdOucErrInfo &eInfo,
949  const XrdSecEntity *client = 0,
950  const char *opaque = 0) = 0;
951 
952 //-----------------------------------------------------------------------------
956 //-----------------------------------------------------------------------------
957 
958 virtual void Connect(const XrdSecEntity *client = 0)
959 {
960  (void)client;
961 }
962 
963 //-----------------------------------------------------------------------------
967 //-----------------------------------------------------------------------------
968 
969 virtual void Disc(const XrdSecEntity *client = 0) {(void)client;}
970 
971 //-----------------------------------------------------------------------------
976 //-----------------------------------------------------------------------------
977 
978 virtual void EnvInfo(XrdOucEnv *envP) {(void)envP;}
979 
980 //-----------------------------------------------------------------------------
996 //-----------------------------------------------------------------------------
997 
998 virtual int exists(const char *path,
999  XrdSfsFileExistence &eFlag,
1000  XrdOucErrInfo &eInfo,
1001  const XrdSecEntity *client = 0,
1002  const char *opaque = 0) = 0;
1003 
1004 //-----------------------------------------------------------------------------
1018 //-----------------------------------------------------------------------------
1019 
1020 virtual int FAttr( XrdSfsFACtl *faReq,
1021  XrdOucErrInfo &eInfo,
1022  const XrdSecEntity *client = 0);
1023 
1024 //-----------------------------------------------------------------------------
1029 //-----------------------------------------------------------------------------
1030 
1031  uint64_t Features() {return FeatureSet;}
1032 
1033 //-----------------------------------------------------------------------------
1049 //-----------------------------------------------------------------------------
1050 
1051 virtual int FSctl(const int cmd,
1052  XrdSfsFSctl &args,
1053  XrdOucErrInfo &eInfo,
1054  const XrdSecEntity *client = 0);
1055 
1056 //-----------------------------------------------------------------------------
1084 //-----------------------------------------------------------------------------
1085 
1086 virtual int fsctl(const int cmd,
1087  const char *args,
1088  XrdOucErrInfo &eInfo,
1089  const XrdSecEntity *client = 0) = 0;
1090 
1091 //-----------------------------------------------------------------------------
1095 //-----------------------------------------------------------------------------
1096 
1097 virtual int getChkPSize() {return 0;}
1098 
1099 //-----------------------------------------------------------------------------
1109 //-----------------------------------------------------------------------------
1110 
1111 virtual int getStats(char *buff, int blen) = 0;
1112 
1113 //-----------------------------------------------------------------------------
1117 //-----------------------------------------------------------------------------
1118 
1119 virtual const char *getVersion() = 0;
1120 
1121 //-----------------------------------------------------------------------------
1132 //-----------------------------------------------------------------------------
1133 
1134 enum gpfFunc {gpfCancel=0,
1135  gpfGet,
1136  gpfPut
1137  };
1138 
1139 virtual int gpFile( gpfFunc &gpAct,
1140  XrdSfsGPFile &gpReq,
1141  XrdOucErrInfo &eInfo,
1142  const XrdSecEntity *client = 0);
1143 
1144 //-----------------------------------------------------------------------------
1154 //-----------------------------------------------------------------------------
1155 
1156 virtual int mkdir(const char *path,
1157  XrdSfsMode mode,
1158  XrdOucErrInfo &eInfo,
1159  const XrdSecEntity *client = 0,
1160  const char *opaque = 0) = 0;
1161 
1162 //-----------------------------------------------------------------------------
1170 //-----------------------------------------------------------------------------
1171 
1172 virtual int prepare( XrdSfsPrep &pargs,
1173  XrdOucErrInfo &eInfo,
1174  const XrdSecEntity *client = 0) = 0;
1175 
1176 //-----------------------------------------------------------------------------
1185 //-----------------------------------------------------------------------------
1186 
1187 virtual int rem(const char *path,
1188  XrdOucErrInfo &eInfo,
1189  const XrdSecEntity *client = 0,
1190  const char *opaque = 0) = 0;
1191 
1192 //-----------------------------------------------------------------------------
1201 //-----------------------------------------------------------------------------
1202 
1203 virtual int remdir(const char *path,
1204  XrdOucErrInfo &eInfo,
1205  const XrdSecEntity *client = 0,
1206  const char *opaque = 0) = 0;
1207 
1208 //-----------------------------------------------------------------------------
1219 //-----------------------------------------------------------------------------
1220 
1221 virtual int rename(const char *oPath,
1222  const char *nPath,
1223  XrdOucErrInfo &eInfo,
1224  const XrdSecEntity *client = 0,
1225  const char *opaqueO = 0,
1226  const char *opaqueN = 0) = 0;
1227 
1228 //-----------------------------------------------------------------------------
1239 //-----------------------------------------------------------------------------
1240 
1241 virtual int stat(const char *Name,
1242  struct stat *buf,
1243  XrdOucErrInfo &eInfo,
1244  const XrdSecEntity *client = 0,
1245  const char *opaque = 0) = 0;
1246 
1247 //-----------------------------------------------------------------------------
1259 //-----------------------------------------------------------------------------
1260 
1261 virtual int stat(const char *path,
1262  mode_t &mode,
1263  XrdOucErrInfo &eInfo,
1264  const XrdSecEntity *client = 0,
1265  const char *opaque = 0) = 0;
1266 
1267 //-----------------------------------------------------------------------------
1277 //-----------------------------------------------------------------------------
1278 
1279 virtual int truncate(const char *path,
1280  XrdSfsFileOffset fsize,
1281  XrdOucErrInfo &eInfo,
1282  const XrdSecEntity *client = 0,
1283  const char *opaque = 0) = 0;
1284 
1285 //-----------------------------------------------------------------------------
1287 //-----------------------------------------------------------------------------
1288 
1289  XrdSfsFileSystem();
1290 virtual ~XrdSfsFileSystem() {}
1291 
1292 protected:
1293 
1294 uint64_t FeatureSet;
1295 };
1296 
1297 /******************************************************************************/
1298 /* F i l e S y s t e m I n s t a n t i a t o r */
1299 /******************************************************************************/
1300 
1301 //-----------------------------------------------------------------------------
1324 typedef XrdSfsFileSystem *(*XrdSfsFileSystem2_t)(XrdSfsFileSystem *nativeFS,
1325  XrdSysLogger *Logger,
1326  const char *configFn,
1327  XrdOucEnv *envP);
1328 
1329 //-----------------------------------------------------------------------------
1341 typedef XrdSfsFileSystem *(*XrdSfsFileSystem_t) (XrdSfsFileSystem *nativeFS,
1342  XrdSysLogger *Logger,
1343  const char *configFn);
1344 
1345 //------------------------------------------------------------------------------
1357 //------------------------------------------------------------------------------
1358 #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:432
int opts
Prep_xxx.
Definition: XrdSfsInterface.hh:171
#define truncate(a, b)
Definition: XrdPosix.hh:106
XrdSfsFile(const char *user=0, int MonID=0)
Definition: XrdSfsInterface.hh:776
XrdOucTList * oinfo
1-to-1 correspondence of opaque info
Definition: XrdSfsInterface.hh:173
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:430
virtual int checkpoint(cpAct act, struct iov *range=0, int n=0)
XrdSfsFileOffset pgwrEOF
Definition: XrdSfsInterface.hh:809
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:513
Return checkpoint limits.
Definition: XrdSfsInterface.hh:431
Create a checkpoint, one must not be active.
Definition: XrdSfsInterface.hh:428
const char * Arg1
PLUGIO, PLUGIN.
Definition: XrdSfsInterface.hh:161
int XrdSfsXferSize
Definition: XrdSfsInterface.hh:129
XrdOucErrInfo & error
Definition: XrdSfsInterface.hh:373
virtual const char * nextEntry()=0
char * notify
Notification path or 0.
Definition: XrdSfsInterface.hh:170
XrdSfsFileExistence
Definition: XrdSfsInterface.hh:131
virtual ~XrdSfsDirectory()
Destructor.
Definition: XrdSfsInterface.hh:344
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:238
XrdSfsDirectory(const char *user=0, int MonID=0)
Definition: XrdSfsInterface.hh:315
Definition: XrdOucIOVec.hh:65
long long XrdSfsFileOffset
Definition: XrdSfsInterface.hh:126
int Arg1Len
Length.
Definition: XrdSfsInterface.hh:162
XrdSfsDirectory(XrdSfsDirectory &wrapD)
Definition: XrdSfsInterface.hh:327
Definition: XrdSfsInterface.hh:133
< SFS_FSCTL_PLUGIN/PLUGIO parms
Definition: XrdSfsInterface.hh:159
Add data to an existing checkpoint.
Definition: XrdSfsInterface.hh:433
virtual void setXio(XrdSfsXio *xioP)
Definition: XrdSfsInterface.hh:763
virtual int stat(struct stat *buf)=0
Definition: XrdOucErrInfo.hh:100
Definition: XrdSfsInterface.hh:134
Definition: XrdSfsGPFile.hh:34
Definition: XrdSfsInterface.hh:136
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:798
const char * Arg2
PLUGIN opaque string.
Definition: XrdSfsInterface.hh:164
XrdSfsFile(XrdSfsFile &wrapF)
Definition: XrdSfsInterface.hh:788
Definition: XrdOucTList.hh:41
XrdOucErrInfo * lclEI
Definition: XrdSfsInterface.hh:808
XrdOucTList * paths
List of paths.
Definition: XrdSfsInterface.hh:172
cpAct
Definition: XrdSfsInterface.hh:428
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:169
XrdOucErrInfo * lclEI
Definition: XrdSfsInterface.hh:347
int XrdSfsMode
Definition: XrdSfsInterface.hh:128
static const uint64_t NetOrder
pgR: output csvec in net byte order
Definition: XrdSfsInterface.hh:515
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.
Definition: XrdSfsInterface.hh:163
Definition: XrdSfsDio.hh:46
Definition: XrdSecEntity.hh:63
Definition: XrdSfsInterface.hh:137
Definition: XrdSfsAio.hh:58
Definition: XrdSfsInterface.hh:364
virtual ~XrdSfsFile()
Destructor.
Definition: XrdSfsInterface.hh:805
< Prepare parameters
Definition: XrdSfsInterface.hh:167
XrdOucErrInfo & error
Definition: XrdSfsInterface.hh:247
XrdSfsDirectory(XrdOucErrInfo &eInfo)
Definition: XrdSfsInterface.hh:337
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:127
Delete an existing checkpoint.
Definition: XrdSfsInterface.hh:429
Definition: XrdSfsXio.hh:54
Definition: XrdSfsInterface.hh:135