xrootd
XrdPosixFile.hh
Go to the documentation of this file.
1 #ifndef __XRDPOSIXFILE_HH__
2 #define __XRDPOSIXFILE_HH__
3 /******************************************************************************/
4 /* */
5 /* X r d P o s i x F i l e . h h */
6 /* */
7 /* (c) 2013 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 <errno.h>
34 #include <fcntl.h>
35 #include <sys/time.h>
36 #include <sys/param.h>
37 #include <sys/resource.h>
38 #include <sys/uio.h>
39 
40 #include "XrdCl/XrdClFileSystem.hh"
41 #include "XrdCl/XrdClFile.hh"
42 #include "XrdCl/XrdClURL.hh"
44 
45 #include "XrdOuc/XrdOucCache2.hh"
46 
47 #include "XrdPosix/XrdPosixMap.hh"
49 
50 /******************************************************************************/
51 /* X r d P o s i x F i l e C l a s s */
52 /******************************************************************************/
53 
54 class XrdPosixCallBack;
55 class XrdPosixPrepIO;
56 
57 class XrdPosixFile : public XrdPosixObject,
58  public XrdOucCacheIO2,
60 {
61 public:
62 
66 
67  long long addOffset(long long offs, int updtSz=0)
68  {updMutex.Lock();
69  currOffset += offs;
70  if (updtSz && currOffset > (long long)mySize)
72  long long retOffset = currOffset;
73  updMutex.UnLock();
74  return retOffset;
75  }
76 
77 //atic XrdPosixFile *Alloc(const char *path, XrdPosixCallBack *cbP, int Opts);
78 
79 static void* DelayedDestroy(void*);
80 
81 static void DelayedDestroy(XrdPosixFile *fp);
82 
83  bool Close(XrdCl::XRootDStatus &Status);
84 
85  bool Finalize(XrdCl::XRootDStatus *Status);
86 
87  long long FSize() {AtomicBeg(updMutex);
88  long long retSize = AtomicGet(mySize);
90  return retSize;
91  }
92 
93  int Fstat(struct stat &buf);
94 
95  const char *Location();
96 
98  XrdCl::AnyObject *response);
99 
100  void isOpen();
101 
102  void updLock() {updMutex.Lock();}
103 
105 
107 
108  const char *Origin() {return fOpen;}
109 
110  const char *Path() {return fPath;}
111 
112  int Read (char *Buff, long long Offs, int Len);
113 
114  void Read (XrdOucCacheIOCB &iocb, char *buff, long long offs,
115  int rlen);
116 
117  int ReadV (const XrdOucIOVec *readV, int n);
118 
119  void ReadV (XrdOucCacheIOCB &iocb, const XrdOucIOVec *readV,
120  int n);
121 
122  long long setOffset(long long offs)
123  {updMutex.Lock();
124  currOffset = offs;
125  updMutex.UnLock();
126  return offs;
127  }
128 
129  bool Stat(XrdCl::XRootDStatus &Status, bool force=false);
130 
131  int Sync();
132 
133  void Sync(XrdOucCacheIOCB &iocb);
134 
135  int Trunc(long long Offset);
136 
137  void UpdtSize(size_t newsz)
138  {updMutex.Lock();
139  if (newsz > mySize) mySize = newsz;
140  updMutex.UnLock();
141  }
142 
143  using XrdPosixObject::Who;
144 
145  bool Who(XrdPosixFile **fileP)
146  {*fileP = this; return true;}
147 
148  int Write(char *Buff, long long Offs, int Len);
149 
150  void Write(XrdOucCacheIOCB &iocb, char *buff, long long offs,
151  int wlen);
152 
153  size_t mySize;
154  time_t myMtime;
155  dev_t myRdev;
156  ino_t myInode;
157  mode_t myMode;
158 
159 static
164 static char *sfSFX;
165 static short sfSLN;
166 static bool ddPosted;
167 static int ddNum;
168 
169 static const int realFD = 1;
170 static const int isStrm = 2;
171 static const int isUpdt = 4;
172 
173  XrdPosixFile(bool &aOK, const char *path, XrdPosixCallBack *cbP=0,
174  int Opts=0);
175  ~XrdPosixFile();
176 
177 private:
178 
179 union {long long currOffset;
182  };
183 
184 char *fPath;
185 char *fOpen;
186 char *fLoc;
187 union {int cOpt; int numTries;};
188 char isStream;
189 };
190 #endif
bool Stat(XrdCl::XRootDStatus &Status, bool force=false)
XrdSysRecMutex updMutex
Definition: XrdPosixObject.hh:94
Definition: XrdClAnyObject.hh:32
#define AtomicGet(x)
Definition: XrdSysAtomics.hh:71
virtual bool Who(XrdPosixDir **dirP)
Definition: XrdPosixObject.hh:86
static short sfSLN
Definition: XrdPosixFile.hh:165
char * fLoc
Definition: XrdPosixFile.hh:186
Definition: XrdPosixFile.hh:57
long long currOffset
Definition: XrdPosixFile.hh:179
long long Offset()
Definition: XrdPosixFile.hh:106
int Fstat(struct stat &buf)
time_t myMtime
Definition: XrdPosixFile.hh:154
int ReadV(const XrdOucIOVec *readV, int n)
XrdCl::File clFile
Definition: XrdPosixFile.hh:65
mode_t myMode
Definition: XrdPosixFile.hh:157
long long addOffset(long long offs, int updtSz=0)
Definition: XrdPosixFile.hh:67
XrdPosixFile(bool &aOK, const char *path, XrdPosixCallBack *cbP=0, int Opts=0)
Definition: XrdPosixObject.hh:41
char isStream
Definition: XrdPosixFile.hh:188
void updLock()
Definition: XrdPosixFile.hh:102
static void * DelayedDestroy(void *)
static const int isStrm
Definition: XrdPosixFile.hh:170
#define AtomicBeg(Mtx)
Definition: XrdSysAtomics.hh:63
const char * Origin()
Definition: XrdPosixFile.hh:108
int Read(char *Buff, long long Offs, int Len)
char * fOpen
Definition: XrdPosixFile.hh:185
Definition: XrdSysPthread.hh:165
void UpdtSize(size_t newsz)
Definition: XrdPosixFile.hh:137
int Trunc(long long Offset)
A file.
Definition: XrdClFile.hh:44
XrdPosixFile * nextFile
Definition: XrdPosixFile.hh:181
#define AtomicEnd(Mtx)
Definition: XrdSysAtomics.hh:64
long long setOffset(long long offs)
Definition: XrdPosixFile.hh:122
XrdPosixPrepIO * PrepIO
Definition: XrdPosixFile.hh:64
const char * Path()
Definition: XrdPosixFile.hh:110
static XrdSysMutex ddMutex
Definition: XrdPosixFile.hh:161
Definition: XrdOucCache2.hh:62
static XrdPosixFile * ddLost
Definition: XrdPosixFile.hh:163
Definition: XrdSysPthread.hh:403
#define AtomicRet(mtx, x)
Definition: XrdSysAtomics.hh:76
bool Who(XrdPosixFile **fileP)
Definition: XrdPosixFile.hh:145
Request status.
Definition: XrdClXRootDResponses.hh:212
An abstract class to define a callback for Open() call.
Definition: XrdPosixCallBack.hh:51
Definition: XrdOucIOVec.hh:40
static bool ddPosted
Definition: XrdPosixFile.hh:166
XrdOucCacheIO2 * XCio
Definition: XrdPosixFile.hh:63
Definition: XrdPosixPrepIO.hh:36
size_t mySize
Definition: XrdPosixFile.hh:153
Definition: XrdOucCache.hh:93
static XrdPosixFile * ddList
Definition: XrdPosixFile.hh:162
Handle an async response.
Definition: XrdClXRootDResponses.hh:854
#define stat(a, b)
Definition: XrdPosix.hh:96
void Lock()
Definition: XrdSysPthread.hh:220
ino_t myInode
Definition: XrdPosixFile.hh:156
dev_t myRdev
Definition: XrdPosixFile.hh:155
static XrdSysSemaphore ddSem
Definition: XrdPosixFile.hh:160
char * fPath
Definition: XrdPosixFile.hh:184
static const int isUpdt
Definition: XrdPosixFile.hh:171
bool Close(XrdCl::XRootDStatus &Status)
void HandleResponse(XrdCl::XRootDStatus *status, XrdCl::AnyObject *response)
bool Finalize(XrdCl::XRootDStatus *Status)
static const int realFD
Definition: XrdPosixFile.hh:169
long long FSize()
Definition: XrdPosixFile.hh:87
static int ddNum
Definition: XrdPosixFile.hh:167
const char * Location()
void updUnLock()
Definition: XrdPosixFile.hh:104
XrdPosixCallBack * theCB
Definition: XrdPosixFile.hh:180
int Write(char *Buff, long long Offs, int Len)
void UnLock()
Definition: XrdSysPthread.hh:222
static char * sfSFX
Definition: XrdPosixFile.hh:164
int cOpt
Definition: XrdPosixFile.hh:187
int numTries
Definition: XrdPosixFile.hh:187