XRootD
Loading...
Searching...
No Matches
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>
38#include "XrdOuc/XrdOucECMsg.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
49class XrdPssDir : public XrdOssDF
50{
51public:
52int Close(long long *retsz=0);
53int Opendir(const char *, XrdOucEnv &);
54int Readdir(char *buff, int blen);
55
56 // Constructor and destructor
57 XrdPssDir(const char *tid)
59 myDir(0) {}
60
61 ~XrdPssDir() {if (myDir) Close();}
62private:
63 DIR *myDir;
64};
65
66/******************************************************************************/
67/* X r d P s s F i l e */
68/******************************************************************************/
69
70struct XrdOucIOVec;
71class XrdSecEntity;
72class XrdSfsAio;
73
74class XrdPssFile : public XrdOssDF
75{
76public:
77
78// The following two are virtual functions to allow for upcasting derivations
79// of this implementation
80//
81virtual int Close(long long *retsz=0);
82virtual int Open(const char *, int, mode_t, XrdOucEnv &);
83
84int Fchmod(mode_t mode) {return XrdOssOK;}
85int Fstat(struct stat *);
86int Fsync();
87int Fsync(XrdSfsAio *aiop);
88int Ftruncate(unsigned long long);
89ssize_t pgRead (void* buffer, off_t offset, size_t rdlen,
90 uint32_t* csvec, uint64_t opts);
91int pgRead (XrdSfsAio* aioparm, uint64_t opts);
92ssize_t pgWrite(void* buffer, off_t offset, size_t wrlen,
93 uint32_t* csvec, uint64_t opts);
94int pgWrite(XrdSfsAio* aioparm, uint64_t opts);
95ssize_t Read( off_t, size_t);
96ssize_t Read( void *, off_t, size_t);
97int Read(XrdSfsAio *aiop);
98ssize_t ReadV(XrdOucIOVec *readV, int n);
99ssize_t ReadRaw( void *, off_t, size_t);
100ssize_t Write(const void *, off_t, size_t);
101int Write(XrdSfsAio *aiop);
102
103 // Constructor and destructor
104 XrdPssFile(const char *tid)
106 rpInfo(0), tpcPath(0), entity(0) {}
107
108virtual ~XrdPssFile() {if (fd >= 0) Close();
109 if (rpInfo) delete(rpInfo);
110 if (tpcPath) free(tpcPath);
111 }
112
113private:
114
115struct 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;
128const XrdSecEntity *entity;
129};
130
131/******************************************************************************/
132/* X r d P s s S y s */
133/******************************************************************************/
134
135class XrdNetSecurity;
136class XrdOucEnv;
137class XrdOucStream;
138class XrdOucTList;
139class XrdPssUrlInfo;
140class XrdSecsssID;
141class XrdSysError;
142
143struct XrdVersionInfo;
144
145class XrdPssSys : public XrdOss
146{
147public:
148virtual XrdOssDF *newDir(const char *tident) override
149 {return (XrdOssDF *)new XrdPssDir(tident);}
150virtual XrdOssDF *newFile(const char *tident) override
151 {return (XrdOssDF *)new XrdPssFile(tident);}
152
153virtual void Connect(XrdOucEnv &) override;
154
155virtual void Disc(XrdOucEnv &) override;
156
157int Chmod(const char *, mode_t mode, XrdOucEnv *eP=0) override;
158bool ConfigMapID();
159virtual
160int Create(const char *, const char *, mode_t, XrdOucEnv &, int opts=0) override;
161void EnvInfo(XrdOucEnv *envP) override;
162uint64_t Features() override {return myFeatures;}
163int Init(XrdSysLogger *, const char *) override {return -ENOTSUP;}
164int Init(XrdSysLogger *, const char *, XrdOucEnv *envP) override;
165int Lfn2Pfn(const char *Path, char *buff, int blen) override;
166const
167char *Lfn2Pfn(const char *Path, char *buff, int blen, int &rc) override;
168int Mkdir(const char *, mode_t mode, int mkpath=0, XrdOucEnv *eP=0) override;
169int Remdir(const char *, int Opts=0, XrdOucEnv *eP=0) override;
170int Rename(const char *, const char *,
171 XrdOucEnv *eP1=0, XrdOucEnv *eP2=0) override;
172int Stat(const char *, struct stat *, int opts=0, XrdOucEnv *eP=0) override;
173int Stats(char *bp, int bl) override;
174int Truncate(const char *, unsigned long long, XrdOucEnv *eP=0) override;
175int Unlink(const char *, int Opts=0, XrdOucEnv *eP=0) override;
176
177static const int PolNum = 2;
178enum PolAct {PolPath = 0, PolObj = 1};
179
180static int Info(int rc);
181static int P2DST(int &retc, char *hBuff, int hBlen, PolAct pType,
182 const char *path);
183static int P2OUT(char *pbuff, int pblen, XrdPssUrlInfo &uInfo);
184static int P2URL(char *pbuff, int pblen, XrdPssUrlInfo &uInfo,
185 bool doN2N=true);
186
187static const char *ConfigFN; // -> Pointer to the config file name
188static const char *myHost;
189static const char *myName;
190static
191XrdOucPListAnchor XPList; // Exported path list
192
195static char *fileOrgn;
196static const char *protName;
197static const char *hdrData;
198static int hdrLen;
199static int Streams;
200static int Workers;
201static int Trace;
202static int dcaCTime;
203
204static bool xLfn2Pfn;
205static bool dcaCheck;
206static bool dcaWorld;
207static bool deferID; // Defer ID mapping until needed
208static bool reProxy; // TPC requires reproxing
209
210 XrdPssSys();
211virtual ~XrdPssSys() {}
212
213private:
214
215char *LocalRoot;// -> pss Local n2n root, if any
216XrdOucName2Name *theN2N; // -> File mapper object
217unsigned long long DirFlags; // Defaults for exports
218XrdVersionInfo *myVersion;// -> Compilation version
219XrdSecsssID *idMapper; // -> Auth ID mapper
220uint64_t myFeatures;// Our feature set
221
222int Configure(const char *, XrdOucEnv *);
223int ConfigProc(const char *ConfigFN);
224int ConfigXeq(char*, XrdOucStream&);
225int xconf(XrdSysError *Eroute, XrdOucStream &Config);
226int xdef( XrdSysError *Eroute, XrdOucStream &Config);
227int xdca( XrdSysError *errp, XrdOucStream &Config);
228int xexp( XrdSysError *Eroute, XrdOucStream &Config);
229int xperm(XrdSysError *errp, XrdOucStream &Config);
230int xpers(XrdSysError *errp, XrdOucStream &Config);
231int xorig(XrdSysError *errp, XrdOucStream &Config);
232};
233#endif
#define tident
struct stat Stat
Definition XrdCks.cc:49
#define XrdOssOK
Definition XrdOss.hh:50
#define stat(a, b)
Definition XrdPosix.hh:96
XrdOucString Path
bool Create
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:713
int Opendir(const char *, XrdOucEnv &)
Definition XrdPss.cc:630
int Readdir(char *buff, int blen)
Definition XrdPss.cc:684
XrdPssDir(const char *tid)
Definition XrdPss.hh:57
ssize_t ReadRaw(void *, off_t, size_t)
Definition XrdPss.cc:1107
int Fsync()
Definition XrdPss.cc:1235
virtual ~XrdPssFile()
Definition XrdPss.hh:108
virtual int Close(long long *retsz=0)
Definition XrdPss.cc:881
virtual int Open(const char *, int, mode_t, XrdOucEnv &)
Definition XrdPss.cc:748
ssize_t Read(off_t, size_t)
Definition XrdPss.cc:1031
int Fstat(struct stat *)
Definition XrdPss.cc:1149
int Fchmod(mode_t mode)
Definition XrdPss.hh:84
ssize_t Write(const void *, off_t, size_t)
Definition XrdPss.cc:1127
XrdPssFile(const char *tid)
Definition XrdPss.hh:104
ssize_t ReadV(XrdOucIOVec *readV, int n)
Definition XrdPss.cc:1069
ssize_t pgRead(void *buffer, off_t offset, size_t rdlen, uint32_t *csvec, uint64_t opts)
Definition XrdPss.cc:922
int Ftruncate(unsigned long long)
Definition XrdPss.cc:1264
ssize_t pgWrite(void *buffer, off_t offset, size_t wrlen, uint32_t *csvec, uint64_t opts)
Definition XrdPss.cc:975
virtual ~XrdPssSys()
Definition XrdPss.hh:211
static const int PolNum
Definition XrdPss.hh:177
int Mkdir(const char *, mode_t mode, int mkpath=0, XrdOucEnv *eP=0) override
Definition XrdPss.cc:349
static int P2OUT(char *pbuff, int pblen, XrdPssUrlInfo &uInfo)
Definition XrdPss.cc:1312
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:583
static int Streams
Definition XrdPss.hh:199
XrdPssSys()
Definition XrdPss.cc:164
virtual void Connect(XrdOucEnv &) override
Definition XrdPss.cc:233
int Truncate(const char *, unsigned long long, XrdOucEnv *eP=0) override
Definition XrdPss.cc:545
int Stats(char *bp, int bl) override
Definition XrdPss.cc:527
static int Info(int rc)
Definition XrdPss.cc:1275
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 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:1285
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:222
static int Workers
Definition XrdPss.hh:200
virtual XrdOssDF * newDir(const char *tident) override
Definition XrdPss.hh:148
void EnvInfo(XrdOucEnv *envP) override
Definition XrdPss.cc:302
static XrdNetSecurity * Police[PolNum]
Definition XrdPss.hh:193
static const char * myName
Definition XrdPss.hh:189
virtual XrdOssDF * newFile(const char *tident) override
Definition XrdPss.hh:150
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:1376
static const char * myHost
Definition XrdPss.hh:188
int Remdir(const char *, int Opts=0, XrdOucEnv *eP=0) override
Definition XrdPss.cc:385
int Lfn2Pfn(const char *Path, char *buff, int blen) override
Definition XrdPss.cc:317
static bool xLfn2Pfn
Definition XrdPss.hh:204
virtual void Disc(XrdOucEnv &) override
Definition XrdPss.cc:282
int Rename(const char *, const char *, XrdOucEnv *eP1=0, XrdOucEnv *eP2=0) override
Definition XrdPss.cc:431
static bool dcaWorld
Definition XrdPss.hh:206
static const char * protName
Definition XrdPss.hh:196