xrootd
XrdClMetalinkRedirector.hh
Go to the documentation of this file.
1 /*
2  * XrdClMetalinkRedirector.hh
3  *
4  * Created on: May 2, 2016
5  * Author: simonm
6  */
7 
8 #ifndef SRC_XRDCL_XRDCLMETALINKREDIRECTOR_HH_
9 #define SRC_XRDCL_XRDCLMETALINKREDIRECTOR_HH_
10 
13 
14 #include <string>
15 #include <list>
16 #include <map>
17 
18 
19 class XrdOucFileInfo;
20 
21 namespace XrdCl
22 {
23 
24 class File;
25 class Message;
26 
27 //----------------------------------------------------------------------------
30 //----------------------------------------------------------------------------
32 {
33  friend class MetalinkOpenHandler;
34  friend class MetalinkReadHandler;
35 
36  public:
37  //----------------------------------------------------------------------------
41  //----------------------------------------------------------------------------
42  MetalinkRedirector( const std::string &url );
43 
44  //----------------------------------------------------------------------------
46  //----------------------------------------------------------------------------
48 
49  //----------------------------------------------------------------------------
51  //----------------------------------------------------------------------------
53 
54  //----------------------------------------------------------------------------
58  //----------------------------------------------------------------------------
60 
61  //----------------------------------------------------------------------------
63  //----------------------------------------------------------------------------
64  std::string GetTargetName() const
65  {
66  return pTarget;
67  }
68 
69  //----------------------------------------------------------------------------
72  //----------------------------------------------------------------------------
73  std::string GetCheckSum( const std::string &type ) const
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  }
80 
81  //----------------------------------------------------------------------------
84  //----------------------------------------------------------------------------
85  std::vector<std::string> GetSupportedCheckSums() const
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 std::move( ret );
95  }
96 
97  //----------------------------------------------------------------------------
100  //----------------------------------------------------------------------------
101  long long GetSize() const
102  {
103  return pFileSize;
104  }
105 
106  //----------------------------------------------------------------------------
108  //----------------------------------------------------------------------------
109  const std::vector<std::string>& GetReplicas()
110  {
111  return pReplicas;
112  }
113 
114  //----------------------------------------------------------------------------
116  //----------------------------------------------------------------------------
117  virtual int Count( Message *req ) const;
118 
119  private:
120 
121  //----------------------------------------------------------------------------
126  //----------------------------------------------------------------------------
128 
129  //----------------------------------------------------------------------------
132  //----------------------------------------------------------------------------
133  XRootDStatus Parse( const std::string &metalink );
134 
135  //----------------------------------------------------------------------------
140  //----------------------------------------------------------------------------
142 
143  //----------------------------------------------------------------------------
145  //----------------------------------------------------------------------------
146  Message* GetResponse( const Message *msg ) const;
147 
148  //----------------------------------------------------------------------------
150  //----------------------------------------------------------------------------
151  Message* GetErrorMsg( const Message *msg, const std::string &errMsg, XErrorCode code ) const;
152 
153  //----------------------------------------------------------------------------
155  //----------------------------------------------------------------------------
156  void InitCksum( XrdOucFileInfo **fileInfos );
157 
158  //----------------------------------------------------------------------------
160  //----------------------------------------------------------------------------
161  void InitReplicas( XrdOucFileInfo **fileInfos );
162 
163  //----------------------------------------------------------------------------
165  //----------------------------------------------------------------------------
166  XRootDStatus GetReplica( const Message *msg, std::string &replica ) const;
167 
168  //----------------------------------------------------------------------------
170  //----------------------------------------------------------------------------
171  XRootDStatus GetCgiInfo( const Message *msg, const std::string &key, std::string &out ) const;
172 
173  typedef std::list< std::pair<const Message*, IncomingMsgHandler*> > RedirectList;
174  typedef std::map<std::string, std::string> CksumMap;
175  typedef std::vector<std::string> ReplicaList;
176 
177  //----------------------------------------------------------------------------
179  //----------------------------------------------------------------------------
180  ReplicaList::const_iterator GetReplica( const Message *msg ) const;
181 
183  std::string pUrl;
187  bool pReady;
189  std::string pTarget;
190  long long pFileSize;
191 
193 
194  static const std::string LocalFile;
195 
196 };
197 
198 } /* namespace XrdCl */
199 
200 #endif /* SRC_XRDCL_XRDCLMETALINKREDIRECTOR_HH_ */
XrdCl::MetalinkRedirector::HandleRequest
XRootDStatus HandleRequest(const Message *msg, IncomingMsgHandler *handler)
XrdCl::ResponseHandler
Handle an async response.
Definition: XrdClXRootDResponses.hh:855
XrdCl::MetalinkRedirector::InitCksum
void InitCksum(XrdOucFileInfo **fileInfos)
Initializes checksum map.
XrdCl::MetalinkRedirector::MetalinkReadHandler
friend class MetalinkReadHandler
Definition: XrdClMetalinkRedirector.hh:34
XrdSysMutex
Definition: XrdSysPthread.hh:166
XrdCl::MetalinkRedirector::GetResponse
Message * GetResponse(const Message *msg) const
Generates redirect response for the given request.
XrdCl::MetalinkRedirector::pReplicas
ReplicaList pReplicas
Definition: XrdClMetalinkRedirector.hh:186
XrdCl::MetalinkRedirector::pChecksums
CksumMap pChecksums
Definition: XrdClMetalinkRedirector.hh:185
XErrorCode
XErrorCode
Definition: XProtocol.hh:330
XrdCl::File
A file.
Definition: XrdClFile.hh:45
XrdCl::MetalinkRedirector::pFile
File * pFile
Definition: XrdClMetalinkRedirector.hh:184
XrdCl::MetalinkRedirector
Definition: XrdClMetalinkRedirector.hh:32
XrdCl::MetalinkRedirector::CksumMap
std::map< std::string, std::string > CksumMap
Definition: XrdClMetalinkRedirector.hh:174
XrdCl::Message
The message representation used throughout the system.
Definition: XrdClMessage.hh:30
XrdCl::MetalinkRedirector::GetReplicas
const std::vector< std::string > & GetReplicas()
Returns a vector with replicas as given in the meatlink file.
Definition: XrdClMetalinkRedirector.hh:109
XrdCl::MetalinkRedirector::RedirectList
std::list< std::pair< const Message *, IncomingMsgHandler * > > RedirectList
Definition: XrdClMetalinkRedirector.hh:173
XrdCl::MetalinkRedirector::GetCgiInfo
XRootDStatus GetCgiInfo(const Message *msg, const std::string &key, std::string &out) const
Extracts an element from URL cgi.
XrdCl::MetalinkRedirector::GetSupportedCheckSums
std::vector< std::string > GetSupportedCheckSums() const
Definition: XrdClMetalinkRedirector.hh:85
XrdCl::MetalinkRedirector::MetalinkRedirector
MetalinkRedirector(const std::string &url)
XrdCl::XRootDStatus
Request status.
Definition: XrdClXRootDResponses.hh:213
XrdCl::MetalinkRedirector::GetSize
long long GetSize() const
Definition: XrdClMetalinkRedirector.hh:101
XrdCl::MetalinkRedirector::pFileSize
long long pFileSize
Definition: XrdClMetalinkRedirector.hh:190
XrdCl::MetalinkRedirector::Parse
XRootDStatus Parse(const std::string &metalink)
XrdCl::MetalinkRedirector::HandleRequestImpl
XRootDStatus HandleRequestImpl(const Message *msg, IncomingMsgHandler *handler)
XrdCl::MetalinkRedirector::pPendingRedirects
RedirectList pPendingRedirects
Definition: XrdClMetalinkRedirector.hh:182
XrdCl::MetalinkRedirector::pMutex
XrdSysMutex pMutex
Definition: XrdClMetalinkRedirector.hh:192
XrdCl::MetalinkRedirector::LocalFile
static const std::string LocalFile
Definition: XrdClMetalinkRedirector.hh:194
XrdCl::IncomingMsgHandler
Message handler.
Definition: XrdClPostMasterInterfaces.hh:69
XrdCl::MetalinkRedirector::~MetalinkRedirector
virtual ~MetalinkRedirector()
Destructor.
XrdOucFileInfo
Definition: XrdOucFileInfo.hh:46
XrdCl::MetalinkRedirector::pUrl
std::string pUrl
Definition: XrdClMetalinkRedirector.hh:183
XrdCl::MetalinkRedirector::Count
virtual int Count(Message *req) const
Count how many replicas do we have left to try for given request.
XrdCl::MetalinkRedirector::GetErrorMsg
Message * GetErrorMsg(const Message *msg, const std::string &errMsg, XErrorCode code) const
Generates error response for the given request.
XrdCl::MetalinkRedirector::ReplicaList
std::vector< std::string > ReplicaList
Definition: XrdClMetalinkRedirector.hh:175
XrdCl::MetalinkRedirector::pReady
bool pReady
Definition: XrdClMetalinkRedirector.hh:187
XrdCl::MetalinkRedirector::pStatus
XRootDStatus pStatus
Definition: XrdClMetalinkRedirector.hh:188
XrdCl
Definition: XrdClAnyObject.hh:26
XrdCl::MetalinkRedirector::FinalizeInitialization
void FinalizeInitialization(const XRootDStatus &status=XRootDStatus())
XrdCl::MetalinkRedirector::pTarget
std::string pTarget
Definition: XrdClMetalinkRedirector.hh:189
XrdClMessageUtils.hh
XrdClRedirectorRegistry.hh
XrdCl::MetalinkRedirector::MetalinkOpenHandler
friend class MetalinkOpenHandler
Definition: XrdClMetalinkRedirector.hh:33
XrdCl::MetalinkRedirector::GetCheckSum
std::string GetCheckSum(const std::string &type) const
Definition: XrdClMetalinkRedirector.hh:73
XrdCl::MetalinkRedirector::GetTargetName
std::string GetTargetName() const
Gets the file name as specified in the metalink.
Definition: XrdClMetalinkRedirector.hh:64
XrdCl::VirtualRedirector
An interface for metadata redirectors.
Definition: XrdClRedirectorRegistry.hh:60
XrdCl::MetalinkRedirector::Load
XRootDStatus Load(ResponseHandler *userHandler)
Initializes the object with the content of the metalink file.
XrdCl::MetalinkRedirector::GetReplica
XRootDStatus GetReplica(const Message *msg, std::string &replica) const
Get the next replica for the given message.
XrdCl::MetalinkRedirector::InitReplicas
void InitReplicas(XrdOucFileInfo **fileInfos)
Initializes replica list.
XrdCl::MetalinkRedirector::GetReplica
ReplicaList::const_iterator GetReplica(const Message *msg) const
Get the next replica for the given message.