XRootD
XrdPss.hh
Go to the documentation of this file.
1 #ifndef _XRDPSS_API_H
2 #define _XRDPSS_API_H
3 /******************************************************************************/
4 /* */
5 /* X r d P s s . h h */
6 /* */
7 /* (c) 2010 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* All Rights Reserved */
9 /* Produced by Andrew Hanushevsky for Stanford University under contract */
10 /* DE-AC02-76-SFO0515 with the Department of Energy */
11 /* */
12 /* This file is part of the XRootD software suite. */
13 /* */
14 /* XRootD is free software: you can redistribute it and/or modify it under */
15 /* the terms of the GNU Lesser General Public License as published by the */
16 /* Free Software Foundation, either version 3 of the License, or (at your */
17 /* option) any later version. */
18 /* */
19 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
20 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
21 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
22 /* License for more details. */
23 /* */
24 /* You should have received a copy of the GNU Lesser General Public License */
25 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
26 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
27 /* */
28 /* The copyright holder's institutional names and contributor's names may not */
29 /* be used to endorse or promote products derived from this software without */
30 /* specific prior written permission of the institution or contributor. */
31 /******************************************************************************/
32 
33 #include <cerrno>
34 #include <unistd.h>
35 #include <sys/types.h>
36 #include <vector>
37 #include "XrdSys/XrdSysHeaders.hh"
38 #include "XrdOuc/XrdOucECMsg.hh"
39 #include "XrdOuc/XrdOucExport.hh"
41 #include "XrdOuc/XrdOucPList.hh"
42 #include "XrdOuc/XrdOucSid.hh"
43 #include "XrdOss/XrdOss.hh"
44 
45 /******************************************************************************/
46 /* X r d P s s D i r */
47 /******************************************************************************/
48 
49 class XrdPssDir : public XrdOssDF
50 {
51 public:
52 int Close(long long *retsz=0);
53 int Opendir(const char *, XrdOucEnv &);
54 int Readdir(char *buff, int blen);
55 
56  // Constructor and destructor
57  XrdPssDir(const char *tid)
59  myDir(0) {}
60 
61  ~XrdPssDir() {if (myDir) Close();}
62 private:
63  DIR *myDir;
64 };
65 
66 /******************************************************************************/
67 /* X r d P s s F i l e */
68 /******************************************************************************/
69 
70 struct XrdOucIOVec;
71 class XrdSecEntity;
72 class XrdSfsAio;
73 
74 class XrdPssFile : public XrdOssDF
75 {
76 public:
77 
78 // The following two are virtual functions to allow for upcasting derivations
79 // of this implementation
80 //
81 virtual int Close(long long *retsz=0);
82 virtual int Open(const char *, int, mode_t, XrdOucEnv &);
83 
84 int Fchmod(mode_t mode) {return XrdOssOK;}
85 int Fstat(struct stat *);
86 int Fsync();
87 int Fsync(XrdSfsAio *aiop);
88 int Ftruncate(unsigned long long);
89 ssize_t pgRead (void* buffer, off_t offset, size_t rdlen,
90  uint32_t* csvec, uint64_t opts);
91 int pgRead (XrdSfsAio* aioparm, uint64_t opts);
92 ssize_t pgWrite(void* buffer, off_t offset, size_t wrlen,
93  uint32_t* csvec, uint64_t opts);
94 int pgWrite(XrdSfsAio* aioparm, uint64_t opts);
95 ssize_t Read( off_t, size_t);
96 ssize_t Read( void *, off_t, size_t);
97 int Read(XrdSfsAio *aiop);
98 ssize_t ReadV(XrdOucIOVec *readV, int n);
99 ssize_t ReadRaw( void *, off_t, size_t);
100 ssize_t Write(const void *, off_t, size_t);
101 int Write(XrdSfsAio *aiop);
102 
103  // Constructor and destructor
104  XrdPssFile(const char *tid)
106  rpInfo(0), tpcPath(0), entity(0) {}
107 
108 virtual ~XrdPssFile() {if (fd >= 0) Close();
109  if (rpInfo) delete(rpInfo);
110  if (tpcPath) free(tpcPath);
111  }
112 
113 private:
114 
115 struct tprInfo
116  {char *tprPath;
117  char *dstURL;
118  size_t fSize;
119 
120  tprInfo(const char *fn) : tprPath(strdup(fn)),dstURL(0),fSize(0)
121  {}
122  ~tprInfo() {if (tprPath) free(tprPath);
123  if (dstURL) free(dstURL);
124  }
125  } *rpInfo;
126 
127  char *tpcPath;
128 const XrdSecEntity *entity;
129 };
130 
131 /******************************************************************************/
132 /* X r d P s s S y s */
133 /******************************************************************************/
134 
135 class XrdNetSecurity;
136 class XrdOucEnv;
137 class XrdOucStream;
138 class XrdOucTList;
139 class XrdPssUrlInfo;
140 class XrdSecsssID;
141 class XrdSysError;
142 
143 struct XrdVersionInfo;
144 
145 class XrdPssSys : public XrdOss
146 {
147 public:
148 virtual XrdOssDF *newDir(const char *tident) override
149  {return (XrdOssDF *)new XrdPssDir(tident);}
150 virtual XrdOssDF *newFile(const char *tident) override
151  {return (XrdOssDF *)new XrdPssFile(tident);}
152 
153 virtual void Connect(XrdOucEnv &) override;
154 
155 virtual void Disc(XrdOucEnv &) override;
156 
157 int Chmod(const char *, mode_t mode, XrdOucEnv *eP=0) override;
158 bool ConfigMapID();
159 virtual
160 int Create(const char *, const char *, mode_t, XrdOucEnv &, int opts=0) override;
161 void EnvInfo(XrdOucEnv *envP) override;
162 uint64_t Features() override {return myFeatures;}
163 int Init(XrdSysLogger *, const char *) override {return -ENOTSUP;}
164 int Init(XrdSysLogger *, const char *, XrdOucEnv *envP) override;
165 int Lfn2Pfn(const char *Path, char *buff, int blen) override;
166 const
167 char *Lfn2Pfn(const char *Path, char *buff, int blen, int &rc) override;
168 int Mkdir(const char *, mode_t mode, int mkpath=0, XrdOucEnv *eP=0) override;
169 int Remdir(const char *, int Opts=0, XrdOucEnv *eP=0) override;
170 int Rename(const char *, const char *,
171  XrdOucEnv *eP1=0, XrdOucEnv *eP2=0) override;
172 int Stat(const char *, struct stat *, int opts=0, XrdOucEnv *eP=0) override;
173 int Stats(char *bp, int bl) override;
174 int Truncate(const char *, unsigned long long, XrdOucEnv *eP=0) override;
175 int Unlink(const char *, int Opts=0, XrdOucEnv *eP=0) override;
176 
177 static const int PolNum = 2;
178 enum PolAct {PolPath = 0, PolObj = 1};
179 
180 static int Info(int rc);
181 static int P2DST(int &retc, char *hBuff, int hBlen, PolAct pType,
182  const char *path);
183 static int P2OUT(char *pbuff, int pblen, XrdPssUrlInfo &uInfo);
184 static int P2URL(char *pbuff, int pblen, XrdPssUrlInfo &uInfo,
185  bool doN2N=true);
186 
187 static const char *ConfigFN; // -> Pointer to the config file name
188 static const char *myHost;
189 static const char *myName;
190 static
191 XrdOucPListAnchor XPList; // Exported path list
192 
195 static char *fileOrgn;
196 static const char *protName;
197 static const char *hdrData;
198 static int hdrLen;
199 static int Streams;
200 static int Workers;
201 static int Trace;
202 static int dcaCTime;
203 
204 static bool xLfn2Pfn;
205 static bool dcaCheck;
206 static bool dcaWorld;
207 static bool deferID; // Defer ID mapping until needed
208 static bool reProxy; // TPC requires reproxing
209 
210  XrdPssSys();
211 virtual ~XrdPssSys() {}
212 
213 private:
214 
215 char *HostArena;// -> path qualification for remote origins
216 char *LocalRoot;// -> pss Local n2n root, if any
217 XrdOucName2Name *theN2N; // -> File mapper object
218 unsigned long long DirFlags; // Defaults for exports
219 XrdVersionInfo *myVersion;// -> Compilation version
220 XrdSecsssID *idMapper; // -> Auth ID mapper
221 uint64_t myFeatures;// Our feature set
222 
223 int Configure(const char *, XrdOucEnv *);
224 int ConfigProc(const char *ConfigFN);
225 int ConfigXeq(char*, XrdOucStream&);
226 int xconf(XrdSysError *Eroute, XrdOucStream &Config);
227 int xdef( XrdSysError *Eroute, XrdOucStream &Config);
228 int xdca( XrdSysError *errp, XrdOucStream &Config);
229 int xexp( XrdSysError *Eroute, XrdOucStream &Config);
230 int xperm(XrdSysError *errp, XrdOucStream &Config);
231 int xpers(XrdSysError *errp, XrdOucStream &Config);
232 int xorig(XrdSysError *errp, XrdOucStream &Config);
233 };
234 #endif
#define tident
#define XrdOssOK
Definition: XrdOss.hh:50
int stat(const char *path, struct stat *buf)
XrdOucString Path
struct myOpts opts
static const uint16_t DF_isFile
Object is for a file.
Definition: XrdOss.hh:393
int fd
Definition: XrdOss.hh:455
static const uint16_t DF_isDir
Object is for a directory.
Definition: XrdOss.hh:392
static const uint16_t DF_isProxy
Object is a proxy object.
Definition: XrdOss.hh:394
~XrdPssDir()
Definition: XrdPss.hh:61
int Close(long long *retsz=0)
Definition: XrdPss.cc:736
int Opendir(const char *, XrdOucEnv &)
Definition: XrdPss.cc:650
int Readdir(char *buff, int blen)
Definition: XrdPss.cc:707
XrdPssDir(const char *tid)
Definition: XrdPss.hh:57
ssize_t ReadRaw(void *, off_t, size_t)
Definition: XrdPss.cc:1133
int Fsync()
Definition: XrdPss.cc:1261
virtual ~XrdPssFile()
Definition: XrdPss.hh:108
virtual int Close(long long *retsz=0)
Definition: XrdPss.cc:907
virtual int Open(const char *, int, mode_t, XrdOucEnv &)
Definition: XrdPss.cc:771
ssize_t Read(off_t, size_t)
Definition: XrdPss.cc:1057
int Fstat(struct stat *)
Definition: XrdPss.cc:1175
int Fchmod(mode_t mode)
Definition: XrdPss.hh:84
ssize_t Write(const void *, off_t, size_t)
Definition: XrdPss.cc:1153
XrdPssFile(const char *tid)
Definition: XrdPss.hh:104
ssize_t ReadV(XrdOucIOVec *readV, int n)
Definition: XrdPss.cc:1095
ssize_t pgRead(void *buffer, off_t offset, size_t rdlen, uint32_t *csvec, uint64_t opts)
Definition: XrdPss.cc:948
int Ftruncate(unsigned long long)
Definition: XrdPss.cc:1290
ssize_t pgWrite(void *buffer, off_t offset, size_t wrlen, uint32_t *csvec, uint64_t opts)
Definition: XrdPss.cc:1001
virtual ~XrdPssSys()
Definition: XrdPss.hh:211
static const int PolNum
Definition: XrdPss.hh:177
virtual XrdOssDF * newFile(const char *tident) override
Definition: XrdPss.hh:150
int Mkdir(const char *, mode_t mode, int mkpath=0, XrdOucEnv *eP=0) override
Definition: XrdPss.cc:350
static int P2OUT(char *pbuff, int pblen, XrdPssUrlInfo &uInfo)
Definition: XrdPss.cc:1338
uint64_t Features() override
Definition: XrdPss.hh:162
static int dcaCTime
Definition: XrdPss.hh:202
int Unlink(const char *, int Opts=0, XrdOucEnv *eP=0) override
Definition: XrdPss.cc:600
static int Streams
Definition: XrdPss.hh:199
XrdPssSys()
Definition: XrdPss.cc:165
virtual void Connect(XrdOucEnv &) override
Definition: XrdPss.cc:234
int Truncate(const char *, unsigned long long, XrdOucEnv *eP=0) override
Definition: XrdPss.cc:559
int Stats(char *bp, int bl) override
Definition: XrdPss.cc:541
static int Info(int rc)
Definition: XrdPss.cc:1301
static bool deferID
Definition: XrdPss.hh:207
static const char * ConfigFN
Definition: XrdPss.hh:187
static int hdrLen
Definition: XrdPss.hh:198
static const char * hdrData
Definition: XrdPss.hh:197
int Stat(const char *, struct stat *, int opts=0, XrdOucEnv *eP=0) override
Definition: XrdPss.cc:490
int Init(XrdSysLogger *, const char *) override
Definition: XrdPss.hh:163
static XrdOucTList * ManList
Definition: XrdPss.hh:194
static char * fileOrgn
Definition: XrdPss.hh:195
static int P2DST(int &retc, char *hBuff, int hBlen, PolAct pType, const char *path)
Definition: XrdPss.cc:1311
static bool dcaCheck
Definition: XrdPss.hh:205
static bool reProxy
Definition: XrdPss.hh:208
int Chmod(const char *, mode_t mode, XrdOucEnv *eP=0) override
Definition: XrdPss.cc:223
static int Workers
Definition: XrdPss.hh:200
@ PolObj
Definition: XrdPss.hh:178
@ PolPath
Definition: XrdPss.hh:178
void EnvInfo(XrdOucEnv *envP) override
Definition: XrdPss.cc:303
static XrdNetSecurity * Police[PolNum]
Definition: XrdPss.hh:193
static const char * myName
Definition: XrdPss.hh:189
static int Trace
Definition: XrdPss.hh:201
bool ConfigMapID()
static XrdOucPListAnchor XPList
Definition: XrdPss.hh:191
static int P2URL(char *pbuff, int pblen, XrdPssUrlInfo &uInfo, bool doN2N=true)
Definition: XrdPss.cc:1402
virtual XrdOssDF * newDir(const char *tident) override
Definition: XrdPss.hh:148
static const char * myHost
Definition: XrdPss.hh:188
int Remdir(const char *, int Opts=0, XrdOucEnv *eP=0) override
Definition: XrdPss.cc:389
int Lfn2Pfn(const char *Path, char *buff, int blen) override
Definition: XrdPss.cc:318
static bool xLfn2Pfn
Definition: XrdPss.hh:204
virtual int Create(const char *, const char *, mode_t, XrdOucEnv &, int opts=0) override
Definition: XrdPss.cc:272
virtual void Disc(XrdOucEnv &) override
Definition: XrdPss.cc:283
int Rename(const char *, const char *, XrdOucEnv *eP1=0, XrdOucEnv *eP2=0) override
Definition: XrdPss.cc:437
static bool dcaWorld
Definition: XrdPss.hh:206
static const char * protName
Definition: XrdPss.hh:196
XrdCmsConfig Config
int Opts
Definition: XrdMpxStats.cc:58
XrdOucEnv * envP
Definition: XrdPss.cc:109