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

#include <XrdXrootdAioBuff.hh>

Inheritance diagram for XrdXrootdAioBuff:
Collaboration diagram for XrdXrootdAioBuff:

Public Member Functions

 XrdXrootdAioBuff (XrdXrootdAioPgrw *pgrwP, XrdXrootdAioTask *tP, XrdBuffer *bP)
 XrdXrootdAioBuff (XrdXrootdAioTask *tP, XrdBuffer *bP)
void doneRead () override
void doneWrite () override
virtual void Recycle () override
Public Member Functions inherited from XrdSfsAio
 XrdSfsAio ()
virtual ~XrdSfsAio ()

Static Public Member Functions

static XrdXrootdAioBuffAlloc (XrdXrootdAioTask *arp)

Public Attributes

XrdXrootdAioBuffnext
XrdXrootdAioPgrw *const pgrwP
Public Attributes inherited from XrdSfsAio
uint32_t * cksVec
ssize_t Result
struct aiocb sfsAio
const char * TIdent

Protected Attributes

XrdBufferbuffP
XrdXrootdAioTaskreqP

Static Protected Attributes

static const char * TraceID = "AioBuff"

Detailed Description

Definition at line 40 of file XrdXrootdAioBuff.hh.

Constructor & Destructor Documentation

◆ XrdXrootdAioBuff() [1/2]

XrdXrootdAioBuff::XrdXrootdAioBuff ( XrdXrootdAioTask * tP,
XrdBuffer * bP )
inline

Definition at line 57 of file XrdXrootdAioBuff.hh.

58 : pgrwP(0), reqP(tP), buffP(bP) {}
XrdXrootdAioPgrw *const pgrwP
XrdXrootdAioTask * reqP

References buffP, pgrwP, and reqP.

Referenced by XrdXrootdAioPgrw::XrdXrootdAioPgrw(), Alloc(), and XrdXrootdAioPgrw::Alloc().

Here is the caller graph for this function:

◆ XrdXrootdAioBuff() [2/2]

XrdXrootdAioBuff::XrdXrootdAioBuff ( XrdXrootdAioPgrw * pgrwP,
XrdXrootdAioTask * tP,
XrdBuffer * bP )
inline

Definition at line 60 of file XrdXrootdAioBuff.hh.

62 : pgrwP(pgrwP), reqP(tP), buffP(bP) {}

References buffP, pgrwP, and reqP.

Member Function Documentation

◆ Alloc()

XrdXrootdAioBuff * XrdXrootdAioBuff::Alloc ( XrdXrootdAioTask * arp)
static

Definition at line 72 of file XrdXrootdAioBuff.cc.

73{
74 XrdXrootdAioBuff *aiobuff;
75 XrdBuffer *bP;
76
77// Obtain a buffer as we never hold on to them (unlike pgaio)
78//
79 if (!(bP = BPool->Obtain(XrdXrootdProtocol::as_segsize))) return 0;
80
81// Obtain a preallocated aio object
82//
83 fqMutex.Lock();
84 if ((aiobuff = fqFirst))
85 {fqFirst = aiobuff->next;
86 numFree--;
87 }
88 fqMutex.UnLock();
89
90// If we have no object, create a new one.
91//
92 if (!aiobuff) aiobuff = new XrdXrootdAioBuff(arp, bP);
93 else {aiobuff->reqP = arp;
94 aiobuff->buffP = bP;
95 }
96 aiobuff->cksVec = 0;
97 aiobuff->sfsAio.aio_buf = bP->buff;
98 aiobuff->sfsAio.aio_nbytes = bP->bsize;
99
100// Update aio counters
101//
102 arp->urProtocol()->aioUpdate(1);
103
104// All done
105//
106 return aiobuff;
107}
size_t aio_nbytes
Definition XrdSfsAio.hh:48
void * aio_buf
Definition XrdSfsAio.hh:47
XrdBuffer * Obtain(int bsz)
Definition XrdBuffer.cc:140
char * buff
Definition XrdBuffer.hh:45
uint32_t * cksVec
Definition XrdSfsAio.hh:63
struct aiocb sfsAio
Definition XrdSfsAio.hh:62
XrdXrootdAioBuff * next
XrdXrootdAioBuff(XrdXrootdAioTask *tP, XrdBuffer *bP)
XrdXrootdProtocol * urProtocol()
XrdBuffManager * BPool

References XrdXrootdAioBuff(), aiocb::aio_buf, aiocb::aio_nbytes, XrdXrootdProtocol::aioUpdate(), XrdXrootdProtocol::as_segsize, XrdXrootd::BPool, XrdBuffer::bsize, XrdBuffer::buff, buffP, XrdSfsAio::cksVec, next, reqP, XrdSfsAio::sfsAio, and XrdXrootdAioTask::urProtocol().

Here is the call graph for this function:

◆ doneRead()

void XrdXrootdAioBuff::doneRead ( )
overridevirtual

Implements XrdSfsAio.

Definition at line 113 of file XrdXrootdAioBuff.cc.

114{
115// Tell the request this data is available to be sent to the client
116//
117 reqP->Completed(this);
118}

References reqP.

◆ doneWrite()

void XrdXrootdAioBuff::doneWrite ( )
overridevirtual

Implements XrdSfsAio.

Definition at line 124 of file XrdXrootdAioBuff.cc.

125{
126// Tell the request this data is has been dealth with
127//
128 reqP->Completed(this);
129}

References reqP.

◆ Recycle()

void XrdXrootdAioBuff::Recycle ( )
overridevirtual

Implements XrdSfsAio.

Reimplemented in XrdXrootdAioPgrw.

Definition at line 135 of file XrdXrootdAioBuff.cc.

136{
137
138// Do some tracing
139//
140 TRACEI(FSAIO, "Recycle " <<sfsAio.aio_nbytes<<'@'
141 <<sfsAio.aio_offset<<" numF="<<numFree);
142
143// Update aio counters
144//
145 reqP->urProtocol()->aioUpdate(-1);
146
147// Recycle the buffer as we don't want to hold on to it
148//
149 if (buffP) {BPool->Release(buffP); buffP = 0;}
150
151// Place the object on the free queue if possible
152//
153 fqMutex.Lock();
154 if (numFree >= maxKeep)
155 {fqMutex.UnLock();
156 delete this;
157 } else {
158 next = fqFirst;
159 fqFirst = this;
160 numFree++;
161 fqMutex.UnLock();
162 }
163}
#define TRACEI(act, x)
Definition XrdTrace.hh:66
void Release(XrdBuffer *bp)
Definition XrdBuffer.cc:221

References XrdXrootd::BPool, buffP, next, reqP, XrdSfsAio::sfsAio, and TRACEI.

Referenced by XrdXrootdAioTask::Completed(), and XrdXrootdAioTask::Drain().

Here is the caller graph for this function:

Member Data Documentation

◆ buffP

◆ next

◆ pgrwP

XrdXrootdAioPgrw* const XrdXrootdAioBuff::pgrwP

Definition at line 55 of file XrdXrootdAioBuff.hh.

Referenced by XrdXrootdAioBuff(), XrdXrootdAioBuff(), and XrdXrootdAioPgrw::Alloc().

◆ reqP

◆ TraceID

const char * XrdXrootdAioBuff::TraceID = "AioBuff"
staticprotected

Definition at line 65 of file XrdXrootdAioBuff.hh.


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