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 
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 
515 //-----------------------------------------------------------------------------
534 //-----------------------------------------------------------------------------
535 
536 virtual XrdSfsXferSize pgRead(XrdSfsFileOffset offset,
537  char *buffer,
538  XrdSfsXferSize rdlen,
539  uint32_t *csvec,
540  uint64_t opts=0);
541 
542 //-----------------------------------------------------------------------------
550 //-----------------------------------------------------------------------------
551 
552 virtual int pgRead(XrdSfsAio *aioparm, uint64_t opts=0);
553 
554 //-----------------------------------------------------------------------------
574 //-----------------------------------------------------------------------------
575 
577  char *buffer,
578  XrdSfsXferSize wrlen,
579  uint32_t *csvec,
580  uint64_t opts=0);
581 
582 //-----------------------------------------------------------------------------
590 //-----------------------------------------------------------------------------
591 
592 virtual int pgWrite(XrdSfsAio *aioparm, uint64_t opts=0);
593 
594 //-----------------------------------------------------------------------------
602 //-----------------------------------------------------------------------------
603 
604 virtual XrdSfsXferSize read(XrdSfsFileOffset offset,
605  XrdSfsXferSize size) = 0;
606 
607 //-----------------------------------------------------------------------------
616 //-----------------------------------------------------------------------------
617 
618 virtual XrdSfsXferSize read(XrdSfsFileOffset offset,
619  char *buffer,
620  XrdSfsXferSize size) = 0;
621 
622 //-----------------------------------------------------------------------------
629 //-----------------------------------------------------------------------------
630 
631 virtual int read(XrdSfsAio *aioparm) = 0;
632 
633 //-----------------------------------------------------------------------------
643 //-----------------------------------------------------------------------------
644 
645 virtual XrdSfsXferSize readv(XrdOucIOVec *readV,
646  int rdvCnt);
647 
648 //-----------------------------------------------------------------------------
658 //-----------------------------------------------------------------------------
659 
660 virtual int SendData(XrdSfsDio *sfDio,
661  XrdSfsFileOffset offset,
662  XrdSfsXferSize size);
663 
664 //-----------------------------------------------------------------------------
673 //-----------------------------------------------------------------------------
674 
675 virtual XrdSfsXferSize write(XrdSfsFileOffset offset,
676  const char *buffer,
677  XrdSfsXferSize size) = 0;
678 
679 //-----------------------------------------------------------------------------
686 //-----------------------------------------------------------------------------
687 
688 virtual int write(XrdSfsAio *aioparm) = 0;
689 
690 //-----------------------------------------------------------------------------
700 //-----------------------------------------------------------------------------
701 
702 virtual XrdSfsXferSize writev(XrdOucIOVec *writeV,
703  int wdvCnt);
704 
705 //-----------------------------------------------------------------------------
712 //-----------------------------------------------------------------------------
713 
714 virtual int stat(struct stat *buf) = 0;
715 
716 //-----------------------------------------------------------------------------
720 //-----------------------------------------------------------------------------
721 
722 virtual int sync() = 0;
723 
724 //-----------------------------------------------------------------------------
729 //-----------------------------------------------------------------------------
730 
731 virtual int sync(XrdSfsAio *aiop) = 0;
732 
733 //-----------------------------------------------------------------------------
739 //-----------------------------------------------------------------------------
740 
741 virtual int truncate(XrdSfsFileOffset fsize) = 0;
742 
743 //-----------------------------------------------------------------------------
751 //-----------------------------------------------------------------------------
752 
753 virtual int getCXinfo(char cxtype[4], int &cxrsz) = 0;
754 
755 //-----------------------------------------------------------------------------
759 //-----------------------------------------------------------------------------
760 
761 virtual void setXio(XrdSfsXio *xioP) { (void)xioP; }
762 
763 //-----------------------------------------------------------------------------
772 //-----------------------------------------------------------------------------
773 
774  XrdSfsFile(const char *user=0, int MonID=0)
775  : error(*(new XrdOucErrInfo(user, MonID)))
776  {lclEI = &error; pgwrEOF = 0;}
777 
778 //-----------------------------------------------------------------------------
784 //-----------------------------------------------------------------------------
785 
787  : error(wrapF.error), lclEI(0), pgwrEOF(0) {}
788 
789 //-----------------------------------------------------------------------------
794 //-----------------------------------------------------------------------------
795 
797  : error(eInfo), lclEI(0), pgwrEOF(0) {}
798 
799 //-----------------------------------------------------------------------------
801 //-----------------------------------------------------------------------------
802 
803 virtual ~XrdSfsFile() {if (lclEI) delete lclEI;}
804 
805 private:
808 }; // class XrdSfsFile
809 
810 /******************************************************************************/
811 /* X r d S f s F i l e S y s t e m */
812 /******************************************************************************/
813 
814 //-----------------------------------------------------------------------------
838 //-----------------------------------------------------------------------------
839 
840 class XrdSfsFileSystem
841 {
842 public:
843 
844 //-----------------------------------------------------------------------------
854 //-----------------------------------------------------------------------------
855 
856 virtual XrdSfsDirectory *newDir(char *user=0, int MonID=0) = 0;
857 
858 //-----------------------------------------------------------------------------
869 //-----------------------------------------------------------------------------
870 
871 virtual XrdSfsDirectory *newDir(XrdOucErrInfo &eInfo) {(void)eInfo; return 0;}
872 
873 //-----------------------------------------------------------------------------
883 //-----------------------------------------------------------------------------
884 
885 virtual XrdSfsFile *newFile(char *user=0, int MonID=0) = 0;
886 
887 //-----------------------------------------------------------------------------
898 //-----------------------------------------------------------------------------
899 
900 virtual XrdSfsFile *newFile(XrdOucErrInfo &eInfo) {(void)eInfo; return 0;}
901 
902 //-----------------------------------------------------------------------------
921 //-----------------------------------------------------------------------------
922 
923 enum csFunc {csCalc = 0, csGet, csSize};
924 
925 virtual int chksum( csFunc Func,
926  const char *csName,
927  const char *path,
928  XrdOucErrInfo &eInfo,
929  const XrdSecEntity *client = 0,
930  const char *opaque = 0);
931 
932 //-----------------------------------------------------------------------------
942 //-----------------------------------------------------------------------------
943 
944 virtual int chmod(const char *path,
945  XrdSfsMode mode,
946  XrdOucErrInfo &eInfo,
947  const XrdSecEntity *client = 0,
948  const char *opaque = 0) = 0;
949 
950 //-----------------------------------------------------------------------------
954 //-----------------------------------------------------------------------------
955 
956 virtual void Connect(const XrdSecEntity *client = 0)
957 {
958  (void)client;
959 }
960 
961 //-----------------------------------------------------------------------------
965 //-----------------------------------------------------------------------------
966 
967 virtual void Disc(const XrdSecEntity *client = 0) {(void)client;}
968 
969 //-----------------------------------------------------------------------------
974 //-----------------------------------------------------------------------------
975 
976 virtual void EnvInfo(XrdOucEnv *envP) {(void)envP;}
977 
978 //-----------------------------------------------------------------------------
994 //-----------------------------------------------------------------------------
995 
996 virtual int exists(const char *path,
997  XrdSfsFileExistence &eFlag,
998  XrdOucErrInfo &eInfo,
999  const XrdSecEntity *client = 0,
1000  const char *opaque = 0) = 0;
1001 
1002 //-----------------------------------------------------------------------------
1016 //-----------------------------------------------------------------------------
1017 
1018 virtual int FAttr( XrdSfsFACtl *faReq,
1019  XrdOucErrInfo &eInfo,
1020  const XrdSecEntity *client = 0);
1021 
1022 //-----------------------------------------------------------------------------
1027 //-----------------------------------------------------------------------------
1028 
1029  uint64_t Features() {return FeatureSet;}
1030 
1031 //-----------------------------------------------------------------------------
1047 //-----------------------------------------------------------------------------
1048 
1049 virtual int FSctl(const int cmd,
1050  XrdSfsFSctl &args,
1051  XrdOucErrInfo &eInfo,
1052  const XrdSecEntity *client = 0);
1053 
1054 //-----------------------------------------------------------------------------
1082 //-----------------------------------------------------------------------------
1083 
1084 virtual int fsctl(const int cmd,
1085  const char *args,
1086  XrdOucErrInfo &eInfo,
1087  const XrdSecEntity *client = 0) = 0;
1088 
1089 //-----------------------------------------------------------------------------
1093 //-----------------------------------------------------------------------------
1094 
1095 virtual int getChkPSize() {return 0;}
1096 
1097 //-----------------------------------------------------------------------------
1107 //-----------------------------------------------------------------------------
1108 
1109 virtual int getStats(char *buff, int blen) = 0;
1110 
1111 //-----------------------------------------------------------------------------
1115 //-----------------------------------------------------------------------------
1116 
1117 virtual const char *getVersion() = 0;
1118 
1119 //-----------------------------------------------------------------------------
1130 //-----------------------------------------------------------------------------
1131 
1132 enum gpfFunc {gpfCancel=0,
1133  gpfGet,
1134  gpfPut
1135  };
1136 
1137 virtual int gpFile( gpfFunc &gpAct,
1138  XrdSfsGPFile &gpReq,
1139  XrdOucErrInfo &eInfo,
1140  const XrdSecEntity *client = 0);
1141 
1142 //-----------------------------------------------------------------------------
1152 //-----------------------------------------------------------------------------
1153 
1154 virtual int mkdir(const char *path,
1155  XrdSfsMode mode,
1156  XrdOucErrInfo &eInfo,
1157  const XrdSecEntity *client = 0,
1158  const char *opaque = 0) = 0;
1159 
1160 //-----------------------------------------------------------------------------
1168 //-----------------------------------------------------------------------------
1169 
1170 virtual int prepare( XrdSfsPrep &pargs,
1171  XrdOucErrInfo &eInfo,
1172  const XrdSecEntity *client = 0) = 0;
1173 
1174 //-----------------------------------------------------------------------------
1183 //-----------------------------------------------------------------------------
1184 
1185 virtual int rem(const char *path,
1186  XrdOucErrInfo &eInfo,
1187  const XrdSecEntity *client = 0,
1188  const char *opaque = 0) = 0;
1189 
1190 //-----------------------------------------------------------------------------
1199 //-----------------------------------------------------------------------------
1200 
1201 virtual int remdir(const char *path,
1202  XrdOucErrInfo &eInfo,
1203  const XrdSecEntity *client = 0,
1204  const char *opaque = 0) = 0;
1205 
1206 //-----------------------------------------------------------------------------
1217 //-----------------------------------------------------------------------------
1218 
1219 virtual int rename(const char *oPath,
1220  const char *nPath,
1221  XrdOucErrInfo &eInfo,
1222  const XrdSecEntity *client = 0,
1223  const char *opaqueO = 0,
1224  const char *opaqueN = 0) = 0;
1225 
1226 //-----------------------------------------------------------------------------
1237 //-----------------------------------------------------------------------------
1238 
1239 virtual int stat(const char *Name,
1240  struct stat *buf,
1241  XrdOucErrInfo &eInfo,
1242  const XrdSecEntity *client = 0,
1243  const char *opaque = 0) = 0;
1244 
1245 //-----------------------------------------------------------------------------
1257 //-----------------------------------------------------------------------------
1258 
1259 virtual int stat(const char *path,
1260  mode_t &mode,
1261  XrdOucErrInfo &eInfo,
1262  const XrdSecEntity *client = 0,
1263  const char *opaque = 0) = 0;
1264 
1265 //-----------------------------------------------------------------------------
1275 //-----------------------------------------------------------------------------
1276 
1277 virtual int truncate(const char *path,
1278  XrdSfsFileOffset fsize,
1279  XrdOucErrInfo &eInfo,
1280  const XrdSecEntity *client = 0,
1281  const char *opaque = 0) = 0;
1282 
1283 //-----------------------------------------------------------------------------
1285 //-----------------------------------------------------------------------------
1286 
1287  XrdSfsFileSystem();
1288 virtual ~XrdSfsFileSystem() {}
1289 
1290 protected:
1291 
1292 uint64_t FeatureSet;
1293 };
1294 
1295 /******************************************************************************/
1296 /* F i l e S y s t e m I n s t a n t i a t o r */
1297 /******************************************************************************/
1298 
1299 //-----------------------------------------------------------------------------
1322 typedef XrdSfsFileSystem *(*XrdSfsFileSystem2_t)(XrdSfsFileSystem *nativeFS,
1323  XrdSysLogger *Logger,
1324  const char *configFn,
1325  XrdOucEnv *envP);
1326 
1327 //-----------------------------------------------------------------------------
1339 typedef XrdSfsFileSystem *(*XrdSfsFileSystem_t) (XrdSfsFileSystem *nativeFS,
1340  XrdSysLogger *Logger,
1341  const char *configFn);
1342 
1343 //------------------------------------------------------------------------------
1355 //------------------------------------------------------------------------------
1356 #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:774
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:807
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
&lt; 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:761
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:796
j template void())
Definition: XrdOucJson.hh:4121
const char * Arg2
PLUGIN opaque string.
Definition: XrdSfsInterface.hh:164
XrdSfsFile(XrdSfsFile &wrapF)
Definition: XrdSfsInterface.hh:786
Definition: XrdOucTList.hh:41
XrdOucErrInfo * lclEI
Definition: XrdSfsInterface.hh:806
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
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:803
&lt; 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