xrootd
Loading...
Searching...
No Matches
XrdSsiFileReq.hh
Go to the documentation of this file.
1#ifndef __SSI_FILEREQ_H__
2#define __SSI_FILEREQ_H__
3/******************************************************************************/
4/* */
5/* X r d S s i F i l e R e q . h h */
6/* */
7/* (c) 2013 by the Board of Trustees of the Leland Stanford, Jr., University */
8/* Produced by Andrew Hanushevsky for Stanford University under contract */
9/* DE-AC02-76-SFO0515 with the Department of Energy */
10/* */
11/* This file is part of the XRootD software suite. */
12/* */
13/* XRootD is free software: you can redistribute it and/or modify it under */
14/* the terms of the GNU Lesser General Public License as published by the */
15/* Free Software Foundation, either version 3 of the License, or (at your */
16/* option) any later version. */
17/* */
18/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
19/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
20/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
21/* License for more details. */
22/* */
23/* You should have received a copy of the GNU Lesser General Public License */
24/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
25/* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
26/* */
27/* The copyright holder's institutional names and contributor's names may not */
28/* be used to endorse or promote products derived from this software without */
29/* specific prior written permission of the institution or contributor. */
30/******************************************************************************/
31
32#include <cstring>
33#include <sys/types.h>
34
35#include "Xrd/XrdJob.hh"
36#include "Xrd/XrdScheduler.hh"
38#include "XrdSfs/XrdSfsXio.hh"
43
44class XrdOucErrInfo;
45class XrdSsiAlert;
47class XrdSsiFileSess;
49class XrdSsiRRInfo;
50class XrdSsiService;
51class XrdSsiStream;
52
53class XrdSsiFileReq : public XrdSsiRequest, public XrdOucEICB, public XrdJob
54{
55public:
56
57
58// SsiRequest methods
59//
60 void Activate(XrdOucBuffer *oP, XrdSfsXioHandle bR, int rSz);
61
63
65 XrdSsiFileSess *fP, const char *sn,
66 const char *id, unsigned int rnum);
67
68 void Finalize();
69
71
72 void Finished( XrdSsiRequest &rqstR,
73 const XrdSsiRespInfo &rInfo,
74 bool cancel=false) {}
75
76 char *GetRequest(int &rLen);
77
78 bool ProcessResponse(const XrdSsiErrInfo &eInfo,
79 const XrdSsiRespInfo &resp);
80
81 XrdSfsXferSize Read(bool &done,
82 char *buffer,
83 XrdSfsXferSize blen);
84
86
87 int Send(XrdSfsDio *sfDio, XrdSfsXferSize size);
88
89static void SetMax(int mVal) {freeMax = mVal;}
90
92
93// OucEICB methods
94//
95 void Done(int &Result, XrdOucErrInfo *cbInfo,
96 const char *path=0);
97
98 int Same(unsigned long long arg1, unsigned long long arg2)
99 {return 0;}
100// Job methods
101//
102 void DoIt();
103
104// Constructor and destructor
105//
106 XrdSsiFileReq(const char *cID=0)
107 : frqMutex(XrdSsiMutex::Recursive)
108 {Init(cID);}
109
110virtual ~XrdSsiFileReq() {if (tident) free(tident);}
111
114
115private:
116
117void BindDone(); // Override
118void Dispose(); // Override
119int Emsg(const char *pfx, int ecode, const char *op);
120int Emsg(const char *pfx, XrdSsiErrInfo &eObj,
121 const char *op);
122void Init(const char *cID=0);
124 XrdSfsXferSize blen);
126 XrdSfsXferSize blen);
128 XrdSfsXferSize blen);
129void Recycle();
130void WakeUp(XrdSsiAlert *aP=0);
131
134static int freeCnt;
135static int freeMax;
136
141unsigned long long respCBarg;
142
146
147char *tident;
148const char *sessN;
153long long respOff;
154union {long long fileSz;
156 };
163unsigned int reqID;
169char rID[8];
170};
171#endif
int XrdSfsXferSize
Definition XrdSfsInterface.hh:130
class XrdBuffer * XrdSfsXioHandle
Definition XrdSfsXio.hh:46
Definition XrdJob.hh:43
Definition XrdOucBuffer.hh:141
Definition XrdOucErrInfo.hh:483
Definition XrdOucErrInfo.hh:101
Definition XrdSfsDio.hh:47
Definition XrdSsiAlert.hh:38
Definition XrdSsiErrInfo.hh:41
Definition XrdSsiFileReq.hh:54
XrdSsiFileResource * fileR
Definition XrdSsiFileReq.hh:150
void Alert(XrdSsiRespInfoMsg &aMsg)
Send or receive a server generated alert.
XrdOucBuffer * oucBuff
Definition XrdSsiFileReq.hh:158
XrdSsiStream::Buffer * strBuff
Definition XrdSsiFileReq.hh:159
bool WantResponse(XrdOucErrInfo &eInfo)
int Emsg(const char *pfx, int ecode, const char *op)
bool isEnding
Definition XrdSsiFileReq.hh:168
bool schedDone
Definition XrdSsiFileReq.hh:167
XrdSfsXferSize Read(bool &done, char *buffer, XrdSfsXferSize blen)
int Same(unsigned long long arg1, unsigned long long arg2)
Definition XrdSsiFileReq.hh:98
char * GetRequest(int &rLen)
void Finished(XrdSsiRequest &rqstR, const XrdSsiRespInfo &rInfo, bool cancel=false)
Definition XrdSsiFileReq.hh:72
static int freeCnt
Definition XrdSsiFileReq.hh:134
static XrdSsiFileReq * Alloc(XrdOucErrInfo *eP, XrdSsiFileResource *rP, XrdSsiFileSess *fP, const char *sn, const char *id, unsigned int rnum)
XrdSsiAlert * alrtSent
Definition XrdSsiFileReq.hh:143
rspState
Definition XrdSsiFileReq.hh:113
@ isNew
Definition XrdSsiFileReq.hh:113
@ isBound
Definition XrdSsiFileReq.hh:113
@ isAbort
Definition XrdSsiFileReq.hh:113
@ isBegun
Definition XrdSsiFileReq.hh:113
@ isDone
Definition XrdSsiFileReq.hh:113
@ isMax
Definition XrdSsiFileReq.hh:113
XrdSsiFileSess * fileP
Definition XrdSsiFileReq.hh:151
int sendStrmA(XrdSsiStream *strmP, XrdSfsDio *sfDio, XrdSfsXferSize blen)
long long fileSz
Definition XrdSsiFileReq.hh:154
static XrdSysMutex aqMutex
Definition XrdSsiFileReq.hh:132
XrdSsiMutex frqMutex
Definition XrdSsiFileReq.hh:137
void RelRequestBuffer()
unsigned int reqID
Definition XrdSsiFileReq.hh:163
XrdSfsXioHandle sfsBref
Definition XrdSsiFileReq.hh:157
XrdSfsXferSize readStrmP(XrdSsiStream *strmP, char *buff, XrdSfsXferSize blen)
XrdOucEICB * respCB
Definition XrdSsiFileReq.hh:140
int reqSize
Definition XrdSsiFileReq.hh:162
void Init(const char *cID=0)
const char * sessN
Definition XrdSsiFileReq.hh:148
bool ProcessResponse(const XrdSsiErrInfo &eInfo, const XrdSsiRespInfo &resp)
long long respOff
Definition XrdSsiFileReq.hh:153
bool respWait
Definition XrdSsiFileReq.hh:165
char rID[8]
Definition XrdSsiFileReq.hh:169
XrdSsiAlert * alrtPend
Definition XrdSsiFileReq.hh:144
bool haveResp
Definition XrdSsiFileReq.hh:164
XrdSfsXferSize readStrmA(XrdSsiStream *strmP, char *buff, XrdSfsXferSize blen)
rspState urState
Definition XrdSsiFileReq.hh:161
bool strmEOF
Definition XrdSsiFileReq.hh:166
XrdSsiFileReq(const char *cID=0)
Definition XrdSsiFileReq.hh:106
int Send(XrdSfsDio *sfDio, XrdSfsXferSize size)
XrdOucErrInfo * cbInfo
Definition XrdSsiFileReq.hh:149
XrdSysSemaphore * finWait
Definition XrdSsiFileReq.hh:139
static XrdSsiFileReq * freeReq
Definition XrdSsiFileReq.hh:133
void Activate(XrdOucBuffer *oP, XrdSfsXioHandle bR, int rSz)
void WakeUp(XrdSsiAlert *aP=0)
char * tident
Definition XrdSsiFileReq.hh:147
static int freeMax
Definition XrdSsiFileReq.hh:135
virtual ~XrdSsiFileReq()
Definition XrdSsiFileReq.hh:110
reqState myState
Definition XrdSsiFileReq.hh:160
XrdSsiAlert * alrtLast
Definition XrdSsiFileReq.hh:145
unsigned long long respCBarg
Definition XrdSsiFileReq.hh:141
char * respBuf
Definition XrdSsiFileReq.hh:152
int respLen
Definition XrdSsiFileReq.hh:155
void Done(int &Result, XrdOucErrInfo *cbInfo, const char *path=0)
static void SetMax(int mVal)
Definition XrdSsiFileReq.hh:89
XrdSsiFileReq * nextReq
Definition XrdSsiFileReq.hh:138
int Emsg(const char *pfx, XrdSsiErrInfo &eObj, const char *op)
reqState
Definition XrdSsiFileReq.hh:112
@ doRsp
Definition XrdSsiFileReq.hh:112
@ erRsp
Definition XrdSsiFileReq.hh:112
@ wtReq
Definition XrdSsiFileReq.hh:112
@ odRsp
Definition XrdSsiFileReq.hh:112
@ wtRsp
Definition XrdSsiFileReq.hh:112
@ rsEnd
Definition XrdSsiFileReq.hh:112
@ xqReq
Definition XrdSsiFileReq.hh:112
Definition XrdSsiFileResource.hh:42
Definition XrdSsiFileSess.hh:47
Definition XrdSsiAtomics.hh:110
Definition XrdSsiRRInfo.hh:38
Definition XrdSsiRequest.hh:71
bool Finished(bool cancel=false)
Definition XrdSsiRespInfo.hh:87
Definition XrdSsiService.hh:55
Definition XrdSsiStream.hh:64
Definition XrdSsiStream.hh:54
Definition XrdSysPthread.hh:165
Definition XrdSysPthread.hh:494
Definition XrdSsiRespInfo.hh:44