25 #ifndef __XRD_CL_XROOTD_MSG_HANDLER_HH__
26 #define __XRD_CL_XROOTD_MSG_HANDLER_HH__
41 #include <arpa/inet.h>
54 class LocalFileHandler;
90 case EntryRedirect:
return "Redirected from: " + fromstr +
" to: "
94 "Falling back to virtual redirector: " + tostr;
98 case EntryWait:
return "Waited at server request. Resending: "
102 return "Failed at: " + fromstr +
", retrying at: " + tostr;
127 std::shared_ptr<SIDManager> sidMgr,
189 log->
Debug(
ExDbgMsg,
"[%s] MsgHandler created: 0x%x (message: %s ).",
211 std::vector<Message *>::iterator it;
279 uint32_t &bytesRead );
313 uint32_t &bytesWritten );
434 uint32_t &bytesRead );
441 uint32_t &bytesRead );
448 uint32_t &bytesRead );
455 uint32_t &bytesRead );
464 uint32_t btsRead = 0;
467 bytesRead += btsRead;
478 while( toBeRead > 0 )
480 uint32_t btsRead = 0;
483 bytesRead += btsRead;
500 uint32_t toBeRead, uint32_t &bytesRead );
638 std::string &result );
664 inline void Copy( uint32_t offchlst,
char *buffer,
size_t length )
670 char *dstbuf =
nullptr;
674 if( offchlst < itr->offset ||
675 offchlst >= itr->offset + itr->length )
677 size_t dstoff = offchlst - itr->offset;
678 dstbuf =
reinterpret_cast<char*
>( itr->buffer ) + dstoff;
679 cplen = itr->length - cplen;
683 if( cplen > length ) cplen = length;
684 memcpy( dstbuf, buffer, cplen );
@ kXR_pgread
Definition: XProtocol.hh:141
Definition: XrdClAnyObject.hh:33
const char * GetBuffer(uint32_t offset=0) const
Get the message buffer.
Definition: XrdClBuffer.hh:72
static PostMaster * GetPostMaster()
Get default post master.
static Log * GetLog()
Get default log.
Definition: XrdClLocalFileHandler.hh:33
Handle diagnostics.
Definition: XrdClLog.hh:101
void Debug(uint64_t topic, const char *format,...)
Print a debug message.
The message representation used throughout the system.
Definition: XrdClMessage.hh:30
const std::string & GetDescription() const
Get the description of the message.
Definition: XrdClMessage.hh:95
uint64_t GetSessionId() const
Get the session ID the message is meant for.
Definition: XrdClMessage.hh:111
Message handler.
Definition: XrdClPostMasterInterfaces.hh:50
StreamEvent
Events that may have occurred to the stream.
Definition: XrdClPostMasterInterfaces.hh:77
A hub for dispatching and receiving messages.
Definition: XrdClPostMaster.hh:48
Handle an async response.
Definition: XrdClXRootDResponses.hh:1051
A network socket.
Definition: XrdClSocket.hh:42
URL representation.
Definition: XrdClURL.hh:31
std::string GetHostId() const
Get the host part of the URL (user:password@host:port)
Definition: XrdClURL.hh:94
std::string GetLocation() const
Get location (protocol://host:port/path)
bool IsValid() const
Is the url valid.
Vector read info.
Definition: XrdClXRootDResponses.hh:986
Handle/Process/Forward XRootD messages.
Definition: XrdClXRootDMsgHandler.hh:110
void SetRedirectCounter(uint16_t redirectCounter)
Set the redirect counter.
Definition: XrdClXRootDMsgHandler.hh:407
Status ReadFromBuffer(char *&buffer, size_t &buflen, std::string &result)
bool pDirListStarted
Definition: XrdClXRootDMsgHandler.hh:760
Status UnPackReadVResponse(Message *msg)
Unpack a single readv response.
bool pHasLoadBalancer
Definition: XrdClXRootDMsgHandler.hh:705
XRootDStatus WriteMessageBody(Socket *socket, uint32_t &bytesWritten)
std::array< char, 4 > pPgReadCksumBuff
Definition: XrdClXRootDMsgHandler.hh:725
bool pMsgInFly
Definition: XrdClXRootDMsgHandler.hh:746
void SetFollowMetalink(bool followMetalink)
Definition: XrdClXRootDMsgHandler.hh:412
const Message * GetRequest() const
Get the request pointer.
Definition: XrdClXRootDMsgHandler.hh:359
void SetChunkList(ChunkList *chunkList)
Set the chunk list.
Definition: XrdClXRootDMsgHandler.hh:387
uint32_t pAsyncReadSize
Definition: XrdClXRootDMsgHandler.hh:718
bool IsRetriable(Message *request)
void SetHostList(HostList *hostList)
Set host list.
Definition: XrdClXRootDMsgHandler.hh:378
friend class HandleRspJob
Definition: XrdClXRootDMsgHandler.hh:111
uint16_t pNotAuthorizedCounter
Definition: XrdClXRootDMsgHandler.hh:713
ChunkList * pChunkList
Definition: XrdClXRootDMsgHandler.hh:709
std::unique_ptr< RedirectEntry > pRdirEntry
Definition: XrdClXRootDMsgHandler.hh:743
HostList * pHosts
Definition: XrdClXRootDMsgHandler.hh:704
static const size_t PageSize
Definition: XrdClXRootDMsgHandler.hh:652
uint32_t pAsyncOffset
Definition: XrdClXRootDMsgHandler.hh:715
bool OmitWait(Message *request, const URL &url)
std::atomic< bool > pTimeoutFence
Definition: XrdClXRootDMsgHandler.hh:753
void HandleResponse()
Unpack the message and call the response handler.
bool pReadVRawChunkHeaderDone
Definition: XrdClXRootDMsgHandler.hh:729
static const size_t MaxSslErrRetry
Definition: XrdClXRootDMsgHandler.hh:655
static const size_t CksumSize
Definition: XrdClXRootDMsgHandler.hh:653
uint32_t pReadRawCurrentOffset
Definition: XrdClXRootDMsgHandler.hh:723
XRootDStatus * ProcessStatus()
Extract the status information from the stuff that we got.
HostInfo pLoadBalancer
Definition: XrdClXRootDMsgHandler.hh:706
void UpdateTriedCGI(uint32_t errNo=0)
Update the "tried=" part of the CGI of the current message.
bool pOtherRawStarted
Definition: XrdClXRootDMsgHandler.hh:736
LocalFileHandler * pLFileHandler
Definition: XrdClXRootDMsgHandler.hh:698
void SetLoadBalancer(const HostInfo &loadBalancer)
Set the load balancer.
Definition: XrdClXRootDMsgHandler.hh:367
static Status ReadBytesAsync(Socket *socket, char *&buffer, uint32_t toBeRead, uint32_t &bytesRead)
Read a buffer asynchronously.
void HandleLocalRedirect(URL *url)
Handle a redirect to a local file.
Status RewriteRequestWait()
Some requests need to be rewritten also after getting kXR_wait - sigh.
bool RetriableErrorResponse(const Status &status)
Status ReadAsync(Socket *socket, uint32_t &bytesRead)
Definition: XrdClXRootDMsgHandler.hh:461
Status ReadRawRead(Message *msg, Socket *socket, uint32_t &bytesRead)
Handle a kXR_read in raw mode.
void DumpRedirectTraceBack()
Dump the redirect-trace-back into the log file.
virtual uint16_t GetSid() const
Status ParseResponse(AnyObject *&response)
virtual void OnStatusReady(const Message *message, XRootDStatus status)
The requested action has been performed and the status is available.
URL * pEffectiveDataServerUrl
Definition: XrdClXRootDMsgHandler.hh:695
std::vector< ChunkStatus > pChunkStatus
Definition: XrdClXRootDMsgHandler.hh:711
Status ReadPageAsync(Socket *socket, uint32_t &bytesRead)
bool pReadRawStarted
Definition: XrdClXRootDMsgHandler.hh:722
std::string pRedirectUrl
Definition: XrdClXRootDMsgHandler.hh:708
virtual uint16_t Examine(Message *msg)
XRootDMsgHandler(Message *msg, ResponseHandler *respHandler, const URL *url, std::shared_ptr< SIDManager > sidMgr, LocalFileHandler *lFileHandler)
Definition: XrdClXRootDMsgHandler.hh:124
bool pOksofarAsAnswer
Definition: XrdClXRootDMsgHandler.hh:703
uint32_t pReadVRawMsgOffset
Definition: XrdClXRootDMsgHandler.hh:728
RedirectTraceBack pRedirectTraceBack
Definition: XrdClXRootDMsgHandler.hh:744
bool pDirListWithStat
Definition: XrdClXRootDMsgHandler.hh:761
Status ReadRawPgRead(Message *msg, Socket *socket, uint32_t &bytesRead)
Handle a kXR_pgread in raw mode.
void SwitchOnRefreshFlag()
Switch on the refresh flag for some requests.
int32_t pReadVRawChunkIndex
Definition: XrdClXRootDMsgHandler.hh:732
std::vector< uint32_t > pPgReadCksums
Definition: XrdClXRootDMsgHandler.hh:726
Status ReadFromBuffer(char *&buffer, size_t &buflen, size_t size, std::string &result)
int pAggregatedWaitTime
Definition: XrdClXRootDMsgHandler.hh:741
std::shared_ptr< SIDManager > pSidMgr
Definition: XrdClXRootDMsgHandler.hh:697
~XRootDMsgHandler()
Destructor.
Definition: XrdClXRootDMsgHandler.hh:204
PostMaster * pPostMaster
Definition: XrdClXRootDMsgHandler.hh:696
void WaitDone(time_t now)
Status PostProcessReadV(VectorReadInfo *vReadInfo)
Post process vector read.
size_t pSslErrCnt
Definition: XrdClXRootDMsgHandler.hh:772
Status RewriteRequestRedirect(const URL &newUrl)
void SetStateful(bool stateful)
Definition: XrdClXRootDMsgHandler.hh:417
bool pStateful
Definition: XrdClXRootDMsgHandler.hh:740
time_t GetExpiration()
Get a timestamp after which we give up.
Definition: XrdClXRootDMsgHandler.hh:333
bool pReadVRawMsgDiscard
Definition: XrdClXRootDMsgHandler.hh:734
bool pReadVRawSizeError
Definition: XrdClXRootDMsgHandler.hh:731
readahead_list pReadVRawChunkHeader
Definition: XrdClXRootDMsgHandler.hh:733
char * pAsyncReadBuffer
Definition: XrdClXRootDMsgHandler.hh:719
void Copy(uint32_t offchlst, char *buffer, size_t length)
Definition: XrdClXRootDMsgHandler.hh:664
virtual uint8_t OnStreamEvent(StreamEvent event, XRootDStatus status)
Status ReadPagesAsync(Socket *socket, uint32_t &bytesRead)
Definition: XrdClXRootDMsgHandler.hh:475
XrdSys::KernelBuffer * pKBuff
Definition: XrdClXRootDMsgHandler.hh:710
bool pFollowMetalink
Definition: XrdClXRootDMsgHandler.hh:738
void HandleError(XRootDStatus status, Message *msg=0)
Recover error.
time_t pExpiration
Definition: XrdClXRootDMsgHandler.hh:701
Status ReadRawOther(Message *msg, Socket *socket, uint32_t &bytesRead)
Handle anything other than kXR_read and kXR_readv in raw mode.
Status ReadRawReadV(Message *msg, Socket *socket, uint32_t &bytesRead)
Handle a kXR_readv in raw mode.
Status RetryAtServer(const URL &url, RedirectEntry::Type entryType)
Retry the request at another server.
uint16_t pRedirectCounter
Definition: XrdClXRootDMsgHandler.hh:712
Message * pRequest
Definition: XrdClXRootDMsgHandler.hh:690
static const size_t PageWithCksum
Definition: XrdClXRootDMsgHandler.hh:654
void SetOksofarAsAnswer(bool oksofarAsAnswer)
Definition: XrdClXRootDMsgHandler.hh:351
virtual XRootDStatus ReadMessageBody(Message *msg, Socket *socket, uint32_t &bytesRead)
void SetKernelBuffer(XrdSys::KernelBuffer *kbuff)
Set the kernel buffer.
Definition: XrdClXRootDMsgHandler.hh:399
bool pHasSessionId
Definition: XrdClXRootDMsgHandler.hh:707
uint32_t pAsyncMsgSize
Definition: XrdClXRootDMsgHandler.hh:720
virtual bool IsRaw() const
Are we a raw writer or not?
virtual void Process(Message *msg)
URL pUrl
Definition: XrdClXRootDMsgHandler.hh:694
uint32_t pAsyncChunkOffset
Definition: XrdClXRootDMsgHandler.hh:716
static size_t NbPages(uint32_t dlen)
Definition: XrdClXRootDMsgHandler.hh:657
Status ParseXAttrResponse(char *data, size_t len, AnyObject *&response)
XrdSysCondVar pCV
Definition: XrdClXRootDMsgHandler.hh:767
ResponseHandler * pResponseHandler
Definition: XrdClXRootDMsgHandler.hh:693
Status pLastError
Definition: XrdClXRootDMsgHandler.hh:700
std::vector< Message * > pPartialResps
Definition: XrdClXRootDMsgHandler.hh:692
bool pReadVRawChunkHeaderStarted
Definition: XrdClXRootDMsgHandler.hh:730
XRootDStatus pStatus
Definition: XrdClXRootDMsgHandler.hh:699
std::list< std::unique_ptr< RedirectEntry > > RedirectTraceBack
Definition: XrdClXRootDMsgHandler.hh:650
void SetExpiration(time_t expiration)
Set a timestamp after which we give up.
Definition: XrdClXRootDMsgHandler.hh:325
virtual uint16_t InspectStatusRsp(Message *msg)
bool pRedirectAsAnswer
Definition: XrdClXRootDMsgHandler.hh:702
Message * pResponse
Definition: XrdClXRootDMsgHandler.hh:691
void SetRedirectAsAnswer(bool redirectAsAnswer)
Definition: XrdClXRootDMsgHandler.hh:342
uint32_t pAsyncChunkIndex
Definition: XrdClXRootDMsgHandler.hh:717
Status ReadFromBuffer(char *&buffer, size_t &buflen, T &result)
void TakeDownTimeoutFence()
Take down the timeout fence after oksofar response has been handled.
Request status.
Definition: XrdClXRootDResponses.hh:219
Definition: XrdSysPthread.hh:79
Definition: XrdSysKernelBuffer.hh:46
Definition: XrdClAnyObject.hh:26
const uint16_t suRetry
Definition: XrdClStatus.hh:40
std::vector< HostInfo > HostList
Definition: XrdClXRootDResponses.hh:1045
const uint64_t ExDbgMsg
Definition: XrdClConstants.hh:44
std::vector< ChunkInfo > ChunkList
List of chunks.
Definition: XrdClXRootDResponses.hh:980
static const int PageSize
Definition: XrdSysPageSize.hh:36
Definition: XProtocol.hh:500
kXR_int32 rlen
Definition: XProtocol.hh:505
Definition: XProtocol.hh:154
kXR_unt16 requestid
Definition: XProtocol.hh:156
Definition: XrdClXRootDResponses.hh:1034
URL url
URL of the host.
Definition: XrdClXRootDResponses.hh:1042
Definition: XrdClXRootDMsgHandler.hh:61
Type type
Definition: XrdClXRootDMsgHandler.hh:78
RedirectEntry(const URL &from, const URL &to, Type type)
Definition: XrdClXRootDMsgHandler.hh:70
XRootDStatus status
Definition: XrdClXRootDMsgHandler.hh:79
URL from
Definition: XrdClXRootDMsgHandler.hh:76
std::string ToString(bool prevok=true)
Definition: XrdClXRootDMsgHandler.hh:81
URL to
Definition: XrdClXRootDMsgHandler.hh:77
Type
Definition: XrdClXRootDMsgHandler.hh:63
@ EntryRedirect
Definition: XrdClXRootDMsgHandler.hh:64
@ EntryRetry
Definition: XrdClXRootDMsgHandler.hh:66
@ EntryRedirectOnWait
Definition: XrdClXRootDMsgHandler.hh:65
@ EntryWait
Definition: XrdClXRootDMsgHandler.hh:67
Procedure execution status.
Definition: XrdClStatus.hh:113
uint16_t code
Error type, or additional hints on what to do.
Definition: XrdClStatus.hh:145
bool IsOK() const
We're fine.
Definition: XrdClStatus.hh:122
Definition: XrdClXRootDMsgHandler.hh:644
ChunkStatus()
Definition: XrdClXRootDMsgHandler.hh:645
bool sizeError
Definition: XrdClXRootDMsgHandler.hh:646
bool done
Definition: XrdClXRootDMsgHandler.hh:647
Definition: XProtocol.hh:651