xrootd
Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
XrdCl::FileStateHandler Class Reference

Handle the stateful operations. More...

#include <XrdClFileStateHandler.hh>

Collaboration diagram for XrdCl::FileStateHandler:
Collaboration graph
[legend]

Classes

struct  RequestData
 

Public Types

enum  FileStatus {
  Closed, Opened, Error, Recovering,
  OpenInProgress, CloseInProgress
}
 State of the file. More...
 

Public Member Functions

 FileStateHandler ()
 Constructor. More...
 
 ~FileStateHandler ()
 Destructor. More...
 
XRootDStatus Open (const std::string &url, uint16_t flags, uint16_t mode, ResponseHandler *handler, uint16_t timeout=0)
 
XRootDStatus Close (ResponseHandler *handler, uint16_t timeout=0)
 
XRootDStatus Stat (bool force, ResponseHandler *handler, uint16_t timeout=0)
 
XRootDStatus Read (uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0)
 
XRootDStatus Write (uint64_t offset, uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout=0)
 
XRootDStatus Sync (ResponseHandler *handler, uint16_t timeout=0)
 
XRootDStatus Truncate (uint64_t size, ResponseHandler *handler, uint16_t timeout=0)
 
XRootDStatus VectorRead (const ChunkList &chunks, void *buffer, ResponseHandler *handler, uint16_t timeout=0)
 
void OnOpen (const XRootDStatus *status, const OpenInfo *openInfo, const HostList *hostList)
 Process the results of the opening operation. More...
 
void OnClose (const XRootDStatus *status)
 Process the results of the closing operation. More...
 
void OnStateError (XRootDStatus *status, Message *message, ResponseHandler *userHandler, MessageSendParams &sendParams)
 Handle an error while sending a stateful message. More...
 
void OnStateRedirection (RedirectInfo *redirectInfo, Message *message, ResponseHandler *userHandler, MessageSendParams &sendParams)
 Handle stateful redirect. More...
 
void OnStateResponse (XRootDStatus *status, Message *message, AnyObject *response, HostList *hostList)
 Handle stateful response. More...
 
bool IsOpen () const
 Check if the file is open. More...
 
void EnableReadRecovery (bool enable)
 
void EnableWriteRecovery (bool enable)
 
std::string GetDataServer () const
 Get the data server the file is accessed at. More...
 
URL GetLastURL () const
 Get final url with all the cgi information. More...
 
void Lock ()
 Lock the internal lock. More...
 
void UnLock ()
 Unlock the internal lock. More...
 
void Tick (time_t now)
 Tick. More...
 
void TimeOutRequests (time_t now)
 Declare timeout on requests being recovered. More...
 
void AfterForkChild ()
 Called in the child process after the fork. More...
 

Private Types

typedef std::list< RequestDataRequestList
 

Private Member Functions

Status SendOrQueue (const URL &url, Message *msg, ResponseHandler *handler, MessageSendParams &sendParams)
 Send a message to a host or put it in the recovery queue. More...
 
bool IsRecoverable (const XRootDStatus &stataus) const
 Check if the stateful error is recoverable. More...
 
Status RecoverMessage (RequestData rd, bool callbackOnFailure=true)
 
Status RunRecovery ()
 Run the recovery procedure if appropriate. More...
 
bool IsReadOnly () const
 Check if the file is open for read only. More...
 
Status ReOpenFileAtServer (const URL &url, uint16_t timeout)
 Re-open the current file at a given server. More...
 
void FailMessage (RequestData rd, XRootDStatus status)
 Fail a message. More...
 
void FailQueuedMessages (XRootDStatus status)
 Fail queued messages. More...
 
void ReSendQueuedMessages ()
 Re-send queued messages. More...
 
void ReWriteFileHandle (Message *msg)
 Re-write file handle. More...
 
void ResetMonitoringVars ()
 Reset monitoring vars. More...
 
void MonitorClose (const XRootDStatus *status)
 Dispatch monitoring information on close. More...
 

Private Attributes

XrdSysMutex pMutex
 
FileStatus pFileState
 
XRootDStatus pStatus
 
StatInfopStatInfo
 
URLpFileUrl
 
URLpDataServer
 
URLpLoadBalancer
 
URLpStateRedirect
 
uint8_t * pFileHandle
 
uint16_t pOpenMode
 
uint16_t pOpenFlags
 
RequestList pToBeRecovered
 
std::set< Message * > pInTheFly
 
uint64_t pSessionId
 
bool pDoRecoverRead
 
bool pDoRecoverWrite
 
timeval pOpenTime
 
uint64_t pRBytes
 
uint64_t pVBytes
 
uint64_t pWBytes
 
uint64_t pVSegs
 
uint64_t pRCount
 
uint64_t pVCount
 
uint64_t pWCount
 
XRootDStatus pCloseReason
 

Detailed Description

Handle the stateful operations.

Member Typedef Documentation

Member Enumeration Documentation

State of the file.

Enumerator
Closed 

The file is closed.

Opened 

Opening has succeeded.

Error 

Opening has failed.

Recovering 

Recovering from an error.

OpenInProgress 

Opening is in progress.

CloseInProgress 

Closing operation is in progress.

Constructor & Destructor Documentation

XrdCl::FileStateHandler::FileStateHandler ( )
XrdCl::FileStateHandler::~FileStateHandler ( )

Member Function Documentation

void XrdCl::FileStateHandler::AfterForkChild ( )
XRootDStatus XrdCl::FileStateHandler::Close ( ResponseHandler handler,
uint16_t  timeout = 0 
)
void XrdCl::FileStateHandler::EnableReadRecovery ( bool  enable)

Enable/disable state recovery procedures while the file is open for reading

References pDoRecoverRead, and pMutex.

Referenced by XrdCl::File::EnableReadRecovery().

void XrdCl::FileStateHandler::EnableWriteRecovery ( bool  enable)

Enable/disable state recovery procedures while the file is open for writing or read/write

References pDoRecoverWrite, and pMutex.

Referenced by XrdCl::File::EnableWriteRecovery().

void XrdCl::FileStateHandler::FailMessage ( RequestData  rd,
XRootDStatus  status 
)
private
void XrdCl::FileStateHandler::FailQueuedMessages ( XRootDStatus  status)
private

Fail queued messages.

References FailMessage(), and pToBeRecovered.

Referenced by OnOpen(), and RunRecovery().

std::string XrdCl::FileStateHandler::GetDataServer ( ) const

Get the data server the file is accessed at.

References XrdCl::URL::GetHostId(), pDataServer, and pMutex.

Referenced by XrdCl::File::GetDataServer().

URL XrdCl::FileStateHandler::GetLastURL ( ) const

Get final url with all the cgi information.

References pDataServer, and pMutex.

Referenced by XrdCl::File::GetLastURL().

bool XrdCl::FileStateHandler::IsOpen ( ) const

Check if the file is open.

References Opened, pFileState, pMutex, and Recovering.

Referenced by XrdCl::File::IsOpen().

bool XrdCl::FileStateHandler::IsReadOnly ( ) const
private

Check if the file is open for read only.

References kXR_open_apnd, kXR_open_read, kXR_open_updt, and pOpenFlags.

Referenced by AfterForkChild(), Close(), IsRecoverable(), and RunRecovery().

bool XrdCl::FileStateHandler::IsRecoverable ( const XRootDStatus stataus) const
private

Check if the stateful error is recoverable.

References XrdCl::Status::code, XrdCl::errInvalidSession, XrdCl::errSocketError, IsReadOnly(), pDoRecoverRead, and pDoRecoverWrite.

Referenced by OnStateError(), and SendOrQueue().

void XrdCl::FileStateHandler::Lock ( )
inline

Lock the internal lock.

References XrdSysMutex::Lock(), and pMutex.

void XrdCl::FileStateHandler::MonitorClose ( const XRootDStatus status)
private
void XrdCl::FileStateHandler::OnClose ( const XRootDStatus status)
void XrdCl::FileStateHandler::OnOpen ( const XRootDStatus status,
const OpenInfo openInfo,
const HostList hostList 
)
void XrdCl::FileStateHandler::OnStateError ( XRootDStatus status,
Message message,
ResponseHandler userHandler,
MessageSendParams sendParams 
)
void XrdCl::FileStateHandler::OnStateRedirection ( RedirectInfo redirectInfo,
Message message,
ResponseHandler userHandler,
MessageSendParams sendParams 
)
void XrdCl::FileStateHandler::OnStateResponse ( XRootDStatus status,
Message message,
AnyObject response,
HostList hostList 
)
XRootDStatus XrdCl::FileStateHandler::Open ( const std::string &  url,
uint16_t  flags,
uint16_t  mode,
ResponseHandler handler,
uint16_t  timeout = 0 
)
XRootDStatus XrdCl::FileStateHandler::Read ( uint64_t  offset,
uint32_t  size,
void *  buffer,
ResponseHandler handler,
uint16_t  timeout = 0 
)

