XRootD
Loading...
Searching...
No Matches
XrdPosixFile Class Reference

#include <XrdPosixFile.hh>

+ Inheritance diagram for XrdPosixFile:
+ Collaboration diagram for XrdPosixFile:

Public Member Functions

 XrdPosixFile (bool &aOK, const char *path, XrdPosixCallBack *cbP=0, int Opts=0)
 
 ~XrdPosixFile ()
 
long long addOffset (long long offs, int updtSz=0)
 
bool Close (XrdCl::XRootDStatus &Status)
 
bool Detach (XrdOucCacheIOCD &cdP) override
 
void DetachDone () override
 Indicate that the CacheIO object has been detached.
 
bool Finalize (XrdCl::XRootDStatus *Status)
 
long long FSize () override
 
int Fstat (struct stat &buf) override
 
void HandleResponse (XrdCl::XRootDStatus *status, XrdCl::AnyObject *response) override
 
const char * Location (bool refresh=false) override
 
long long Offset ()
 
const char * Origin ()
 
const char * Path () override
 
int pgRead (char *buff, long long offs, int rdlen, std::vector< uint32_t > &csvec, uint64_t opts=0, int *csfix=0) override
 
void pgRead (XrdOucCacheIOCB &iocb, char *buff, long long offs, int rdlen, std::vector< uint32_t > &csvec, uint64_t opts=0, int *csfix=0) override
 
int pgWrite (char *buff, long long offs, int wrlen, std::vector< uint32_t > &csvec, uint64_t opts=0, int *csfix=0) override
 
void pgWrite (XrdOucCacheIOCB &iocb, char *buff, long long offs, int wrlen, std::vector< uint32_t > &csvec, uint64_t opts=0, int *csfix=0) override
 
int Read (char *Buff, long long Offs, int Len) override
 
void Read (XrdOucCacheIOCB &iocb, char *buff, long long offs, int rlen) override
 
int ReadV (const XrdOucIOVec *readV, int n) override
 
void ReadV (XrdOucCacheIOCB &iocb, const XrdOucIOVec *readV, int n) override
 
long long setOffset (long long offs)
 
bool Stat (XrdCl::XRootDStatus &Status, bool force=false)
 
int Sync () override
 
void Sync (XrdOucCacheIOCB &iocb) override
 
int Trunc (long long Offset) override
 
void updLock ()
 
void UpdtSize (size_t newsz)
 
void updUnLock ()
 
virtual bool Who (XrdPosixDir **dirP)
 
bool Who (XrdPosixFile **fileP) override
 
int Write (char *Buff, long long Offs, int Len) override
 
void Write (XrdOucCacheIOCB &iocb, char *buff, long long offs, int wlen) override
 
- Public Member Functions inherited from XrdPosixObject
 XrdPosixObject ()
 
virtual ~XrdPosixObject ()
 
bool AssignFD (bool isStream=false)
 
int FDNum ()
 
XrdOucECMsggetECMsg ()
 
void Lock (bool wr=true)
 
void Ref ()
 
int Refs ()
 
void UnLock ()
 
void unRef ()
 
- Public Member Functions inherited from XrdOucCacheIO
 XrdOucCacheIO ()
 Construct and Destructor.
 
virtual void Preread (aprParms &Parms)
 
virtual void Preread (long long offs, int rlen, int opts=0)
 
virtual void Trunc (XrdOucCacheIOCB &iocb, long long offs)
 
virtual void Update (XrdOucCacheIO &iocp)
 
virtual int WriteV (const XrdOucIOVec *writV, int wnum)
 
virtual void WriteV (XrdOucCacheIOCB &iocb, const XrdOucIOVec *writV, int wnum)
 
- Public Member Functions inherited from XrdOucCacheIOCD
 XrdOucCacheIOCD ()
 
virtual ~XrdOucCacheIOCD ()
 
- Public Member Functions inherited from XrdCl::ResponseHandler
virtual ~ResponseHandler ()
 
virtual void HandleResponseWithHosts (XRootDStatus *status, AnyObject *response, HostList *hostList)
 

Static Public Member Functions

static void * DelayedDestroy (void *)
 
static void DelayedDestroy (XrdPosixFile *fp)
 
- Static Public Member Functions inherited from XrdPosixObject
static bool CanStream ()
 
static XrdPosixDirDir (int fildes, bool glk=false)
 
static XrdPosixFileFile (int fildes, bool glk=false)
 
static int Init (int numfd)
 
static void Release (XrdPosixObject *oP, bool needlk=true)
 
static XrdPosixDirReleaseDir (int fildes)
 
static XrdPosixFileReleaseFile (int fildes)
 
static void Shutdown ()
 
static bool Valid (int fd)
 
- Static Public Member Functions inherited from XrdCl::ResponseHandler
static ResponseHandlerWrap (std::function< void(XRootDStatus &, AnyObject &)> func)
 
static ResponseHandlerWrap (std::function< void(XRootDStatus *, AnyObject *)> func)
 

Public Attributes

XrdCl::File clFile
 
time_t myAtime
 
time_t myCtime
 
ino_t myInode
 
mode_t myMode
 
time_t myMtime
 
dev_t myRdev
 
size_t mySize
 
XrdPosixPrepIOPrepIO
 
XrdOucCacheIOXCio
 
- Public Attributes inherited from XrdPosixObject
XrdOucECMsg ecMsg
 

Static Public Attributes

static XrdPosixFileddList = InitDDL()
 
static XrdPosixFileddLost = 0
 
static XrdSysMutex ddMutex
 
static int ddNum = 0
 
static bool ddPosted = false
 
static XrdSysSemaphore ddSem
 
static const int isStrm = 2
 
static const int isUpdt = 4
 
static const int realFD = 1
 
static char * sfSFX = 0
 
static short sfSLN = 0
 
- Static Public Attributes inherited from XrdOucCacheIO
static const uint64_t forceCS = 0x0000000000000001ULL
 
static const int SingleUse = 0x0001
 Mark pages for single use.
 

Additional Inherited Members

- Protected Member Functions inherited from XrdOucCacheIO
virtual ~XrdOucCacheIO ()
 
- Protected Attributes inherited from XrdPosixObject
int fdNum
 
XrdSysRWLock objMutex
 
int refCnt
 
XrdSysRecMutex updMutex
 

Detailed Description

Definition at line 58 of file XrdPosixFile.hh.

Constructor & Destructor Documentation

◆ XrdPosixFile()

XrdPosixFile::XrdPosixFile ( bool & aOK,
const char * path,
XrdPosixCallBack * cbP = 0,
int Opts = 0 )

Definition at line 120 of file XrdPosixFile.cc.

