XRootD
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

◆ 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) {}

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
int bsize
Definition: XrdBuffer.hh:46
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()
void aioUpdate(int val)
XrdBuffManager * BPool

References aiocb::aio_buf, aiocb::aio_nbytes, XrdXrootdProtocol::aioUpdate(), XrdXrootdProtocol::as_segsize, XrdXrootd::BPool, XrdBuffer::bsize, XrdBuffer::buff, buffP, XrdSfsAio::cksVec, next, XrdBuffManager::Obtain(), 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 }
void Completed(XrdXrootdAioBuff *aioP)

◆ 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 }

◆ Recycle()

void XrdXrootdAioBuff::Recycle ( void  )
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 }
off_t aio_offset
Definition: XrdSfsAio.hh:49
#define TRACEI(act, x)
Definition: XrdTrace.hh:66
void Release(XrdBuffer *bp)
Definition: XrdBuffer.cc:221

References XrdXrootd::BPool, XrdBuffManager::Release(), and TRACEI.

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

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

Member Data Documentation

◆ buffP

XrdBuffer* XrdXrootdAioBuff::buffP
protected

◆ next

◆ pgrwP

XrdXrootdAioPgrw* const XrdXrootdAioBuff::pgrwP

Definition at line 55 of file XrdXrootdAioBuff.hh.

Referenced by XrdXrootdAioPgrw::Alloc().

◆ reqP

XrdXrootdAioTask* XrdXrootdAioBuff::reqP
protected

Definition at line 66 of file XrdXrootdAioBuff.hh.

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

◆ 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: