xrootd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
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 //-----------------------------------------------------------------------------
297 //-----------------------------------------------------------------------------
298 
299 virtual int autoStat(struct stat *buf);
300 
301 //-----------------------------------------------------------------------------
310 //-----------------------------------------------------------------------------
311 
312  XrdSfsDirectory(const char *user=0, int MonID=0)
313  : error(*(new XrdOucErrInfo(user, MonID)))
314  {lclEI = &error;}
315 
316 //-----------------------------------------------------------------------------
322 //-----------------------------------------------------------------------------
323 
325  : error(wrapD.error), lclEI(0) {}
326 
327 //-----------------------------------------------------------------------------
332 //-----------------------------------------------------------------------------
333 
335  : error(eInfo), lclEI(0) {}
336 
337 //-----------------------------------------------------------------------------
339 //-----------------------------------------------------------------------------
340 
341 virtual ~XrdSfsDirectory() {if (lclEI) delete lclEI;}
342 
343 private:
345 
346 }; // class XrdSfsDirectory
347 
348 /******************************************************************************/
349 /* X r d S f s F i l e */
350 /******************************************************************************/
351 
352 //------------------------------------------------------------------------------
355 //------------------------------------------------------------------------------
356 
357 class XrdSfsAio;
358 class XrdSfsDio;
359 class XrdSfsXio;
360 
362 {
363 public:
364 
365 //-----------------------------------------------------------------------------
368 //-----------------------------------------------------------------------------
369 
371 
372 //-----------------------------------------------------------------------------
394 //-----------------------------------------------------------------------------
395 
396 virtual int open(const char *fileName,
397  XrdSfsFileOpenMode openMode,
398  mode_t createMode,
399  const XrdSecEntity *client = 0,
400  const char *opaque = 0) = 0;
401 
402 //-----------------------------------------------------------------------------
410 //-----------------------------------------------------------------------------
411 
412 enum cpAct {cpCreate=0,
415  };
416 
417 virtual int checkpoint(cpAct act, struct iov *range=0, int n=0);
418 
419 //-----------------------------------------------------------------------------
423 //-----------------------------------------------------------------------------
424 
425 virtual int close() = 0;
426 
427 //-----------------------------------------------------------------------------
444 //-----------------------------------------------------------------------------
445 
446 virtual int fctl(const int cmd,
447  const char *args,
448  XrdOucErrInfo &eInfo) = 0;
449 
450 //-----------------------------------------------------------------------------
463 //-----------------------------------------------------------------------------
464 
465 virtual int fctl(const int cmd,
466  int alen,
467  const char *args,
468  const XrdSecEntity *client = 0);
469 
470 //-----------------------------------------------------------------------------
474 //-----------------------------------------------------------------------------
475 
476 virtual const char *FName() = 0;
477 
478 //-----------------------------------------------------------------------------
485 //-----------------------------------------------------------------------------
486 
487 virtual int getMmap(void **Addr, off_t &Size) = 0;
488 
489 //-----------------------------------------------------------------------------
491 //-----------------------------------------------------------------------------
492 
493 static const uint64_t
494 Verify = 0x8000000000000000ULL;
495 static const uint64_t
496 NetOrder = 0x4000000000000000ULL;
497 
498 //-----------------------------------------------------------------------------
513 //-----------------------------------------------------------------------------
514 
515 virtual XrdSfsXferSize pgRead(XrdSfsFileOffset offset,
516  char *buffer,
517  XrdSfsXferSize rdlen,
518  uint32_t *csvec,
519  uint64_t opts=0);
520 
521 //-----------------------------------------------------------------------------
529 //-----------------------------------------------------------------------------
530 
531 virtual int pgRead(XrdSfsAio *aioparm, uint64_t opts=0);
532 
533 //-----------------------------------------------------------------------------
549 //-----------------------------------------------------------------------------
550 
552  char *buffer,
553  XrdSfsXferSize wrlen,
554  uint32_t *csvec,
555  uint64_t opts=0);
556 
557 //-----------------------------------------------------------------------------
565 //-----------------------------------------------------------------------------
566 
567 virtual int pgWrite(XrdSfsAio *aioparm, uint64_t opts=0);
568 
569 //-----------------------------------------------------------------------------
577 //-----------------------------------------------------------------------------
578 
579 virtual XrdSfsXferSize read(XrdSfsFileOffset offset,
580  XrdSfsXferSize size) = 0;
581 
582 //-----------------------------------------------------------------------------
591 //-----------------------------------------------------------------------------
592 
593 virtual XrdSfsXferSize read(XrdSfsFileOffset offset,
594  char *buffer,
595  XrdSfsXferSize size) = 0;
596 
597 //-----------------------------------------------------------------------------
604 //-----------------------------------------------------------------------------
605 
606 virtual int read(XrdSfsAio *aioparm) = 0;
607 
608 //-----------------------------------------------------------------------------
618 //-----------------------------------------------------------------------------
619 
620 virtual XrdSfsXferSize readv(XrdOucIOVec *readV,
621  int rdvCnt);
622 
623 //-----------------------------------------------------------------------------
633 //-----------------------------------------------------------------------------
634 
635 virtual int SendData(XrdSfsDio *sfDio,
636  XrdSfsFileOffset offset,
637  XrdSfsXferSize size);
638 
639 //-----------------------------------------------------------------------------
648 //-----------------------------------------------------------------------------
649 
650 virtual XrdSfsXferSize write(XrdSfsFileOffset offset,
651  const char *buffer,
652  XrdSfsXferSize size) = 0;
653 
654 //-----------------------------------------------------------------------------
661 //-----------------------------------------------------------------------------
662 
663 virtual int write(XrdSfsAio *aioparm) = 0;
664 
665 //-----------------------------------------------------------------------------
675 //-----------------------------------------------------------------------------
676 
677 virtual XrdSfsXferSize writev(XrdOucIOVec *writeV,
678  int wdvCnt);
679 
680 //-----------------------------------------------------------------------------
687 //-----------------------------------------------------------------------------
688 
689 virtual int stat(struct stat *buf) = 0;
690 
691 //-----------------------------------------------------------------------------
695 //-----------------------------------------------------------------------------
696 
697 virtual int sync() = 0;
698 
699 //-----------------------------------------------------------------------------
704 //-----------------------------------------------------------------------------
705 
706 virtual int sync(XrdSfsAio *aiop) = 0;
707 
708 //-----------------------------------------------------------------------------
714 //-----------------------------------------------------------------------------
715 
716 virtual int truncate(XrdSfsFileOffset fsize) = 0;
717 
718 //-----------------------------------------------------------------------------
726 //-----------------------------------------------------------------------------
727 
728 virtual int getCXinfo(char cxtype[4], int &cxrsz) = 0;
729 
730 //-----------------------------------------------------------------------------
734 //-----------------------------------------------------------------------------
735 
736 virtual void setXio(XrdSfsXio *xioP) { (void)xioP; }
737 
738 //-----------------------------------------------------------------------------
747 //-----------------------------------------------------------------------------
748 
749  XrdSfsFile(const char *user=0, int MonID=0)
750  : error(*(new XrdOucErrInfo(user, MonID)))
751  {lclEI = &error; pgwrEOF = 0;}
752 
753 //-----------------------------------------------------------------------------
759 //-----------------------------------------------------------------------------
760 
762  : error(wrapF.error), lclEI(0), pgwrEOF(0) {}
763 
764 //-----------------------------------------------------------------------------
769 //-----------------------------------------------------------------------------
770 
772  : error(eInfo), lclEI(0), pgwrEOF(0) {}
773 
774 //-----------------------------------------------------------------------------
776 //-----------------------------------------------------------------------------
777 
778 virtual ~XrdSfsFile() {if (lclEI) delete lclEI;}
779 
780 private:
783 }; // class XrdSfsFile
784 
785 /******************************************************************************/
786 /* X r d S f s F i l e S y s t e m */
787 /******************************************************************************/
788 
789 //-----------------------------------------------------------------------------
813 //-----------------------------------------------------------------------------
814 
815 class XrdSfsFileSystem
816 {
817 public:
818 
819 //-----------------------------------------------------------------------------
829 //-----------------------------------------------------------------------------
830 
831 virtual XrdSfsDirectory *newDir(char *user=0, int MonID=0) = 0;
832 
833 //-----------------------------------------------------------------------------
844 //-----------------------------------------------------------------------------
845 
846 virtual XrdSfsDirectory *newDir(XrdOucErrInfo &eInfo) {(void)eInfo; return 0;}
847 
848 //-----------------------------------------------------------------------------
858 //-----------------------------------------------------------------------------
859 
860 virtual XrdSfsFile *newFile(char *user=0, int MonID=0) = 0;
861 
862 //-----------------------------------------------------------------------------
873 //-----------------------------------------------------------------------------
874 
875 virtual XrdSfsFile *newFile(XrdOucErrInfo &eInfo) {(void)eInfo; return 0;}
876 
877 //-----------------------------------------------------------------------------
896 //-----------------------------------------------------------------------------
897 
898 enum csFunc {csCalc = 0, csGet, csSize};
899 
900 virtual int chksum( csFunc Func,
901  const char *csName,
902  const char *path,
903  XrdOucErrInfo &eInfo,
904  const XrdSecEntity *client = 0,
905  const char *opaque = 0);
906 
907 //-----------------------------------------------------------------------------
917 //-----------------------------------------------------------------------------
918 
919 virtual int chmod(const char *path,
920  XrdSfsMode mode,
921  XrdOucErrInfo &eInfo,
922  const XrdSecEntity *client = 0,
923  const char *opaque = 0) = 0;
924 
925 //-----------------------------------------------------------------------------
929 //-----------------------------------------------------------------------------
930 
931 virtual void Connect(const XrdSecEntity *client = 0)
932 {
933  (void)client;
934 }
935 
936 //-----------------------------------------------------------------------------
940 //-----------------------------------------------------------------------------
941 
942 virtual void Disc(const XrdSecEntity *client = 0) {(void)client;}
943 
944 //-----------------------------------------------------------------------------
949 //-----------------------------------------------------------------------------
950 
951 virtual void EnvInfo(XrdOucEnv *envP) {(void)envP;}
952 
953 //-----------------------------------------------------------------------------
969 //-----------------------------------------------------------------------------
970 
971 virtual int exists(const char *path,
972  XrdSfsFileExistence &eFlag,
973  XrdOucErrInfo &eInfo,
974  const XrdSecEntity *client = 0,
975  const char *opaque = 0) = 0;
976 
977 //-----------------------------------------------------------------------------
991 //-----------------------------------------------------------------------------
992 
993 virtual int FAttr( XrdSfsFACtl *faReq,
994  XrdOucErrInfo &eInfo,
995  const XrdSecEntity *client = 0);
996 
997 //-----------------------------------------------------------------------------
1002 //-----------------------------------------------------------------------------
1003 
1004  uint64_t Features() {return FeatureSet;}
1005 
1006 //-----------------------------------------------------------------------------
1022 //-----------------------------------------------------------------------------
1023 
1024 virtual int FSctl(const int cmd,
1025  XrdSfsFSctl &args,
1026  XrdOucErrInfo &eInfo,
1027  const XrdSecEntity *client = 0);
1028 
1029 //-----------------------------------------------------------------------------
1057 //-----------------------------------------------------------------------------
1058 
1059 virtual int fsctl(const int cmd,
1060  const char *args,
1061  XrdOucErrInfo &eInfo,
1062  const XrdSecEntity *client = 0) = 0;
1063 
1064 //-----------------------------------------------------------------------------
1068 //-----------------------------------------------------------------------------
1069 
1070 virtual int getChkPSize() {return 0;}
1071 
1072 //-----------------------------------------------------------------------------
1082 //-----------------------------------------------------------------------------
1083 
1084 virtual int getStats(char *buff, int blen) = 0;
1085 
1086 //-----------------------------------------------------------------------------
1090 //-----------------------------------------------------------------------------
1091 
1092 virtual const char *getVersion() = 0;
1093 
1094 //-----------------------------------------------------------------------------
1105 //-----------------------------------------------------------------------------
1106 
1107 enum gpfFunc {gpfCancel=0,
1108  gpfGet,
1109  gpfPut
1110  };
1111 
1112 virtual int gpFile( gpfFunc &gpAct,
1113  XrdSfsGPFile &gpReq,
1114  XrdOucErrInfo &eInfo,
1115  const XrdSecEntity *client = 0);
1116 
1117 //-----------------------------------------------------------------------------
1127 //-----------------------------------------------------------------------------
1128 
1129 virtual int mkdir(const char *path,
1130  XrdSfsMode mode,
1131  XrdOucErrInfo &eInfo,
1132  const XrdSecEntity *client = 0,
1133  const char *opaque = 0) = 0;
1134 
1135 //-----------------------------------------------------------------------------
1143 //-----------------------------------------------------------------------------
1144 
1145 virtual int prepare( XrdSfsPrep &pargs,
1146  XrdOucErrInfo &eInfo,
1147  const XrdSecEntity *client = 0) = 0;
1148 
1149 //-----------------------------------------------------------------------------
1158 //-----------------------------------------------------------------------------
1159 
1160 virtual int rem(const char *path,
1161  XrdOucErrInfo &eInfo,
1162  const XrdSecEntity *client = 0,
1163  const char *opaque = 0) = 0;
1164 
1165 //-----------------------------------------------------------------------------
1174 //-----------------------------------------------------------------------------
1175 
1176 virtual int remdir(const char *path,
1177  XrdOucErrInfo &eInfo,
1178  const XrdSecEntity *client = 0,
1179  const char *opaque = 0) = 0;
1180 
1181 //-----------------------------------------------------------------------------
1192 //-----------------------------------------------------------------------------
1193 
1194 virtual int rename(const char *oPath,
1195  const char *nPath,
1196  XrdOucErrInfo &eInfo,
1197  const XrdSecEntity *client = 0,
1198  const char *opaqueO = 0,
1199  const char *opaqueN = 0) = 0;
1200 
1201 //-----------------------------------------------------------------------------
1212 //-----------------------------------------------------------------------------
1213 
1214 virtual int stat(const char *Name,
1215  struct stat *buf,
1216  XrdOucErrInfo &eInfo,
1217  const XrdSecEntity *client = 0,
1218  const char *opaque = 0) = 0;
1219 
1220 //-----------------------------------------------------------------------------
1232 //-----------------------------------------------------------------------------
1233 
1234 virtual int stat(const char *path,
1235  mode_t &mode,
1236  XrdOucErrInfo &eInfo,
1237  const XrdSecEntity *client = 0,
1238  const char *opaque = 0) = 0;
1239 
1240 //-----------------------------------------------------------------------------
1250 //-----------------------------------------------------------------------------
1251 
1252 virtual int truncate(const char *path,
1253  XrdSfsFileOffset fsize,
1254  XrdOucErrInfo &eInfo,
1255  const XrdSecEntity *client = 0,
1256  const char *opaque = 0) = 0;
1257 
1258 //-----------------------------------------------------------------------------
1260 //-----------------------------------------------------------------------------
1261 
1262  XrdSfsFileSystem();
1263 virtual ~XrdSfsFileSystem() {}
1264 
1265 protected:
1266 
1267 uint64_t FeatureSet;
1268 };
1269 
1270 /******************************************************************************/
1271 /* F i l e S y s t e m I n s t a n t i a t o r */
1272 /******************************************************************************/
1273 
1274 //-----------------------------------------------------------------------------
1297 typedef XrdSfsFileSystem *(*XrdSfsFileSystem2_t)(XrdSfsFileSystem *nativeFS,
1298  XrdSysLogger *Logger,
1299  const char *configFn,
1300  XrdOucEnv *envP);
1301 
1302 //-----------------------------------------------------------------------------
1314 typedef XrdSfsFileSystem *(*XrdSfsFileSystem_t) (XrdSfsFileSystem *nativeFS,
1315  XrdSysLogger *Logger,
1316  const char *configFn);
1317 
1318 //------------------------------------------------------------------------------
1330 //------------------------------------------------------------------------------
1331 #endif
virtual int SendData(XrdSfsDio *sfDio, XrdSfsFileOffset offset, XrdSfsXferSize size)
#define rename(a, b)
Definition: XrdPosix.hh:87
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:749
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:414
virtual int checkpoint(cpAct act, struct iov *range=0, int n=0)
XrdSfsFileOffset pgwrEOF
Definition: XrdSfsInterface.hh:782
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:494
Create a checkpoint, one must not be active.
Definition: XrdSfsInterface.hh:412
const char * Arg1
PLUGIO, PLUGIN.
Definition: XrdSfsInterface.hh:161
int XrdSfsXferSize
Definition: XrdSfsInterface.hh:129
XrdOucErrInfo & error
Definition: XrdSfsInterface.hh:370
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:341
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:312
long long XrdSfsFileOffset
Definition: XrdSfsInterface.hh:126
int Arg1Len
Length.
Definition: XrdSfsInterface.hh:162
XrdSfsDirectory(XrdSfsDirectory &wrapD)
Definition: XrdSfsInterface.hh:324
Definition: XrdSfsInterface.hh:133
&lt; SFS_FSCTL_PLUGIN/PLUGIO parms
Definition: XrdSfsInterface.hh:159
virtual void setXio(XrdSfsXio *xioP)
Definition: XrdSfsInterface.hh:736
virtual int stat(struct stat *buf)=0
Definition: XrdOucErrInfo.hh:98
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:771
const char * Arg2
PLUGIN opaque string.
Definition: XrdSfsInterface.hh:164
XrdSfsFile(XrdSfsFile &wrapF)
Definition: XrdSfsInterface.hh:761
Definition: XrdOucTList.hh:41
XrdOucErrInfo * lclEI
Definition: XrdSfsInterface.hh:781
XrdOucTList * paths
List of paths.
Definition: XrdSfsInterface.hh:172
cpAct
Definition: XrdSfsInterface.hh:412
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:344
int XrdSfsMode
Definition: XrdSfsInterface.hh:128
static const uint64_t NetOrder
all: bytes in/out in net byte order
Definition: XrdSfsInterface.hh:496
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:361
virtual ~XrdSfsFile()
Destructor.
Definition: XrdSfsInterface.hh:778
&lt; Prepare parameters
Definition: XrdSfsInterface.hh:167
XrdOucErrInfo & error
Definition: XrdSfsInterface.hh:247
XrdSfsDirectory(XrdOucErrInfo &eInfo)
Definition: XrdSfsInterface.hh:334
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:413
Definition: XrdSfsXio.hh:54
Definition: XrdSfsInterface.hh:135