122 : XCio((XrdOucCacheIO *)this), PrepIO(0),
123 mySize(0), myAtime(0), myCtime(0), myMtime(0), myRdev(0),
124 myInode(0), myMode(0), theCB(cbP), fLoc(0), cOpt(0),
125 isStream(Opts & isStrm ? 1 : 0)
126{
127// Handle path generation. This is trickt as we may have two namespaces. One
128// for the origin and one for the cache.
129//
130 fOpen = strdup(path); aOK = true;
132 else if (!XrdPosixXrootPath::P2L("file",path,fPath)) aOK = false;
133 else if (!fPath) fPath = fOpen;
134
135// Check for structured file check
136//
137 if (sfSFX)
138 {int n = strlen(path);
139 if (n > sfSLN && !strcmp(sfSFX, path + n - sfSLN))
140 cOpt = XrdOucCache::optFIS;
141 }
142
143// Set cache update option
144//
145 if (Opts & isUpdt) cOpt |= XrdOucCache::optRW;
146}
static const int optRW
File is read/write (o/w read/only)
static const int optFIS
File is structured (e.g. root file)
static char * sfSFX
static const int isUpdt
static const int isStrm
XrdPosixPrepIO * PrepIO
static short sfSLN
XrdOucCacheIO * XCio
static const char * P2L(const char *who, const char *inP, char *&relP, bool ponly=false)
XrdOucCache * theCache
XrdOucName2Name * theN2N

References isUpdt, XrdOucCache::optFIS, XrdOucCache::optRW, XrdPosixXrootPath::P2L(), sfSFX, sfSLN, XrdPosixGlobals::theCache, and XrdPosixGlobals::theN2N.

+ Here is the call graph for this function:

◆ ~XrdPosixFile()

XrdPosixFile::~XrdPosixFile ( )

Definition at line 152 of file XrdPosixFile.cc.

153{
154// Close the remote connection
155//
156 if (clFile.IsOpen())
159 if (!status.IsOK())
161 }
162
163// Get rid of deferred open object
164//
165 if (PrepIO) delete PrepIO;
166
167// Free the path and location information
168//
169 if (fPath) free(fPath);
170 if (fOpen != fPath) free(fOpen);
171 if (fLoc) free(fLoc);
172}
XRootDStatus Close(ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Definition XrdClFile.cc:151
bool IsOpen() const
Check if the file is open.
Definition XrdClFile.cc:846
XrdCl::File clFile
void Count(long long &Dest)
XrdPosixStats Stats
bool IsOK() const
We're fine.

References clFile, XrdCl::File::Close(), XrdPosixStats::Count(), XrdCl::Status::IsOK(), XrdCl::File::IsOpen(), PrepIO, and XrdPosixGlobals::Stats.

+ Here is the call graph for this function:

Member Function Documentation

◆ addOffset()

long long XrdPosixFile::addOffset ( long long offs,
int updtSz = 0 )
inline

Definition at line 69 of file XrdPosixFile.hh.

70 {updMutex.Lock();
71 currOffset += offs;
72 if (updtSz && currOffset > (long long)mySize)
73 mySize = currOffset;
74 long long retOffset = currOffset;
76 return retOffset;
77 }
XrdSysRecMutex updMutex

References XrdSysMutex::Lock(), mySize, XrdSysMutex::UnLock(), and XrdPosixObject::updMutex.

Referenced by XrdPosixXrootd::Lseek(), XrdPosixXrootd::Read(), and XrdPosixXrootd::Write().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Close()

bool XrdPosixFile::Close ( XrdCl::XRootDStatus & Status)

Definition at line 308 of file XrdPosixFile.cc.

309{
310// If this is a deferred open, disable any future calls as we are ready to
311// shutdown this beast!
312//
313 if (PrepIO) PrepIO->Disable();
314
315// If we don't need to close the file, then return success. Otherwise, do the
316// actual close and return the status. We should have already been removed
317// from the file table at this point and should be unlocked.
318//
319 if (clFile.IsOpen())
321 Status = clFile.Close();
322 if (Status.IsOK()) return true;
324 return false;
325 }
326 return true;
327}

References clFile, XrdCl::File::Close(), XrdPosixStats::Count(), XrdPosixPrepIO::Disable(), XrdCl::Status::IsOK(), XrdCl::File::IsOpen(), PrepIO, and XrdPosixGlobals::Stats.

Referenced by XrdPosixXrootd::Close(), and DelayedDestroy().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DelayedDestroy() [1/2]

void * XrdPosixFile::DelayedDestroy ( void * vpf)
static

Definition at line 178 of file XrdPosixFile.cc.

179{
180// Static function.
181// Called within a dedicated thread if there is a reference outstanding to the
182// file or the file cannot be closed in a clean fashion for some reason.
183//
184 EPNAME("DDestroy");
185
187 XrdCl::XRootDStatus Status;
188 std::string statusMsg;
189 const char *eTxt;
190 XrdPosixFile *fCurr, *fNext;
191 char buff[512], buff2[256];
192 static int ddNumLost = 0;
193 int ddCount, refNum;
194 bool doWait = false;
195
196// Wait for active I/O to complete
197//
198do{if (doWait)
200 doWait = false;
201 } else {
202 ddSem.Wait();
203 doWait = true;
204 continue;
205 }
206
207// Grab the delayed delete list
208//
209 ddMutex.Lock();
210 fNext=ddList; ddList=0; ddPosted=false; ddCount = ddNum; ddNum = 0;
211 ddMutex.UnLock();
212
213// Do some debugging
214//
215 DEBUG("DLY destroy of "<<ddCount<<" objects; "<<ddNumLost <<" already lost.");
216
217// Try to delete all the files on the list. If we exceeded the try limit,
218// remove the file from the list and let it sit forever.
219//
220 int nowLost = ddNumLost;
221 while((fCurr = fNext))
222 {fNext = fCurr->nextFile;
223 if (!(refNum = fCurr->Refs()))
224 {if (fCurr->Close(Status) || !fCurr->clFile.IsOpen())
225 {delete fCurr; ddCount--; continue;}
226 else {statusMsg = Status.ToString();
227 eTxt = statusMsg.c_str();
228 }
229 } else eTxt = 0;
230
231 if (fCurr->numTries > XrdPosixGlobals::ddMaxTries)
232 {ddNumLost++; ddCount--;
233 if (!eTxt)
234 {snprintf(buff2, sizeof(buff2), "in use %d", refNum);
235 eTxt = buff2;
236 }
237 if (Say)
238 {snprintf(buff, sizeof(buff), "%s timeout closing", eTxt);
239 Say->Emsg("DDestroy", buff, fCurr->Origin());
240 } else {
241 DMSG("DDestroy", eTxt <<" timeout closing " <<fCurr->Origin()
242 <<' ' <<ddNumLost <<" objects lost");
243 }
244 fCurr->nextFile = ddLost;
245 ddLost = fCurr;
246 } else {
247 fCurr->numTries++;
248 doWait = true;
249 ddMutex.Lock();
250 fCurr->nextFile = ddList; ddList = fCurr;
251 ddNum++; ddPosted = true;
252 ddMutex.UnLock();
253 }
254 }
255 if (Say && ddNumLost - nowLost >= 3)
256 {snprintf(buff, sizeof(buff), "%d objects deferred and %d lost.",
257 ddCount, ddNumLost);
258 Say->Emsg("DDestroy", buff);
259 } else {
260 DEBUG("DLY destroy end; "<<ddCount<<" objects deferred and "
261 <<ddNumLost <<" lost.");
262 }
263 if (XrdPosixGlobals::theCache && ddNumLost != nowLost)
265 (XrdPosixGlobals::theCache->Statistics.X.ClosedLost), ddNumLost);
266 } while(true);
267
268 return 0;
269}
#define DEBUG(x)
#define EPNAME(x)
XrdOucPup XrdCmsParser::Pup & Say
#define DMSG(x, y)
void Set(XrdOucCacheStats &S)
XrdOucCacheStats Statistics
static XrdSysSemaphore ddSem
static XrdSysMutex ddMutex
const char * Origin()
static XrdPosixFile * ddLost
static bool ddPosted
static int ddNum
bool Close(XrdCl::XRootDStatus &Status)
static XrdPosixFile * ddList
static void Snooze(int seconds)
XrdSysError * eDest
std::string ToString() const
Create a string representation.

References clFile, Close(), XrdPosixGlobals::ddInterval, ddList, ddLost, XrdPosixGlobals::ddMaxTries, ddMutex, ddNum, ddPosted, ddSem, DEBUG, DMSG, XrdPosixGlobals::eDest, EPNAME, XrdCl::File::IsOpen(), XrdSysMutex::Lock(), Origin(), XrdPosixObject::Refs(), Say, XrdOucCacheStats::Set(), XrdSysTimer::Snooze(), XrdOucCache::Statistics, XrdPosixGlobals::theCache, XrdCl::Status::ToString(), XrdSysMutex::UnLock(), and XrdSysSemaphore::Wait().

Referenced by XrdPosixXrootd::Close().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DelayedDestroy() [2/2]

void XrdPosixFile::DelayedDestroy ( XrdPosixFile * fp)
static

Definition at line 273 of file XrdPosixFile.cc.

274{
275 EPNAME("DDestroyFP");
276 int ddCount;
277 bool doPost;
278
279// Count number of times this has happened (we should have a cache)
280//
283 (XrdPosixGlobals::theCache->Statistics.X.ClosDefers));
284
285// Place this file on the delayed delete list
286//
287 ddMutex.Lock();
288 fp->nextFile = ddList;
289 ddList = fp;
290 ddNum++; ddCount = ddNum;
291 if (ddPosted) doPost = false;
292 else {doPost = true;
293 ddPosted = true;
294 }
295 fp->numTries = 0;
296 ddMutex.UnLock();
297
298 DEBUG("DLY destroy "<<(doPost ? "post " : "has ")<<ddCount
299 <<" objects; added "<<fp->Origin());
300
301 if (doPost) ddSem.Post();
302}
void Count(long long &Dest)

References XrdOucCacheStats::Count(), ddList, ddMutex, ddNum, ddPosted, ddSem, DEBUG, EPNAME, XrdSysMutex::Lock(), Origin(), XrdSysSemaphore::Post(), XrdOucCache::Statistics, XrdPosixGlobals::theCache, and XrdSysMutex::UnLock().

+ Here is the call graph for this function:

◆ Detach()

bool XrdPosixFile::Detach ( XrdOucCacheIOCD & iocd)
inlineoverridevirtual

Detach this CacheIO object from the cache.

Note
This method must be called instead of using the delete operator since CacheIO objects may have multiple outstanding references and actual deletion may need to be deferred.
Parameters
iocdreference to the detach complete callback object.
Returns
true Deletion can occur immediately. There is no outstanding I/O.
false Deletion must be deferred until it is safe to so from the cache perspective. At which point, the cache will call the DetachDone() method in the passed callback object. No locks may be held with respect to the CacheIO object when this is done to avoid deadlocks.

Implements XrdOucCacheIO.

Definition at line 87 of file XrdPosixFile.hh.

88 {(void)cdP; return true;}

◆ DetachDone()

void XrdPosixFile::DetachDone ( )
inlineoverridevirtual

Indicate that the CacheIO object has been detached.

Implements XrdOucCacheIOCD.

Definition at line 90 of file XrdPosixFile.hh.

90{unRef();}

References XrdPosixObject::unRef().

+ Here is the call graph for this function:

◆ Finalize()

bool XrdPosixFile::Finalize ( XrdCl::XRootDStatus * Status)

Definition at line 333 of file XrdPosixFile.cc.

334{
335 XrdOucCacheIO *ioP;
336
337// Indicate that we are at the start of the file
338//
339 currOffset = 0;
340
341// Complete initialization. If the stat() fails, the caller will unwind the
342// whole open process (ick). In the process get correct I/O vector.
343
344 if (!Status) ioP = (XrdOucCacheIO *)PrepIO;
345 else if (Stat(*Status)) ioP = (XrdOucCacheIO *)this;
346 else return false;
347
348// Setup the cache if it is to be used
349//
352 if (ioP == (XrdOucCacheIO *)PrepIO)
353 XrdPosixGlobals::theCache->Statistics.Add(
355 }
356
357 return true;
358}
struct stat Stat
Definition XrdCks.cc:49
struct XrdOucCacheStats::CacheStats X
virtual XrdOucCacheIO * Attach(XrdOucCacheIO *ioP, int opts=0)=0

References XrdOucCache::Attach(), XrdOucCacheStats::CacheStats::OpenDefers, PrepIO, Stat, XrdOucCache::Statistics, XrdPosixGlobals::theCache, XrdOucCacheStats::X, and XCio.

Referenced by HandleResponse().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ FSize()

long long XrdPosixFile::FSize ( )
inlineoverridevirtual

Obtain size of the file.

Returns
Size of the file in bytes.

Implements XrdOucCacheIO.

Definition at line 94 of file XrdPosixFile.hh.

96 long long retSize = AtomicGet(mySize);
98 return retSize;
99 }
#define AtomicBeg(Mtx)
#define AtomicGet(x)
#define AtomicEnd(Mtx)

References AtomicBeg, AtomicEnd, AtomicGet, mySize, and XrdPosixObject::updMutex.

Referenced by XrdPosixPrepIO::FSize().

+ Here is the caller graph for this function:

◆ Fstat()

int XrdPosixFile::Fstat ( struct stat & sbuff)
overridevirtual

Perform an fstat() operation (defaults to passthrough).

Parameters
sbuffreference to the stat buffer to be filled in. Only fields st_size, st_blocks, st_mtime (st_atime and st_ctime may be set to st_mtime), st_ino, and st_mode need to be set. All other fields are preset and should not be changed.
Returns
<0 - fstat failed, value is -errno. =0 - fstat succeeded, sbuff holds stat information. >0 - fstat could not be done, forward operation to next level.