Read a data chunk at a given offset - sync

Parameters
offsetoffset from the beginning of the file
sizenumber of bytes to be read
buffera pointer to a buffer big enough to hold the data or 0 if the buffer should be allocated by the system
handlerhandler to be notified when the response arrives, the response parameter will hold a buffer object if the procedure was successful, if a preallocated buffer was specified then the buffer object will "wrap" this buffer
timeouttimeout value, if 0 the environment default will be used
Returns
status of the operation

References XrdCl::MessageSendParams::chunkList, XrdCl::MessageUtils::CreateRequest(), XrdCl::Log::Debug(), XrdCl::errInvalidOp, ClientReadRequest::fhandle, XrdCl::FileMsg, XrdCl::MessageSendParams::followRedirects, XrdCl::URL::GetHostId(), XrdCl::DefaultEnv::GetLog(), XrdCl::URL::GetURL(), kXR_read, ClientReadRequest::offset, Opened, pDataServer, pFileHandle, pFileState, pFileUrl, pMutex, XrdCl::MessageUtils::ProcessSendParams(), Recovering, ClientReadRequest::requestid, ClientReadRequest::rlen, SendOrQueue(), XrdCl::XRootDTransport::SetDescription(), XrdCl::MessageSendParams::stateful, XrdCl::stError, and XrdCl::MessageSendParams::timeout.

Referenced by XrdCl::File::Read().

Status XrdCl::FileStateHandler::RecoverMessage ( RequestData  rd,
bool  callbackOnFailure = true 
)
private

Recover a message

Parameters
rdrequest data associated with the message
callbackOnFailureshould the current handler be called back if the recovery procedure fails

References XrdCl::Log::Dump(), FailMessage(), XrdCl::FileMsg, XrdCl::Message::GetDescription(), XrdCl::DefaultEnv::GetLog(), XrdCl::URL::GetURL(), XrdCl::Status::IsOK(), pFileState, pFileUrl, pToBeRecovered, Recovering, XrdCl::FileStateHandler::RequestData::request, and RunRecovery().

Referenced by OnStateError(), OnStateRedirection(), and SendOrQueue().

Status XrdCl::FileStateHandler::ReOpenFileAtServer ( const URL url,
uint16_t  timeout 
)
private
void XrdCl::FileStateHandler::ReSendQueuedMessages ( )
private
void XrdCl::FileStateHandler::ResetMonitoringVars ( )
inlineprivate

Reset monitoring vars.

References pCloseReason, pOpenTime, pRBytes, pRCount, pVBytes, pVCount, pVSegs, pWBytes, and pWCount.

Referenced by FileStateHandler(), OnClose(), and ~FileStateHandler().

void XrdCl::FileStateHandler::ReWriteFileHandle ( Message msg)
private
Status XrdCl::FileStateHandler::RunRecovery ( )
private
Status XrdCl::FileStateHandler::SendOrQueue ( const URL url,
Message msg,
ResponseHandler handler,
MessageSendParams sendParams 
)
private
XRootDStatus XrdCl::FileStateHandler::Stat ( bool  force,
ResponseHandler handler,
uint16_t  timeout = 0 
)

Obtain status information for this file - async

Parameters
forcedo not use the cached information, force re-stating
handlerhandler to be notified when the response arrives, the response parameter will hold a StatInfo object if the procedure is successful
timeouttimeout value, if 0 the environment default will be used
Returns
status of the operation

References XrdCl::Buffer::Append(), XrdCl::MessageUtils::CreateRequest(), XrdCl::Log::Debug(), ClientStatRequest::dlen, XrdCl::errInvalidOp, XrdCl::FileMsg, XrdCl::MessageSendParams::followRedirects, XrdCl::URL::GetHostId(), XrdCl::DefaultEnv::GetLog(), XrdCl::URL::GetPath(), XrdCl::URL::GetURL(), XrdCl::ResponseHandler::HandleResponseWithHosts(), kXR_stat, Opened, pDataServer, pFileHandle, pFileState, pFileUrl, pMutex, XrdCl::MessageUtils::ProcessSendParams(), pStatInfo, Recovering, ClientStatRequest::requestid, SendOrQueue(), XrdCl::AnyObject::Set(), XrdCl::XRootDTransport::SetDescription(), XrdCl::MessageSendParams::stateful, XrdCl::stError, and XrdCl::MessageSendParams::timeout.

