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  //----------------------------------------------------------------------------
47  virtual ~MetalinkRedirector();
48 
49  //----------------------------------------------------------------------------
51  //----------------------------------------------------------------------------
52  XRootDStatus Load( ResponseHandler *userHandler );
53 
54  //----------------------------------------------------------------------------
58  //----------------------------------------------------------------------------
59  XRootDStatus HandleRequest( const Message *msg, IncomingMsgHandler *handler );
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  CksumMap::const_iterator it = pChecksums.find( type );
76  if( it == pChecksums.end() ) return std::string();
77  return type + ":" + it->second;
78  }
79 
80  //----------------------------------------------------------------------------
83  //----------------------------------------------------------------------------
84  long long GetSize() const
85  {
86  return pFileSize;
87  }
88 
89  //----------------------------------------------------------------------------
91  //----------------------------------------------------------------------------
92  const std::vector<std::string>& GetReplicas()
93  {
94  return pReplicas;
95  }
96 
97  //----------------------------------------------------------------------------
99  //----------------------------------------------------------------------------
100  virtual int Count( Message *req ) const;
101 
102  private:
103 
104  //----------------------------------------------------------------------------
109  //----------------------------------------------------------------------------
111 
112  //----------------------------------------------------------------------------
115  //----------------------------------------------------------------------------
116  XRootDStatus Parse( const std::string &metalink );
117 
118  //----------------------------------------------------------------------------
123  //----------------------------------------------------------------------------
124  void FinalizeInitialization( const XRootDStatus &status = XRootDStatus() );
125 
126  //----------------------------------------------------------------------------
128  //----------------------------------------------------------------------------
129  Message* GetResponse( const Message *msg ) const;
130 
131  //----------------------------------------------------------------------------
133  //----------------------------------------------------------------------------
134  Message* GetErrorMsg( const Message *msg, const std::string &errMsg, XErrorCode code ) const;
135 
136  //----------------------------------------------------------------------------
138  //----------------------------------------------------------------------------
139  void InitCksum( XrdOucFileInfo **fileInfos );
140 
141  //----------------------------------------------------------------------------
143  //----------------------------------------------------------------------------
144  void InitReplicas( XrdOucFileInfo **fileInfos );
145 
146  //----------------------------------------------------------------------------
148  //----------------------------------------------------------------------------
149  XRootDStatus GetReplica( const Message *msg, std::string &replica ) const;
150 
151  //----------------------------------------------------------------------------
153  //----------------------------------------------------------------------------
154  XRootDStatus GetCgiInfo( const Message *msg, const std::string &key, std::string &out ) const;
155 
156  typedef std::list< std::pair<const Message*, IncomingMsgHandler*> > RedirectList;
157  typedef std::map<std::string, std::string> CksumMap;
158  typedef std::vector<std::string> ReplicaList;
159 
160  //----------------------------------------------------------------------------
162  //----------------------------------------------------------------------------
163  ReplicaList::const_iterator GetReplica( const Message *msg ) const;
164 
166  std::string pUrl;
170  bool pReady;
172  std::string pTarget;
173  long long pFileSize;
174 
176 
177  static const std::string LocalFile;
178 
179 };
180 
181 } /* namespace XrdCl */
182 
183 #endif /* SRC_XRDCL_XRDCLMETALINKREDIRECTOR_HH_ */
RedirectList pPendingRedirects
Definition: XrdClMetalinkRedirector.hh:165
friend class MetalinkReadHandler
Definition: XrdClMetalinkRedirector.hh:34
XrdSysMutex pMutex
Definition: XrdClMetalinkRedirector.hh:175
XRootDStatus Parse(const std::string &metalink)
XRootDStatus HandleRequestImpl(const Message *msg, IncomingMsgHandler *handler)
The message representation used throughout the system.
Definition: XrdClMessage.hh:29
Message * GetErrorMsg(const Message *msg, const std::string &errMsg, XErrorCode code) const
Generates error response for the given request.
Definition: XrdOucFileInfo.hh:45
std::string pUrl
Definition: XrdClMetalinkRedirector.hh:166
Definition: XrdClMetalinkRedirector.hh:31
An interface for metadata redirectors.
Definition: XrdClRedirectorRegistry.hh:58
std::vector< std::string > ReplicaList
Definition: XrdClMetalinkRedirector.hh:158
XRootDStatus GetCgiInfo(const Message *msg, const std::string &key, std::string &out) const
Extracts an element from URL cgi.
void FinalizeInitialization(const XRootDStatus &status=XRootDStatus())
bool pReady
Definition: XrdClMetalinkRedirector.hh:170
virtual int Count(Message *req) const
Count how many replicas do we have left to try for given request.
std::list< std::pair< const Message *, IncomingMsgHandler * > > RedirectList
Definition: XrdClMetalinkRedirector.hh:156
File * pFile
Definition: XrdClMetalinkRedirector.hh:167
const std::vector< std::string > & GetReplicas()
Returns a vector with replicas as given in the meatlink file.
Definition: XrdClMetalinkRedirector.hh:92
std::string GetTargetName() const
Gets the file name as specified in the metalink.
Definition: XrdClMetalinkRedirector.hh:64
Definition: XrdSysPthread.hh:165
void InitReplicas(XrdOucFileInfo **fileInfos)
Initializes replica list.
A file.
Definition: XrdClFile.hh:44
XErrorCode
Definition: XProtocol.hh:328
Request status.
Definition: XrdClXRootDResponses.hh:212
Definition: XrdClAnyObject.hh:25
static const std::string LocalFile
Definition: XrdClMetalinkRedirector.hh:177
Message handler.
Definition: XrdClPostMasterInterfaces.hh:68
virtual ~MetalinkRedirector()
Destructor.
CksumMap pChecksums
Definition: XrdClMetalinkRedirector.hh:168
Message * GetResponse(const Message *msg) const
Generates redirect response for the given request.
Handle an async response.
Definition: XrdClXRootDResponses.hh:854
ReplicaList pReplicas
Definition: XrdClMetalinkRedirector.hh:169
XRootDStatus pStatus
Definition: XrdClMetalinkRedirector.hh:171
friend class MetalinkOpenHandler
Definition: XrdClMetalinkRedirector.hh:33
std::map< std::string, std::string > CksumMap
Definition: XrdClMetalinkRedirector.hh:157
std::string GetCheckSum(const std::string &type) const
Definition: XrdClMetalinkRedirector.hh:73
XRootDStatus Load(ResponseHandler *userHandler)
Initializes the object with the content of the metalink file.
XRootDStatus GetReplica(const Message *msg, std::string &replica) const
Get the next replica for the given message.
std::string pTarget
Definition: XrdClMetalinkRedirector.hh:172
MetalinkRedirector(const std::string &url)
void InitCksum(XrdOucFileInfo **fileInfos)
Initializes checksum map.
long long GetSize() const
Definition: XrdClMetalinkRedirector.hh:84
XRootDStatus HandleRequest(const Message *msg, IncomingMsgHandler *handler)
long long pFileSize
Definition: XrdClMetalinkRedirector.hh:173