Reimplemented from XrdOucCacheIO.

Definition at line 364 of file XrdPosixFile.cc.

365{
366 long long theSize;
367
368// The size is treated differently here as it may come from a cache and may
369// actually trigger a file open if the open was deferred.
370//
371 theSize = XCio->FSize();
372 if (theSize < 0) return static_cast<int>(theSize);
373
374// Return what little we can
375//
377 buf.st_size = theSize;
378 buf.st_atime = myAtime;
379 buf.st_ctime = myCtime;
380 buf.st_mtime = myMtime;
381 buf.st_blocks = buf.st_size/512 + buf.st_size%512;
382 buf.st_ino = myInode;
383 buf.st_rdev = myRdev;
384 buf.st_mode = myMode;
385 return 0;
386}
virtual long long FSize()=0
static void initStat(struct stat *buf)

References XrdOucCacheIO::FSize(), XrdPosixConfig::initStat(), myAtime, myCtime, myInode, myMode, myMtime, myRdev, and XCio.

Referenced by XrdPosixPrepIO::Fstat(), and XrdPosixXrootd::Fstat().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ HandleResponse()

void XrdPosixFile::HandleResponse ( XrdCl::XRootDStatus * status,
XrdCl::AnyObject * response )
overridevirtual

Called when a response to associated request arrives or an error occurs

Parameters
statusstatus of the request
responsean object associated with the response (request dependent)

Reimplemented from XrdCl::ResponseHandler.

Definition at line 394 of file XrdPosixFile.cc.

396{
397 XrdCl::XRootDStatus Status;
398 XrdPosixCallBack *xeqCB = theCB;
399 int rc = fdNum;
400
401// If no errors occurred, complete the open
402//
403 if (!(status->IsOK())) rc = XrdPosixMap::Result(*status,ecMsg,false);
404 else if (!Finalize(&Status)) rc = XrdPosixMap::Result( Status,ecMsg,false);
405
406// Issue XrdPosixCallBack callback with the correct result. Errors are indicated
407// by result set < 0 (typically -1) and errno set to the error number. In our
408// case, rc is -errno if an error occured and that is what the callback gets.
409//
410 xeqCB->Complete(rc);
411
412// Finish up
413//
414 delete status;
415 delete response;
416 if (rc < 0) delete this;
417}
An abstract class to define a callback for Open() call.
virtual void Complete(int Result)=0
bool Finalize(XrdCl::XRootDStatus *Status)
static int Result(const XrdCl::XRootDStatus &Status, XrdOucECMsg &ecMsg, bool retneg1=false)
XrdOucECMsg ecMsg

References XrdPosixCallBack::Complete(), XrdPosixObject::ecMsg, XrdPosixObject::fdNum, Finalize(), XrdCl::Status::IsOK(), and XrdPosixMap::Result().

+ Here is the call graph for this function:

◆ Location()

const char * XrdPosixFile::Location ( bool refresh = false)
overridevirtual

Get the file's location (i.e. endpoint hostname and port)

Parameters
refresh- when true, recomputes the location in case it changed st the location is cached from the previous successful call.
Returns
A pointer to the file's location. It remains valid until the file is closed or Location() is called with refresh set to true. A null string means the file is not open or location is unknown.

Reimplemented from XrdOucCacheIO.

Definition at line 423 of file XrdPosixFile.cc.

424{
425
426// If the file is not open, then we have no location
427//
428 if (!clFile.IsOpen()) return "";
429
430// If we have no location info, get it
431//
432 if (!fLoc || refresh)
433 {std::string currNode;
434 if (clFile.GetProperty(dsProperty, currNode))
435 {if (!fLoc || strcmp(fLoc, currNode.c_str()))
436 {if (fLoc) free(fLoc);
437 fLoc = strdup(currNode.c_str());
438 }
439 } else return "";
440 }
441
442// Return location information
443//
444 return fLoc;
445}
bool GetProperty(const std::string &name, std::string &value) const
Definition XrdClFile.cc:878

References clFile, XrdCl::File::GetProperty(), and XrdCl::File::IsOpen().

+ Here is the call graph for this function:

◆ Offset()

long long XrdPosixFile::Offset ( )
inline

Definition at line 112 of file XrdPosixFile.hh.

112{AtomicRet(updMutex, currOffset);}
#define AtomicRet(mtx, x)

References AtomicRet, and XrdPosixObject::updMutex.

Referenced by XrdPosixXrootd::Read(), Trunc(), and XrdPosixXrootd::Write().

+ Here is the caller graph for this function:

◆ Origin()

const char * XrdPosixFile::Origin ( )
inline

Definition at line 114 of file XrdPosixFile.hh.

114{return fOpen;}

Referenced by XrdPosixXrootd::Close(), DelayedDestroy(), DelayedDestroy(), and XrdPosixPrepIO::Disable().

+ Here is the caller graph for this function:

◆ Path()

const char * XrdPosixFile::Path ( )
inlineoverridevirtual

Get the path associated with this object.

Returns
Pointer to the path.

Implements XrdOucCacheIO.

Definition at line 116 of file XrdPosixFile.hh.

116{return fPath;}

Referenced by XrdPosixPrepIO::Path().

+ Here is the caller graph for this function:

◆ pgRead() [1/2]

int XrdPosixFile::pgRead ( char * buff,
long long offs,
int rdlen,
std::vector< uint32_t > & csvec,
uint64_t opts = 0,
int * csfix = 0 )
overridevirtual

Reimplemented from XrdOucCacheIO.

Definition at line 451 of file XrdPosixFile.cc.

457{
458// Do a sync call using the async interface
459//
460 pgioCB pgrCB("Posix pgRead CB");
461 pgRead(pgrCB, buff, offs, rlen, csvec, opts, csfix);
462 return pgrCB.Wait4PGIO();
463}
struct myOpts opts
int pgRead(char *buff, long long offs, int rdlen, std::vector< uint32_t > &csvec, uint64_t opts=0, int *csfix=0) override

References opts, and pgRead().

Referenced by pgRead().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pgRead() [2/2]

void XrdPosixFile::pgRead ( XrdOucCacheIOCB & iocb,
char * buff,
long long offs,
int rdlen,
std::vector< uint32_t > & csvec,
uint64_t opts = 0,
int * csfix = 0 )
overridevirtual

Read file pages and checksums using asynchronous I/O (default sync).

Parameters
iocbreference to the callback object that receives the result. All results are returned via this object's Done() method. If the caller holds any locks they must be recursive locks as the callback may occur on the calling thread.
buffpointer to buffer where the bytes are to be placed.
offsThe offset where the read is to start.
rdlenThe number of bytes to read.
csvecA vector which will be filled with the corresponding CRC32C checksum for each page or page segment.
optsProcessing options: forceCS - always return checksums even when not available.
csfixWhen not nil, returns the number of corrected checksum errs.