Referenced by XrdCl::File::Stat().

XRootDStatus XrdCl::FileStateHandler::Sync ( ResponseHandler handler,
uint16_t  timeout = 0 
)
void XrdCl::FileStateHandler::Tick ( time_t  now)

Tick.

References pMutex, and TimeOutRequests().

void XrdCl::FileStateHandler::TimeOutRequests ( time_t  now)
XRootDStatus XrdCl::FileStateHandler::Truncate ( uint64_t  size,
ResponseHandler handler,
uint16_t  timeout = 0 
)
void XrdCl::FileStateHandler::UnLock ( )
inline

Unlock the internal lock.

References pMutex, and XrdSysMutex::UnLock().

XRootDStatus XrdCl::FileStateHandler::VectorRead ( const ChunkList chunks,
void *  buffer,
ResponseHandler handler,
uint16_t  timeout = 0 
)
XRootDStatus XrdCl::FileStateHandler::Write ( uint64_t  offset,
uint32_t  size,
const void *  buffer,
ResponseHandler handler,
uint16_t  timeout = 0 
)

Write a data chunk at a given offset - async

Parameters
offsetoffset from the beginning of the file
sizenumber of bytes to be written
buffera pointer to the buffer holding the data to be written
handlerhandler to be notified when the response arrives
timeouttimeout value, if 0 the environment default will be used
Returns
status of the operation

References XrdCl::MessageSendParams::chunkList, XrdCl::MessageUtils::CreateRequest(), XrdCl::Log::Debug(), ClientWriteRequest::dlen, XrdCl::errInvalidOp, ClientWriteRequest::fhandle, XrdCl::FileMsg, XrdCl::MessageSendParams::followRedirects, XrdCl::URL::GetHostId(), XrdCl::DefaultEnv::GetLog(), XrdCl::URL::GetURL(), kXR_write, ClientWriteRequest::offset, Opened, pDataServer, pFileHandle, pFileState, pFileUrl, pMutex, XrdCl::MessageUtils::ProcessSendParams(), Recovering, ClientWriteRequest::requestid, SendOrQueue(), XrdCl::XRootDTransport::SetDescription(), XrdCl::MessageSendParams::stateful, XrdCl::stError, and XrdCl::MessageSendParams::timeout.

Referenced by XrdCl::File::Write().

Member Data Documentation

XRootDStatus XrdCl::FileStateHandler::pCloseReason
private
URL* XrdCl::FileStateHandler::pDataServer
private
bool XrdCl::FileStateHandler::pDoRecoverRead
private
bool XrdCl::FileStateHandler::pDoRecoverWrite
private
uint8_t* XrdCl::FileStateHandler::pFileHandle
private
FileStatus XrdCl::FileStateHandler::pFileState
private
URL* XrdCl::FileStateHandler::pFileUrl
private
std::set<Message*> XrdCl::FileStateHandler::pInTheFly
private
URL* XrdCl::FileStateHandler::pLoadBalancer
private
XrdSysMutex XrdCl::FileStateHandler::pMutex
mutableprivate
uint16_t XrdCl::FileStateHandler::pOpenFlags
private
uint16_t XrdCl::FileStateHandler::pOpenMode
private

Referenced by Open(), and ReOpenFileAtServer().

timeval XrdCl::FileStateHandler::pOpenTime
private
uint64_t XrdCl::FileStateHandler::pRBytes
private
uint64_t XrdCl::FileStateHandler::pRCount
private
uint64_t XrdCl::FileStateHandler::pSessionId
private
URL* XrdCl::FileStateHandler::pStateRedirect
private

Referenced by OnStateRedirection(), and RunRecovery().

StatInfo* XrdCl::FileStateHandler::pStatInfo
private
XRootDStatus XrdCl::FileStateHandler::pStatus
private

Referenced by Close(), OnClose(), OnOpen(), and Open().

RequestList XrdCl::FileStateHandler::pToBeRecovered
private
uint64_t XrdCl::FileStateHandler::pVBytes
private
uint64_t XrdCl::FileStateHandler::pVCount
private
uint64_t XrdCl::FileStateHandler::pVSegs
private
uint64_t XrdCl::FileStateHandler::pWBytes
private
uint64_t XrdCl::FileStateHandler::pWCount
private

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