|
xrootd
|
Handle/Process/Forward XRootD messages. More...
#include <XrdClXRootDMsgHandler.hh>


Public Member Functions | |
| XRootDMsgHandler (Message *msg, ResponseHandler *respHandler, const URL *url, SIDManager *sidMgr) | |
| ~XRootDMsgHandler () | |
| Destructor. More... | |
| virtual uint8_t | OnIncoming (Message *msg) |
| virtual uint8_t | OnStreamEvent (StreamEvent event, uint16_t streamNum, Status status) |
| virtual void | OnStatusReady (const Message *message, Status status) |
| The requested action has been performed and the status is available. More... | |
| void | WaitDone (time_t now) |
| void | SetExpiration (time_t expiration) |
| Set a timestamp after which we give up. More... | |
| void | SetRedirectAsAnswer (bool redirectAsAnswer) |
| const Message * | GetRequest () const |
| Get the request pointer. More... | |
| void | SetLoadBalancer (const HostInfo &loadBalancer) |
| Set the load balancer. More... | |
| void | SetHostList (HostList *hostList) |
| Set host list. More... | |
| void | SetChunkList (ChunkList *chunkList) |
| Set the chunk list. More... | |
| void | SetRedirectCounter (uint16_t redirectCounter) |
| Set the redirect coutner. More... | |
Public Member Functions inherited from XrdCl::IncomingMsgHandler | |
| virtual | ~IncomingMsgHandler () |
| Event types that the message handler may receive. More... | |
Public Member Functions inherited from XrdCl::OutgoingMsgHandler | |
| virtual | ~OutgoingMsgHandler () |
| virtual void | OnReadyToSend (Message *msg, uint16_t streamNum) |
Private Member Functions | |
| void | HandleError (Status status, Message *msg=0) |
| Recover error. More... | |
| Status | RetryAtServer (const URL &url) |
| Retry the request at another server. More... | |
| void | HandleResponse () |
| Unpack the message and call the response handler. More... | |
| XRootDStatus * | ProcessStatus () |
| Extract the status information from the stuff that we got. More... | |
| Status | ParseResponse (AnyObject *&response) |
| Status | RewriteRequestRedirect (const URL::ParamsMap &newCgi) |
| Status | RewriteRequestWait () |
| Some requests need to be rewriten also after getting kXR_wait - sigh. More... | |
| Status | UnpackVectorRead (VectorReadInfo *vReadInfo, ChunkList *list, char *sourceBuffer, uint32_t sourceBufferSize) |
| Unpack vector read. More... | |
| void | UpdateTriedCGI () |
| Update the "tried=" part of the CGI of the current message. More... | |
| void | SwitchOnRefreshFlag () |
| Switch on the refresh flag for some requests. More... | |
Private Attributes | |
| Message * | pRequest |
| Message * | pResponse |
| std::vector< Message * > | pPartialResps |
| ResponseHandler * | pResponseHandler |
| URL | pUrl |
| PostMaster * | pPostMaster |
| SIDManager * | pSidMgr |
| Status | pStatus |
| time_t | pExpiration |
| bool | pRedirectAsAnswer |
| HostList * | pHosts |
| bool | pHasLoadBalancer |
| HostInfo | pLoadBalancer |
| bool | pHasSessionId |
| std::string | pRedirectCgi |
| ChunkList * | pChunkList |
| uint16_t | pRedirectCounter |
Additional Inherited Members | |
Public Types inherited from XrdCl::IncomingMsgHandler | |
| enum | Action { Take = 0x01, Ignore = 0x02, RemoveHandler = 0x04 } |
| Actions to be taken after a message is processed by the handler. More... | |
| enum | StreamEvent { Ready = 1, Broken = 2, Timeout = 3, FatalError = 4 } |
| Events that may have occured to the stream. More... | |
Handle/Process/Forward XRootD messages.
|
inline |
Constructor
| msg | message that has been sent out |
| respHandler | response handler to be called then the final final response arrives |
| url | the url the message has been sent to |
| sidMgr | the sid manager used to allocate SID for the initial message |
References XrdCl::DefaultEnv::GetPostMaster(), XrdCl::Message::GetSessionId(), pHasSessionId, and pPostMaster.
|
inline |
Destructor.
References pHasSessionId, pPartialResps, pRequest, and pResponse.
|
inline |
Get the request pointer.
References pRequest.
Recover error.
References XrdCl::Status::code, XrdCl::errErrorResponse, XrdCl::Status::errNo, XrdCl::errOperationExpired, XrdCl::Log::Error(), XrdCl::Message::GetDescription(), XrdCl::URL::GetHostId(), XrdCl::DefaultEnv::GetLog(), XrdCl::Message::GetSessionId(), HandleResponse(), XrdCl::Status::IsFatal(), XrdCl::Status::IsOK(), XrdCl::URL::IsValid(), kXR_FSError, kXR_IOError, kXR_NotFound, kXR_ServerError, pExpiration, pLoadBalancer, pRequest, pResponse, pStatus, pUrl, RetryAtServer(), SwitchOnRefreshFlag(), XrdCl::Status::ToString(), UpdateTriedCGI(), XrdCl::HostInfo::url, and XrdCl::XRootDMsg.
Referenced by OnIncoming(), OnStatusReady(), OnStreamEvent(), and WaitDone().
|
private |
Unpack the message and call the response handler.
References XrdCl::Status::code, XrdCl::errOperationExpired, XrdCl::Buffer::GetBuffer(), XrdCl::ResponseHandler::HandleResponseWithHosts(), ClientRequest::header, XrdCl::Status::IsOK(), ParseResponse(), pHosts, pRequest, pResponseHandler, ProcessStatus(), pSidMgr, XrdCl::SIDManager::ReleaseSID(), ClientRequestHdr::streamid, XrdCl::SIDManager::TimeOutSID(), and XrdCl::XRootDTransport::UnMarshallRequest().
Referenced by HandleError(), and OnIncoming().
|
virtual |
Examine an incomming message, and decide on the action to be taken
| msg | the message, may be zero if receive failed |
Implements XrdCl::IncomingMsgHandler.
References ServerResponseBody_Attn::actnum, XrdCl::Buffer::Append(), ServerResponse::attn, ServerResponse::body, ServerResponseHeader::dlen, XrdCl::Log::Dump(), XrdCl::errErrorResponse, XrdCl::errInvalidRedirectURL, XrdCl::errInvalidResponse, ServerResponseBody_Error::errmsg, ServerResponseBody_Error::errnum, XrdCl::Log::Error(), ServerResponse::error, XrdCl::errRedirectLimit, XrdCl::AnyObject::Get(), XrdCl::Buffer::GetBuffer(), XrdCl::Message::GetDescription(), XrdCl::URL::GetHostId(), XrdCl::DefaultEnv::GetLog(), XrdCl::URL::GetParams(), XrdCl::PostMaster::GetTaskManager(), HandleError(), HandleResponse(), ServerResponse::hdr, ClientRequest::header, ServerResponseBody_Redirect::host, XrdCl::IncomingMsgHandler::Ignore, ServerResponseBody_Wait::infomsg, XrdCl::Status::IsOK(), XrdCl::URL::IsValid(), kXR_asynresp, kXR_attn, kXR_attrMeta, kXR_error, kXR_isManager, kXR_ok, kXR_oksofar, kXR_redirect, kXR_wait, kXR_waitresp, pHasLoadBalancer, pHosts, pLoadBalancer, ServerResponseBody_Redirect::port, pPartialResps, pPostMaster, pRedirectAsAnswer, pRedirectCgi, pRedirectCounter, pRequest, pResponse, XrdCl::XRootDQuery::ProtocolVersion, pStatus, pUrl, XrdCl::PostMaster::QueryTransport(), ServerResponse::redirect, XrdCl::TaskManager::RegisterTask(), XrdCl::IncomingMsgHandler::RemoveHandler, ClientRequestHdr::requestid, RetryAtServer(), RewriteRequestRedirect(), RewriteRequestWait(), ServerResponseBody_Wait::seconds, ServerResponseBody_Waitresp::seconds, XrdCl::XRootDQuery::ServerFlags, XrdCl::Utils::splitString(), ServerResponseHeader::status, XrdCl::stError, XrdCl::stFatal, XrdCl::stOK, ClientRequestHdr::streamid, ServerResponseHeader::streamid, XrdCl::suXRDRedirect, XrdCl::IncomingMsgHandler::Take, XrdCl::XRootDTransport::UnMarshallBody(), XrdCl::XRootDTransport::UnMarshallHeader(), XrdCl::HostInfo::url, ServerResponse::wait, ServerResponse::waitresp, and XrdCl::XRootDMsg.
The requested action has been performed and the status is available.
Implements XrdCl::OutgoingMsgHandler.
References XrdCl::Log::Dump(), XrdCl::Log::Error(), XrdCl::Message::GetDescription(), XrdCl::URL::GetHostId(), XrdCl::DefaultEnv::GetLog(), HandleError(), XrdCl::Status::IsOK(), pExpiration, pPostMaster, pUrl, XrdCl::PostMaster::Receive(), and XrdCl::XRootDMsg.
|
virtual |
Handle an event other that a message arrival
| event | type of the event |
| streamNum | stream concerned |
| status | status info |
Reimplemented from XrdCl::IncomingMsgHandler.
References XrdCl::Log::Dump(), XrdCl::Message::GetDescription(), XrdCl::URL::GetHostId(), XrdCl::DefaultEnv::GetLog(), HandleError(), pRequest, pUrl, XrdCl::IncomingMsgHandler::Ready, XrdCl::IncomingMsgHandler::RemoveHandler, and XrdCl::XRootDMsg.
Parse the response and put it in an object that could be passed to the user
References XrdCl::Buffer::Allocate(), XrdCl::Buffer::Append(), ServerResponse::body, ServerResponse::buffer, XrdCl::ChunkInfo::buffer, ServerResponseBody_Buffer::data, ClientRequest::dirlist, ClientDirlistRequest::dlen, ClientOpenRequest::dlen, ServerResponseHeader::dlen, XrdCl::Log::Dump(), XrdCl::errInvalidMessage, XrdCl::errInvalidResponse, XrdCl::Log::Error(), ServerResponseBody_Protocol::flags, XrdCl::Buffer::GetBuffer(), XrdCl::Message::GetDescription(), XrdCl::URL::GetHostId(), XrdCl::URL::GetHostName(), XrdCl::DefaultEnv::GetLog(), XrdCl::URL::GetPort(), XrdCl::Message::GetSessionId(), ServerResponse::hdr, ClientRequest::header, XrdCl::Status::IsOK(), kXR_chmod, kXR_close, kXR_dirlist, kXR_locate, kXR_mkdir, kXR_mv, kXR_ok, kXR_open, kXR_ping, kXR_prepare, kXR_protocol, kXR_query, kXR_read, kXR_readv, kXR_redirect, kXR_retstat, kXR_rm, kXR_rmdir, kXR_set, kXR_stat, kXR_sync, kXR_truncate, kXR_vfs, kXR_write, XrdCl::ChunkInfo::length, XrdCl::ChunkInfo::offset, ClientRequest::open, ClientOpenRequest::options, ClientStatRequest::options, pChunkList, pPartialResps, pRedirectAsAnswer, pRedirectCgi, pRequest, pResponse, ServerResponse::protocol, pUrl, ServerResponseBody_Protocol::pval, ClientRequestHdr::requestid, XrdCl::AnyObject::Set(), ClientRequest::stat, ServerResponseHeader::status, XrdCl::stError, UnpackVectorRead(), and XrdCl::XRootDMsg.
Referenced by HandleResponse().
|
private |
Extract the status information from the stuff that we got.
References ServerResponse::body, XrdCl::Status::code, XrdCl::errErrorResponse, ServerResponseBody_Error::errmsg, XrdCl::Status::errNo, ServerResponseBody_Error::errnum, ServerResponse::error, XrdCl::Buffer::GetBuffer(), XrdCl::Status::IsOK(), pResponse, pStatus, and XrdCl::XRootDStatus::SetErrorMessage().
Referenced by HandleResponse().
Retry the request at another server.
References pExpiration, pHosts, pPostMaster, pRequest, pUrl, and XrdCl::PostMaster::Send().
Referenced by HandleError(), OnIncoming(), and WaitDone().
|
private |
Perform the changes to the original request needed by the redirect procedure - allocate new streamid, append redirection data and such
References XrdCl::SIDManager::AllocateSID(), XrdCl::MessageUtils::AppendCGI(), XrdCl::Log::Error(), XrdCl::AnyObject::Get(), XrdCl::Buffer::GetBuffer(), XrdCl::Message::GetDescription(), XrdCl::URL::GetHostId(), XrdCl::DefaultEnv::GetLog(), ClientRequest::header, XrdCl::Status::IsOK(), XrdCl::XRootDTransport::MarshallRequest(), pPostMaster, pRequest, pSidMgr, pUrl, XrdCl::PostMaster::QueryTransport(), XrdCl::SIDManager::ReleaseSID(), XrdCl::XRootDQuery::SIDManager, ClientRequestHdr::streamid, XrdCl::XRootDTransport::UnMarshallRequest(), and XrdCl::XRootDMsg.
Referenced by OnIncoming().
|
private |
Some requests need to be rewriten also after getting kXR_wait - sigh.
References XrdCl::Buffer::GetBuffer(), ClientRequest::header, kXR_locate, kXR_open, kXR_refresh, ClientRequest::locate, XrdCl::XRootDTransport::MarshallRequest(), ClientLocateRequest::options, pRequest, ClientRequestHdr::requestid, XrdCl::XRootDTransport::SetDescription(), and XrdCl::XRootDTransport::UnMarshallRequest().
Referenced by OnIncoming().
|
inline |
|
inline |
Set a timestamp after which we give up.
References pExpiration.
Referenced by XrdCl::MessageUtils::SendMessage().
|
inline |
|
inline |
Set the load balancer.
References XrdCl::URL::IsValid(), pHasLoadBalancer, pLoadBalancer, and XrdCl::HostInfo::url.
Referenced by XrdCl::MessageUtils::SendMessage().
|
inline |
Treat the kXR_redirect response as a valid answer to the message and notify the handler with the URL as a response
References pRedirectAsAnswer.
Referenced by XrdCl::MessageUtils::SendMessage().
|
inline |
Set the redirect coutner.
References pRedirectCounter.
Referenced by XrdCl::MessageUtils::SendMessage().
|
private |
Switch on the refresh flag for some requests.
References XrdCl::Buffer::GetBuffer(), ClientRequest::header, kXR_locate, kXR_open, kXR_refresh, ClientRequest::locate, XrdCl::XRootDTransport::MarshallRequest(), ClientLocateRequest::options, pRequest, ClientRequestHdr::requestid, XrdCl::XRootDTransport::SetDescription(), and XrdCl::XRootDTransport::UnMarshallRequest().
Referenced by HandleError().
|
private |
Unpack vector read.
References XrdCl::errInvalidResponse, XrdCl::Log::Error(), XrdCl::VectorReadInfo::GetChunks(), XrdCl::Message::GetDescription(), XrdCl::URL::GetHostId(), XrdCl::DefaultEnv::GetLog(), readahead_list::offset, pRequest, pUrl, readahead_list::rlen, XrdCl::VectorReadInfo::SetSize(), XrdCl::stFatal, and XrdCl::XRootDMsg.
Referenced by ParseResponse().
|
private |
Update the "tried=" part of the CGI of the current message.
References XrdCl::MessageUtils::AppendCGI(), XrdCl::URL::GetHostName(), XrdCl::XRootDTransport::MarshallRequest(), pRequest, pUrl, and XrdCl::XRootDTransport::UnMarshallRequest().
Referenced by HandleError().
| void XrdCl::XRootDMsgHandler::WaitDone | ( | time_t | now | ) |
Called after the wait time for kXR_wait has elapsed
| now | current timestamp |
References HandleError(), pUrl, and RetryAtServer().
|
private |
Referenced by ParseResponse(), and SetChunkList().
|
private |
Referenced by HandleError(), OnStatusReady(), RetryAtServer(), and SetExpiration().
|
private |
Referenced by OnIncoming(), and SetLoadBalancer().
|
private |
Referenced by XRootDMsgHandler(), and ~XRootDMsgHandler().
|
private |
Referenced by HandleResponse(), OnIncoming(), RetryAtServer(), and SetHostList().
|
private |
Referenced by HandleError(), OnIncoming(), and SetLoadBalancer().
|
private |
Referenced by OnIncoming(), ParseResponse(), and ~XRootDMsgHandler().
|
private |
Referenced by OnIncoming(), OnStatusReady(), RetryAtServer(), RewriteRequestRedirect(), and XRootDMsgHandler().
|
private |
Referenced by OnIncoming(), ParseResponse(), and SetRedirectAsAnswer().
|
private |
Referenced by OnIncoming(), and ParseResponse().
|
private |
Referenced by OnIncoming(), and SetRedirectCounter().
|
private |
|
private |
Referenced by HandleError(), OnIncoming(), ParseResponse(), ProcessStatus(), and ~XRootDMsgHandler().
|
private |
Referenced by HandleResponse().
|
private |
Referenced by HandleResponse(), and RewriteRequestRedirect().
|
private |
Referenced by HandleError(), OnIncoming(), and ProcessStatus().
|
private |
1.8.3.1