Reimplemented from XrdOucCacheIO.

Definition at line 467 of file XrdPosixFile.cc.

474{
475 XrdCl::XRootDStatus Status;
476 XrdPosixFileRH *rhP;
477
478// Allocate callback object. Note the response handler may do additional post
479// processing.
480//
481 rhP = XrdPosixFileRH::Alloc(&iocb, this, offs, rlen, XrdPosixFileRH::isReadP);
482
483// Set the destination checksum vector
484//
485 if (csfix) *csfix = 0;
486 rhP->setCSVec(&csvec, csfix, (opts & XrdOucCacheIO::forceCS) != 0);
487
488// Issue read
489//
490 Ref();
491 Status = clFile.PgRead((uint64_t)offs,(uint32_t)rlen,buff,rhP);
492
493// Check status, upon error we pass -errno as the result.
494//
495 if (!Status.IsOK())
496 {rhP->Sched(XrdPosixMap::Result(Status, ecMsg, false));
497 unRef();
498 }
499}
XRootDStatus PgRead(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Definition XrdClFile.cc:245
static const uint64_t forceCS
void setCSVec(std::vector< uint32_t > *csv, int *csf, bool fcs=false)
void Sched(int result)
static XrdPosixFileRH * Alloc(XrdOucCacheIOCB *cbp, XrdPosixFile *fp, long long offs, int xResult, ioType typeIO)

References XrdPosixFileRH::Alloc(), clFile, XrdPosixObject::ecMsg, XrdOucCacheIO::forceCS, XrdCl::Status::IsOK(), XrdPosixFileRH::isReadP, opts, XrdCl::File::PgRead(), XrdPosixObject::Ref(), XrdPosixMap::Result(), XrdPosixFileRH::Sched(), XrdPosixFileRH::setCSVec(), and XrdPosixObject::unRef().

+ Here is the call graph for this function:

◆ pgWrite() [1/2]

int XrdPosixFile::pgWrite ( char * buff,
long long offs,
int wrlen,
std::vector< uint32_t > & csvec,
uint64_t opts = 0,
int * csfix = 0 )
overridevirtual

Write file pages from a buffer and corresponding verified checksums.

Parameters
buffpointer to buffer holding the bytes to be written.
offsThe offset where the write is to start.
wrlenThe number of bytes to write. offs+wrlen (i.e. it establishes an end of file).
csvecA vector of that holds the corresponding verified CRC32C checksum for each page or page segment.
optsProcessing options.
csfixWhen not nil, returns the number of corrected checksum errs.
Returns
>= 0 The number of bytes written.
-errno File could not be written, returned value is the reason.

Reimplemented from XrdOucCacheIO.

Definition at line 505 of file XrdPosixFile.cc.

511{
512 XrdCl::XRootDStatus Status;
513
514// Preset checksum error count
515//
516 if (csfix) *csfix = 0;
517
518// Issue write and return appropriately. An error returns -1.
519//
520 Ref();
521 Status = clFile.PgWrite((uint64_t)offs, (uint32_t)wlen, buff, csvec);
522 unRef();
523
524 return (Status.IsOK() ? wlen : XrdPosixMap::Result(Status,ecMsg,true));
525}
XRootDStatus PgWrite(uint64_t offset, uint32_t size, const void *buffer, std::vector< uint32_t > &cksums, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Definition XrdClFile.cc:380

References clFile, XrdPosixObject::ecMsg, XrdCl::Status::IsOK(), XrdCl::File::PgWrite(), XrdPosixObject::Ref(), XrdPosixMap::Result(), and XrdPosixObject::unRef().

+ Here is the call graph for this function:

◆ pgWrite() [2/2]

void XrdPosixFile::pgWrite ( XrdOucCacheIOCB & iocb,
char * buff,
long long offs,
int wrlen,
std::vector< uint32_t > & csvec,
uint64_t opts = 0,
int * csfix = 0 )
overridevirtual

Write file pages and checksums using asynchronous I/O (default sync).

Parameters
iocbreference to the callback object that receives the result. All results are returned via this object's Done() method. If the caller holds any locks they must be recursive locks as the callback may occur on the calling thread.
buffpointer to buffer holding the bytes to be written.
offsThe offset where the write is to start.
wrlenThe number of bytes to write.
csvecA vector of that holds the corresponding verified CRC32C checksum for each page or page segment.
optsProcessing options.
csfixWhen not nil, returns the number of corrected checksum errs.

Reimplemented from XrdOucCacheIO.

Definition at line 529 of file XrdPosixFile.cc.

536{
537 XrdCl::XRootDStatus Status;
538 XrdPosixFileRH *rhP;
539
540// Allocate callback object. Note that a pgWrite is essentially a normal write
541// as far as the response handler is concerned.
542//
543 rhP = XrdPosixFileRH::Alloc(&iocb,this,offs,wlen,XrdPosixFileRH::isWrite);
544
545// Set checksum info
546//
547 if (csfix)
548 {*csfix = 0;
549 rhP->setCSVec(0, csfix);
550 }
551
552// Issue write
553//
554 Ref();
555 Status = clFile.PgWrite((uint64_t)offs, (uint32_t)wlen, buff, csvec, rhP);
556
557// Check status, if error pass along -errno as the result.
558//
559 if (!Status.IsOK())
560 {rhP->Sched(XrdPosixMap::Result(Status,ecMsg,false));
561 unRef();
562 }
563}

References XrdPosixFileRH::Alloc(), clFile, XrdPosixObject::ecMsg, XrdCl::Status::IsOK(), XrdPosixFileRH::isWrite, XrdCl::File::PgWrite(), XrdPosixObject::Ref(), XrdPosixMap::Result(), XrdPosixFileRH::Sched(), XrdPosixFileRH::setCSVec(), and XrdPosixObject::unRef().

+ Here is the call graph for this function:

◆ Read() [1/2]

int XrdPosixFile::Read ( char * buff,
long long offs,
int rlen )
overridevirtual

Perform an synchronous read.

Parameters
buffpointer to the buffer to receive the results. The buffer must remain valid until the callback is invoked.
offsthe offset into the file.
rlenthe number of bytes to read.
Returns
< 0 - Read failed, value is -errno. >=0 - Read succeeded, value is number of bytes read.

Implements XrdOucCacheIO.

Definition at line 569 of file XrdPosixFile.cc.

570{
571 XrdCl::XRootDStatus Status;
572 uint32_t bytes;
573
574// Handle automatic pgread
575//
577 {pgioCB pgrCB("Posix pgRead CB");
578 Read(pgrCB, Buff, Offs, Len);
579 return pgrCB.Wait4PGIO();
580 }
581
582// Issue read and return appropriately.
583//
584 Ref();
585 Status = clFile.Read((uint64_t)Offs, (uint32_t)Len, Buff, bytes);
586 unRef();
587
588 return (Status.IsOK() ? (int)bytes : XrdPosixMap::Result(Status,ecMsg,false));
589}
XRootDStatus Read(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Definition XrdClFile.cc:206
int Read(char *Buff, long long Offs, int Len) override

References XrdPosixGlobals::autoPGRD, clFile, XrdPosixObject::ecMsg, XrdCl::Status::IsOK(), XrdCl::File::Read(), Read(), XrdPosixObject::Ref(), XrdPosixMap::Result(), and XrdPosixObject::unRef().

Referenced by Read(), XrdPosixPrepIO::Read(), and XrdPosixPrepIO::Read().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Read() [2/2]

void XrdPosixFile::Read ( XrdOucCacheIOCB & iocb,
char * buff,
long long offs,
int rlen )
overridevirtual

Perform an asynchronous read (defaults to synchronous).

Parameters
iocbreference to the callback object that receives the result. All results are returned via this object's Done() method. If the caller holds any locks they must be recursive locks as the callback may occur on the calling thread.
buffpointer to the buffer to receive the results. The buffer must remain valid until the callback is invoked.
offsthe offset into the file.
rlenthe number of bytes to read.

Reimplemented from XrdOucCacheIO.

Definition at line 593 of file XrdPosixFile.cc.

595{
596 XrdCl::XRootDStatus Status;
597 XrdPosixFileRH *rhP;
599 bool doPgRd = XrdPosixGlobals::autoPGRD;
600
601// Allocate correct callback object
602//
604 rhP = XrdPosixFileRH::Alloc(&iocb, this, offs, rlen, rhT);
605
606// Issue read
607//
608 Ref();
609 if (doPgRd) Status = clFile.PgRead((uint64_t)offs,(uint32_t)rlen,buff,rhP);
610 else Status = clFile.Read ((uint64_t)offs,(uint32_t)rlen,buff,rhP);
611
612// Check status. Upon error pass along -errno as the result.
613//
614 if (!Status.IsOK())
615 {rhP->Sched(XrdPosixMap::Result(Status, ecMsg, false));
616 unRef();
617 }
618}

References XrdPosixFileRH::Alloc(), XrdPosixGlobals::autoPGRD, clFile, XrdPosixObject::ecMsg, XrdCl::Status::IsOK(), XrdPosixFileRH::isRead, XrdPosixFileRH::isReadP, XrdCl::File::PgRead(), XrdCl::File::Read(), XrdPosixObject::Ref(), XrdPosixMap::Result(), XrdPosixFileRH::Sched(), and XrdPosixObject::unRef().

+ Here is the call graph for this function:

◆ ReadV() [1/2]

int XrdPosixFile::ReadV ( const XrdOucIOVec * readV,
int rnum )
overridevirtual

Perform an synchronous vector read.

Parameters
readVpointer to a vector of read requests.
rnumthe number of elements in the vector.
Returns
< 0 - ReadV failed, value is -errno. >=0 - ReadV succeeded, value is number of bytes read.

Reimplemented from XrdOucCacheIO.

Definition at line 624 of file XrdPosixFile.cc.

625{
626 XrdCl::XRootDStatus Status;
627 XrdCl::ChunkList chunkVec;
628 XrdCl::VectorReadInfo *vrInfo = 0;
629 int nbytes = 0;
630
631// Copy in the vector (would be nice if we didn't need to do this)
632//
633 chunkVec.reserve(n);
634 for (int i = 0; i < n; i++)
635 {nbytes += readV[i].size;
636 chunkVec.push_back(XrdCl::ChunkInfo((uint64_t)readV[i].offset,
637 (uint32_t)readV[i].size,
638 (void *)readV[i].data
639 ));
640 }
641
642// Issue the readv. We immediately delete the vrInfo as w don't need it as a
643// readv will succeed only if actually read the number of bytes requested.
644//
645 Ref();
646 Status = clFile.VectorRead(chunkVec, (void *)0, vrInfo);
647 unRef();
648 delete vrInfo;
649
650// Return appropriate result (here we return -errno as the result)
651//
652 return (Status.IsOK() ? nbytes : XrdPosixMap::Result(Status, ecMsg, false));
653}
XRootDStatus VectorRead(const ChunkList &chunks, void *buffer, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Definition XrdClFile.cc:468
std::vector< ChunkInfo > ChunkList
List of chunks.
Describe a data chunk for vector read.

References clFile, XrdPosixObject::ecMsg, XrdCl::Status::IsOK(), XrdPosixObject::Ref(), XrdPosixMap::Result(), XrdOucIOVec::size, XrdPosixObject::unRef(), and XrdCl::File::VectorRead().

Referenced by XrdPosixPrepIO::ReadV(), and XrdPosixPrepIO::ReadV().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ReadV() [2/2]

void XrdPosixFile::ReadV ( XrdOucCacheIOCB & iocb,
const XrdOucIOVec * readV,
int rnum )
overridevirtual

Perform an asynchronous vector read (defaults to synchronous).

Parameters
iocbreference to the callback object that receives the result. All results are returned via this object's Done() method. If the caller holds any locks they must be recursive locks as the callback may occur on the calling thread.
readVpointer to a vector of read requests.
rnumthe number of elements in the vector.

Reimplemented from XrdOucCacheIO.

Definition at line 657 of file XrdPosixFile.cc.

658{
659 XrdCl::XRootDStatus Status;
660 XrdCl::ChunkList chunkVec;
661 int nbytes = 0;
662
663// Copy in the vector (would be nice if we didn't need to do this)
664//
665 chunkVec.reserve(n);
666 for (int i = 0; i < n; i++)
667 {nbytes += readV[i].size;
668 chunkVec.push_back(XrdCl::ChunkInfo((uint64_t)readV[i].offset,
669 (uint32_t)readV[i].size,
670 (void *)readV[i].data
671 ));
672 }
673
674// Issue the readv.
675//
676 XrdPosixFileRH *rhp = XrdPosixFileRH::Alloc(&iocb, this, 0, nbytes,
678 Ref();
679 Status = clFile.VectorRead(chunkVec, (void *)0, rhp);
680
681// Return appropriate result
682//
683 if (!Status.IsOK())
684 {rhp->Sched(XrdPosixMap::Result(Status, ecMsg, false));
685 unRef();
686 }
687}

References XrdPosixFileRH::Alloc(), clFile, XrdPosixObject::ecMsg, XrdCl::Status::IsOK(), XrdPosixFileRH::isReadV, XrdPosixObject::Ref(), XrdPosixMap::Result(), XrdPosixFileRH::Sched(), XrdOucIOVec::size, XrdPosixObject::unRef(), and XrdCl::File::VectorRead().

+ Here is the call graph for this function:

◆ setOffset()

long long XrdPosixFile::setOffset ( long long offs)
inline

Definition at line 146 of file XrdPosixFile.hh.

147 {updMutex.Lock();
148 currOffset = offs;
150 return offs;
151 }

References XrdSysMutex::Lock(), XrdSysMutex::UnLock(), and XrdPosixObject::updMutex.

Referenced by XrdPosixXrootd::Lseek().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Stat()

bool XrdPosixFile::Stat ( XrdCl::XRootDStatus & Status,
bool force = false )

Definition at line 693 of file XrdPosixFile.cc.

694{
695 XrdCl::StatInfo *sInfo = 0;
696
697// Get the stat information from the open file
698//
699 Ref();
700 Status = clFile.Stat(force, sInfo);
701 if (!Status.IsOK())
702 {unRef();
703 delete sInfo;
704 return false;
705 }
706
707// Copy over the relevant fields, the stat structure must have been
708// properly pre-initialized.
709//
711 myMtime = static_cast<time_t>(sInfo->GetModTime());
712 mySize = static_cast<size_t>(sInfo->GetSize());
713 myInode = static_cast<ino_t>(strtoll(sInfo->GetId().c_str(), 0, 10));
714
715// If this is an extended stat then we can get some more info
716//
717 if (sInfo->ExtendedFormat())
718 {myCtime = static_cast<time_t>(sInfo->GetChangeTime());
719 myAtime = static_cast<time_t>(sInfo->GetAccessTime());
720 } else {
722 myAtime = time(0);
723 }
724
725// Delete our status information and return final result
726//
727 unRef();
728 delete sInfo;
729 return true;
730}
XRootDStatus Stat(bool force, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Definition XrdClFile.cc:177
Object stat info.
uint64_t GetChangeTime() const
Get change time (in seconds since epoch)
uint64_t GetSize() const
Get size (in bytes)
uint32_t GetFlags() const
Get flags.
bool ExtendedFormat() const
Has extended stat information.
const std::string & GetId() const
Get id.
uint64_t GetModTime() const
Get modification time (in seconds since epoch)
uint64_t GetAccessTime() const
Get change time (in seconds since epoch)
static mode_t Flags2Mode(dev_t *rdv, uint32_t flags)

References clFile, XrdCl::StatInfo::ExtendedFormat(), XrdPosixMap::Flags2Mode(), XrdCl::StatInfo::GetAccessTime(), XrdCl::StatInfo::GetChangeTime(), XrdCl::StatInfo::GetFlags(), XrdCl::StatInfo::GetId(), XrdCl::StatInfo::GetModTime(), XrdCl::StatInfo::GetSize(), XrdCl::Status::IsOK(), myAtime, myCtime, myInode, myMode, myMtime, myRdev, mySize, XrdPosixObject::Ref(), XrdCl::File::Stat(), and XrdPosixObject::unRef().

+ Here is the call graph for this function:

◆ Sync() [1/2]

int XrdPosixFile::Sync ( )
overridevirtual

Perform an synchronous sync() operation.

Returns
<0 - Sync failed, value is -errno. =0 - Sync succeeded.

Implements XrdOucCacheIO.

Definition at line 736 of file XrdPosixFile.cc.

737{
738 XrdCl::XRootDStatus Status;
739
740// Issue the Sync
741//
742 Ref();
743 Status = clFile.Sync();
744 unRef();
745
746// Return result
747//
748 return XrdPosixMap::Result(Status, ecMsg, false);
749}
XRootDStatus Sync(ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Definition XrdClFile.cc:414

References clFile, XrdPosixObject::ecMsg, XrdPosixObject::Ref(), XrdPosixMap::Result(), XrdCl::File::Sync(), and XrdPosixObject::unRef().

Referenced by XrdPosixPrepIO::Sync(), and XrdPosixPrepIO::Sync().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Sync() [2/2]

void XrdPosixFile::Sync ( XrdOucCacheIOCB & iocb)
overridevirtual

Perform an asynchronous sync() operation (defaults to synchronous).

Parameters
iocbreference to the callback object that receives the result. All results are returned via this object's Done() method. If the caller holds any locks they must be recursive locks as the callback may occur on the calling thread.

Reimplemented from XrdOucCacheIO.

Definition at line 753 of file XrdPosixFile.cc.

754{
755 XrdCl::XRootDStatus Status;
756 XrdPosixFileRH *rhp = XrdPosixFileRH::Alloc(&iocb, this, 0, 0,
758
759// Issue read
760//
761 Status = clFile.Sync(rhp);
762
763// Check status
764//
765 if (!Status.IsOK()) rhp->Sched(XrdPosixMap::Result(Status, ecMsg, false));
766}

References XrdPosixFileRH::Alloc(), clFile, XrdPosixObject::ecMsg, XrdCl::Status::IsOK(), XrdPosixFileRH::nonIO, XrdPosixMap::Result(), XrdPosixFileRH::Sched(), and XrdCl::File::Sync().

+ Here is the call graph for this function:

◆ Trunc()

int XrdPosixFile::Trunc ( long long offs)
overridevirtual

Perform an synchronous trunc() operation.

Parameters
offsthe size the file is have.
Returns
<0 - Trunc failed, value is -errno. =0 - Trunc succeeded.

Implements XrdOucCacheIO.

Definition at line 772 of file XrdPosixFile.cc.

773{
774 XrdCl::XRootDStatus Status;
775
776// Issue truncate request
777//
778 Ref();
779 Status = clFile.Truncate((uint64_t)Offset);
780 unRef();
781
782// Return results
783//
784 return XrdPosixMap::Result(Status,ecMsg,false);
785}
XRootDStatus Truncate(uint64_t size, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Definition XrdClFile.cc:440
long long Offset()

References clFile, XrdPosixObject::ecMsg, Offset(), XrdPosixObject::Ref(), XrdPosixMap::Result(), XrdCl::File::Truncate(), and XrdPosixObject::unRef().

Referenced by XrdPosixPrepIO::Trunc().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updLock()

void XrdPosixFile::updLock ( )
inline

Definition at line 108 of file XrdPosixFile.hh.

108{updMutex.Lock();}

References XrdSysMutex::Lock(), and XrdPosixObject::updMutex.

Referenced by XrdPosixObjGuard::Init().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ UpdtSize()

void XrdPosixFile::UpdtSize ( size_t newsz)
inline

Definition at line 161 of file XrdPosixFile.hh.

162 {updMutex.Lock();
163 if (newsz > mySize) mySize = newsz;
165 }

References XrdSysMutex::Lock(), mySize, XrdSysMutex::UnLock(), and XrdPosixObject::updMutex.

Referenced by XrdPosixFileRH::HandleResponse(), XrdPosixExtra::pgWrite(), and XrdPosixXrootd::Pwrite().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updUnLock()

void XrdPosixFile::updUnLock ( )
inline

Definition at line 110 of file XrdPosixFile.hh.

110{updMutex.UnLock();}

References XrdSysMutex::UnLock(), and XrdPosixObject::updMutex.

Referenced by XrdPosixObjGuard::Init(), and XrdPosixObjGuard::Release().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Who() [1/2]

virtual bool XrdPosixObject::Who ( XrdPosixDir ** dirP)
inlinevirtual

Reimplemented from XrdPosixObject.

Definition at line 89 of file XrdPosixObject.hh.

89{return false;}

◆ Who() [2/2]

bool XrdPosixFile::Who ( XrdPosixFile ** fileP)
inlineoverridevirtual

Reimplemented from XrdPosixObject.

Definition at line 169 of file XrdPosixFile.hh.

170 {*fileP = this; return true;}

◆ Write() [1/2]

int XrdPosixFile::Write ( char * buff,
long long offs,
int wlen )
overridevirtual

Perform an synchronous write.

Parameters
buffpointer to the buffer holding the contents. The buffer must remain valid until the callback is invoked.
offsthe offset into the file.
wlenthe number of bytes to write
Returns
< 0 - Write failed, value is -errno. >=0 - Write succeeded, value is number of bytes written.

Implements XrdOucCacheIO.

Definition at line 791 of file XrdPosixFile.cc.

792{
793 XrdCl::XRootDStatus Status;
794
795// Issue write and return appropriately
796//
797 Ref();
798 Status = clFile.Write((uint64_t)Offs, (uint32_t)Len, Buff);
799 unRef();
800
801 return (Status.IsOK() ? Len : XrdPosixMap::Result(Status,ecMsg,false));
802}
XRootDStatus Write(uint64_t offset, uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Definition XrdClFile.cc:286

References clFile, XrdPosixObject::ecMsg, XrdCl::Status::IsOK(), XrdPosixObject::Ref(), XrdPosixMap::Result(), XrdPosixObject::unRef(), and XrdCl::File::Write().

Referenced by XrdPosixPrepIO::Write(), and XrdPosixPrepIO::Write().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Write() [2/2]

void XrdPosixFile::Write ( XrdOucCacheIOCB & iocb,
char * buff,
long long offs,
int wlen )
overridevirtual

Perform an asynchronous write (defaults to synchronous).

Parameters
iocbreference to the callback object that receives the result. All results are returned via this object's Done() method. If the caller holds any locks they must be recursive locks as the callback may occur on the calling thread.
buffpointer to the buffer holding the contents. The buffer must remain valid until the callback is invoked.
offsthe offset into the file.
wlenthe number of bytes to write

Reimplemented from XrdOucCacheIO.

Definition at line 806 of file XrdPosixFile.cc.

808{
809 XrdCl::XRootDStatus Status;
810 XrdPosixFileRH *rhp = XrdPosixFileRH::Alloc(&iocb, this, offs, wlen,
812
813// Issue write
814//
815 Ref();
816 Status = clFile.Write((uint64_t)offs, (uint32_t)wlen, buff, rhp);
817
818// Check status
819//
820 if (!Status.IsOK())
821 {rhp->Sched(XrdPosixMap::Result(Status,ecMsg,false));
822 unRef();
823 }
824}

References XrdPosixFileRH::Alloc(), clFile, XrdPosixObject::ecMsg, XrdCl::Status::IsOK(), XrdPosixFileRH::isWrite, XrdPosixObject::Ref(), XrdPosixMap::Result(), XrdPosixFileRH::Sched(), XrdPosixObject::unRef(), and XrdCl::File::Write().

+ Here is the call graph for this function:

Member Data Documentation

◆ clFile

◆ ddList

XrdPosixFile * XrdPosixFile::ddList = InitDDL()
static

Definition at line 188 of file XrdPosixFile.hh.

Referenced by DelayedDestroy(), and DelayedDestroy().

◆ ddLost

XrdPosixFile * XrdPosixFile::ddLost = 0
static

Definition at line 189 of file XrdPosixFile.hh.

Referenced by DelayedDestroy().

◆ ddMutex

XrdSysMutex XrdPosixFile::ddMutex
static

Definition at line 187 of file XrdPosixFile.hh.

Referenced by DelayedDestroy(), and DelayedDestroy().

◆ ddNum

int XrdPosixFile::ddNum = 0
static

Definition at line 193 of file XrdPosixFile.hh.

Referenced by DelayedDestroy(), and DelayedDestroy().

◆ ddPosted

bool XrdPosixFile::ddPosted = false
static

Definition at line 192 of file XrdPosixFile.hh.

Referenced by DelayedDestroy(), and DelayedDestroy().

◆ ddSem

XrdSysSemaphore XrdPosixFile::ddSem
static

Definition at line 186 of file XrdPosixFile.hh.

Referenced by DelayedDestroy(), and DelayedDestroy().

◆ isStrm

const int XrdPosixFile::isStrm = 2
static

Definition at line 196 of file XrdPosixFile.hh.

◆ isUpdt

const int XrdPosixFile::isUpdt = 4
static

Definition at line 197 of file XrdPosixFile.hh.

Referenced by XrdPosixFile().

◆ myAtime

time_t XrdPosixFile::myAtime

Definition at line 178 of file XrdPosixFile.hh.

Referenced by Fstat(), and Stat().

◆ myCtime

time_t XrdPosixFile::myCtime

Definition at line 179 of file XrdPosixFile.hh.

Referenced by Fstat(), and Stat().

◆ myInode

ino_t XrdPosixFile::myInode

Definition at line 182 of file XrdPosixFile.hh.

Referenced by Fstat(), and Stat().

◆ myMode

mode_t XrdPosixFile::myMode

Definition at line 183 of file XrdPosixFile.hh.

Referenced by Fstat(), and Stat().

◆ myMtime

time_t XrdPosixFile::myMtime

Definition at line 180 of file XrdPosixFile.hh.

Referenced by Fstat(), and Stat().

◆ myRdev

dev_t XrdPosixFile::myRdev

Definition at line 181 of file XrdPosixFile.hh.

Referenced by Fstat(), and Stat().

◆ mySize

size_t XrdPosixFile::mySize

Definition at line 177 of file XrdPosixFile.hh.

Referenced by addOffset(), FSize(), Stat(), and UpdtSize().

◆ PrepIO

XrdPosixPrepIO* XrdPosixFile::PrepIO

Definition at line 66 of file XrdPosixFile.hh.

Referenced by ~XrdPosixFile(), Close(), and Finalize().

◆ realFD

const int XrdPosixFile::realFD = 1
static

Definition at line 195 of file XrdPosixFile.hh.

◆ sfSFX

char * XrdPosixFile::sfSFX = 0
static

Definition at line 190 of file XrdPosixFile.hh.

Referenced by XrdPosixFile().

◆ sfSLN

short XrdPosixFile::sfSLN = 0
static

Definition at line 191 of file XrdPosixFile.hh.

Referenced by XrdPosixFile().

◆ XCio


The documentation for this class was generated from the following files: