XRootD
XrdCl::MetalinkRedirector Class Reference

#include <XrdClMetalinkRedirector.hh>

+ Inheritance diagram for XrdCl::MetalinkRedirector:
+ Collaboration diagram for XrdCl::MetalinkRedirector:

Public Member Functions

 MetalinkRedirector (const std::string &url)
 
virtual ~MetalinkRedirector ()
 Destructor. More...
 
virtual int Count (Message &req) const
 Count how many replicas do we have left to try for given request. More...
 
std::string GetCheckSum (const std::string &type) const
 
const std::vector< std::string > & GetReplicas ()
 Returns a vector with replicas as given in the meatlink file. More...
 
long long GetSize () const
 
std::vector< std::string > GetSupportedCheckSums () const
 
std::string GetTargetName () const
 Gets the file name as specified in the metalink. More...
 
XRootDStatus HandleRequest (const Message *msg, MsgHandler *handler)
 
XRootDStatus Load (ResponseHandler *userHandler)
 
- Public Member Functions inherited from XrdCl::VirtualRedirector
virtual ~VirtualRedirector ()
 Destructor. More...
 

Friends

class MetalinkOpenHandler
 
class MetalinkReadHandler
 

Detailed Description

An abstraction representing a virtual redirector based on a metalink file

Definition at line 31 of file XrdClMetalinkRedirector.hh.

Constructor & Destructor Documentation

◆ MetalinkRedirector()

XrdCl::MetalinkRedirector::MetalinkRedirector ( const std::string &  url)

Constructor

Parameters
url: URL to the metalink file

Definition at line 218 of file XrdClMetalinkRedirector.cc.

218  :
219  pUrl( url ), pFile( new File( File::DisableVirtRedirect ) ), pReady(
220  false ), pFileSize( -1 )
221  {
222  }
XrdOucString File
@ DisableVirtRedirect
Definition: XrdClFile.hh:52

◆ ~MetalinkRedirector()

XrdCl::MetalinkRedirector::~MetalinkRedirector ( )
virtual

Destructor.

Definition at line 227 of file XrdClMetalinkRedirector.cc.

228  {
229  delete pFile;
230  }

Member Function Documentation

◆ Count()

int XrdCl::MetalinkRedirector::Count ( Message req) const
virtual

Count how many replicas do we have left to try for given request.

Implements XrdCl::VirtualRedirector.

Definition at line 399 of file XrdClMetalinkRedirector.cc.

400  {
401  ReplicaList::const_iterator itr = GetReplica( req );
402  return pReplicas.end() - itr;
403  }

◆ GetCheckSum()

std::string XrdCl::MetalinkRedirector::GetCheckSum ( const std::string &  type) const
inlinevirtual

Returns the checksum of the given type if specified in the metalink file, or an empty string otherwise

Implements XrdCl::VirtualRedirector.

Definition at line 73 of file XrdClMetalinkRedirector.hh.

74  {
75  std::string t = type != "adler32" ? type : "a32";
76  CksumMap::const_iterator it = pChecksums.find( t );
77  if( it == pChecksums.end() ) return std::string();
78  return type + ":" + it->second;
79  }

◆ GetReplicas()

const std::vector<std::string>& XrdCl::MetalinkRedirector::GetReplicas ( )
inlinevirtual

Returns a vector with replicas as given in the meatlink file.

Implements XrdCl::VirtualRedirector.

Definition at line 109 of file XrdClMetalinkRedirector.hh.

110  {
111  return pReplicas;
112  }

◆ GetSize()

long long XrdCl::MetalinkRedirector::GetSize ( ) const
inlinevirtual

Returns the file size if specified in the metalink file, otherwise a negative number

Implements XrdCl::VirtualRedirector.

Definition at line 101 of file XrdClMetalinkRedirector.hh.

102  {
103  return pFileSize;
104  }

◆ GetSupportedCheckSums()

std::vector<std::string> XrdCl::MetalinkRedirector::GetSupportedCheckSums ( ) const
inlinevirtual

Returns the first (in alphabetical order) checksum type available in the metalink file, if no checksum is available returns an empty string

Implements XrdCl::VirtualRedirector.

Definition at line 85 of file XrdClMetalinkRedirector.hh.

86  {
87  std::vector<std::string> ret;
88  CksumMap::const_iterator itr = pChecksums.begin();
89  for( ; itr != pChecksums.end(); ++itr )
90  {
91  if( itr->first == "a32" ) ret.push_back( "adler32" );
92  else ret.push_back( itr->first );
93  }
94  return ret;
95  }

◆ GetTargetName()

std::string XrdCl::MetalinkRedirector::GetTargetName ( ) const
inlinevirtual

Gets the file name as specified in the metalink.

Implements XrdCl::VirtualRedirector.

Definition at line 64 of file XrdClMetalinkRedirector.hh.

65  {
66  return pTarget;
67  }

◆ HandleRequest()

XRootDStatus XrdCl::MetalinkRedirector::HandleRequest ( const Message msg,
MsgHandler handler 
)
virtual

If the MetalinkRedirector is initialized creates an instant redirect response, otherwise queues the request until initialization is done.

Implements XrdCl::VirtualRedirector.

Definition at line 381 of file XrdClMetalinkRedirector.cc.

383  {
384  XrdSysMutexHelper scopedLck( pMutex );
385  // if the metalink data haven't been loaded yet, make it pending
386  if( !pReady )
387  {
388  pPendingRedirects.push_back(
389  std::make_pair( msg, handler ) );;
390  return XRootDStatus();
391  }
392  // otherwise generate a virtual response
393  return HandleRequestImpl( msg, handler );
394  }

◆ Load()

XRootDStatus XrdCl::MetalinkRedirector::Load ( ResponseHandler userHandler)
virtual

Initializes the object with the content of the metalink file

Parameters
userHandler: the response handler provided by end user

Implements XrdCl::VirtualRedirector.

Definition at line 235 of file XrdClMetalinkRedirector.cc.

236  {
237  MetalinkOpenHandler *handler = new MetalinkOpenHandler( this, userHandler );
238  XRootDStatus st = pFile->Open( pUrl, OpenFlags::Read, Access::None, handler,
239  0 );
240  if( !st.IsOK() )
241  delete handler;
242 
243  return st;
244  }
XRootDStatus Open(const std::string &url, OpenFlags::Flags flags, Access::Mode mode, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Definition: XrdClFile.cc:99
@ Read
Open only for reading.

References XrdCl::Status::IsOK(), MetalinkOpenHandler, XrdCl::Access::None, XrdCl::File::Open(), and XrdCl::OpenFlags::Read.

+ Here is the call graph for this function:

Friends And Related Function Documentation

◆ MetalinkOpenHandler

friend class MetalinkOpenHandler
friend

Definition at line 33 of file XrdClMetalinkRedirector.hh.

Referenced by Load().

◆ MetalinkReadHandler

friend class MetalinkReadHandler
friend

Definition at line 34 of file XrdClMetalinkRedirector.hh.


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