xrootd
Loading...
Searching...
No Matches
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
19class XrdOucFileInfo;
20
21namespace XrdCl
22{
23
24class File;
25class Message;
26
27//----------------------------------------------------------------------------
30//----------------------------------------------------------------------------
32{
33 friend class MetalinkOpenHandler;
34 friend class MetalinkReadHandler;
35
36 public:
37 //----------------------------------------------------------------------------
40 //----------------------------------------------------------------------------
41 MetalinkRedirector( const std::string &url );
42
43 //----------------------------------------------------------------------------
45 //----------------------------------------------------------------------------
47
48 //----------------------------------------------------------------------------
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 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 std::shared_ptr<Message> GetResponse( const Message *msg ) const;
147
148 //----------------------------------------------------------------------------
150 //----------------------------------------------------------------------------
151 std::shared_ptr<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*, MsgHandler*> > 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_ */
XErrorCode
Definition XProtocol.hh:987
A file.
Definition XrdClFile.hh:46
The message representation used throughout the system.
Definition XrdClMessage.hh:30
Definition XrdClMetalinkRedirector.hh:32
std::shared_ptr< Message > GetErrorMsg(const Message *msg, const std::string &errMsg, XErrorCode code) const
Generates error response for the given request.
std::map< std::string, std::string > CksumMap
Definition XrdClMetalinkRedirector.hh:174
XRootDStatus Parse(const std::string &metalink)
std::string pUrl
Definition XrdClMetalinkRedirector.hh:183
void FinalizeInitialization(const XRootDStatus &status=XRootDStatus())
void InitReplicas(XrdOucFileInfo **fileInfos)
Initializes replica list.
RedirectList pPendingRedirects
Definition XrdClMetalinkRedirector.hh:182
XRootDStatus GetReplica(const Message &msg, std::string &replica) const
Get the next replica for the given message.
ReplicaList::const_iterator GetReplica(const Message &msg) const
Get the next replica for the given message.
std::shared_ptr< Message > GetResponse(const Message *msg) const
Generates redirect response for the given request.
XRootDStatus pStatus
Definition XrdClMetalinkRedirector.hh:188
friend class MetalinkOpenHandler
Definition XrdClMetalinkRedirector.hh:33
File * pFile
Definition XrdClMetalinkRedirector.hh:184
friend class MetalinkReadHandler
Definition XrdClMetalinkRedirector.hh:34
void InitCksum(XrdOucFileInfo **fileInfos)
Initializes checksum map.
static const std::string LocalFile
Definition XrdClMetalinkRedirector.hh:194
std::list< std::pair< const Message *, MsgHandler * > > RedirectList
Definition XrdClMetalinkRedirector.hh:173
virtual int Count(Message &req) const
Count how many replicas do we have left to try for given request.
bool pReady
Definition XrdClMetalinkRedirector.hh:187
std::string GetCheckSum(const std::string &type) const
Definition XrdClMetalinkRedirector.hh:73
XRootDStatus GetCgiInfo(const Message &msg, const std::string &key, std::string &out) const
Extracts an element from URL cgi.
std::string pTarget
Definition XrdClMetalinkRedirector.hh:189
ReplicaList pReplicas
Definition XrdClMetalinkRedirector.hh:186
CksumMap pChecksums
Definition XrdClMetalinkRedirector.hh:185
const std::vector< std::string > & GetReplicas()
Returns a vector with replicas as given in the meatlink file.
Definition XrdClMetalinkRedirector.hh:109
XRootDStatus Load(ResponseHandler *userHandler)
XRootDStatus HandleRequest(const Message *msg, MsgHandler *handler)
std::vector< std::string > GetSupportedCheckSums() const
Definition XrdClMetalinkRedirector.hh:85
virtual ~MetalinkRedirector()
Destructor.
XrdSysMutex pMutex
Definition XrdClMetalinkRedirector.hh:192
long long GetSize() const
Definition XrdClMetalinkRedirector.hh:101
MetalinkRedirector(const std::string &url)
XRootDStatus HandleRequestImpl(const Message *msg, MsgHandler *handler)
long long pFileSize
Definition XrdClMetalinkRedirector.hh:190
std::string GetTargetName() const
Gets the file name as specified in the metalink.
Definition XrdClMetalinkRedirector.hh:64
std::vector< std::string > ReplicaList
Definition XrdClMetalinkRedirector.hh:175
Message handler.
Definition XrdClPostMasterInterfaces.hh:51
Handle an async response.
Definition XrdClXRootDResponses.hh:1126
An interface for metadata redirectors.
Definition XrdClRedirectorRegistry.hh:60
Request status.
Definition XrdClXRootDResponses.hh:219
Definition XrdOucFileInfo.hh:46
Definition XrdSysPthread.hh:165
Definition XrdClAction.hh:34