XRootD
Loading...
Searching...
No Matches
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.
 
virtual int Count (Message &req) const
 Count how many replicas do we have left to try for given request.
 
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.
 
long long GetSize () const
 
std::vector< std::string > GetSupportedCheckSums () const
 
std::string GetTargetName () const
 Gets the file name as specified in the metalink.
 
XRootDStatus HandleRequest (const Message *msg, MsgHandler *handler)
 
XRootDStatus Load (ResponseHandler *userHandler)
 
- Public Member Functions inherited from XrdCl::VirtualRedirector
virtual ~VirtualRedirector ()
 Destructor.
 

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 Symbol 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: