xrootd
XrdClRedirectorRegistry.hh
Go to the documentation of this file.
1 /*
2  * XrdClRedirectorRegister.hh
3  *
4  * Created on: May 23, 2016
5  * Author: simonm
6  */
7 
8 #ifndef SRC_XRDCL_XRDCLREDIRECTORREGISTRY_HH_
9 #define SRC_XRDCL_XRDCLREDIRECTORREGISTRY_HH_
10 
12 #include "XrdCl/XrdClURL.hh"
13 #include "XrdCl/XrdClJobManager.hh"
14 #include "XrdSys/XrdSysPthread.hh"
15 
16 #include <string>
17 #include <vector>
18 #include <map>
19 
20 namespace XrdCl
21 {
22 
23 class Message;
24 class IncomingMsgHandler;
25 class OutgoingMsgHandler;
26 
27 //--------------------------------------------------------------------------------
29 //--------------------------------------------------------------------------------
30 class RedirectJob: public Job
31 {
32  public:
33  //------------------------------------------------------------------------
35  //------------------------------------------------------------------------
36  RedirectJob( IncomingMsgHandler *handler ) : pHandler( handler )
37  {
38  }
39 
40  //------------------------------------------------------------------------
42  //------------------------------------------------------------------------
43  virtual ~RedirectJob()
44  {
45  }
46 
47  //------------------------------------------------------------------------
49  //------------------------------------------------------------------------
50  virtual void Run( void *arg );
51 
52  private:
54 };
55 
56 //--------------------------------------------------------------------------------
58 //--------------------------------------------------------------------------------
60 {
61  public:
62  //----------------------------------------------------------------------------
64  //----------------------------------------------------------------------------
65  virtual ~VirtualRedirector(){}
66 
67  //----------------------------------------------------------------------------
72  //----------------------------------------------------------------------------
73  virtual XRootDStatus HandleRequest( const Message *msg,
74  IncomingMsgHandler *handler ) = 0;
75 
76  //----------------------------------------------------------------------------
78  //----------------------------------------------------------------------------
79  virtual XRootDStatus Load( ResponseHandler *userHandler ) = 0;
80 
81  //----------------------------------------------------------------------------
83  //----------------------------------------------------------------------------
84  virtual std::string GetTargetName() const = 0;
85 
86  //----------------------------------------------------------------------------
89  //----------------------------------------------------------------------------
90  virtual std::string GetCheckSum( const std::string &type ) const = 0;
91 
92  //----------------------------------------------------------------------------
95  //----------------------------------------------------------------------------
96  virtual std::vector<std::string> GetSupportedCheckSums() const = 0;
97 
98  //----------------------------------------------------------------------------
101  //----------------------------------------------------------------------------
102  virtual long long GetSize() const = 0;
103 
104  //----------------------------------------------------------------------------
106  //----------------------------------------------------------------------------
107  virtual const std::vector<std::string>& GetReplicas() = 0;
108 
109  //----------------------------------------------------------------------------
111  //----------------------------------------------------------------------------
112  virtual int Count( Message *req ) const = 0;
113 };
114 
115 //--------------------------------------------------------------------------------
117 //--------------------------------------------------------------------------------
119 {
120 
121  public:
122 
123  //----------------------------------------------------------------------------
125  //----------------------------------------------------------------------------
126  static RedirectorRegistry& Instance();
127 
128  //----------------------------------------------------------------------------
130  //----------------------------------------------------------------------------
132 
133  //----------------------------------------------------------------------------
135  //----------------------------------------------------------------------------
136  XRootDStatus Register( const URL &url );
137 
138  //----------------------------------------------------------------------------
140  //----------------------------------------------------------------------------
141  XRootDStatus RegisterAndWait( const URL &url );
142 
143  //----------------------------------------------------------------------------
145  //----------------------------------------------------------------------------
146  VirtualRedirector* Get( const URL &url ) const;
147 
148  //----------------------------------------------------------------------------
150  //----------------------------------------------------------------------------
151  void Release( const URL &url );
152 
153  private:
154 
155  typedef std::map< std::string, std::pair<VirtualRedirector*, size_t> > RedirectorMap;
156 
157  //----------------------------------------------------------------------------
159  //----------------------------------------------------------------------------
160  XRootDStatus RegisterImpl( const URL &url, ResponseHandler *handler );
161 
162  //----------------------------------------------------------------------------
167  //----------------------------------------------------------------------------
168  static URL ConvertLocalfile( const URL &url );
169 
170  //----------------------------------------------------------------------------
171  // Constructor (private!).
172  //----------------------------------------------------------------------------
174 
175  //----------------------------------------------------------------------------
176  // Copy constructor (private!).
177  //----------------------------------------------------------------------------
179 
180  //----------------------------------------------------------------------------
181  // Assignment operator (private!).
182  //----------------------------------------------------------------------------
184 
186 
188 };
189 
190 } /* namespace XrdCl */
191 
192 #endif /* SRC_XRDCL_XRDCLREDIRECTORREGISTRY_HH_ */
void Release(const URL &url)
Release the virtual redirector associated with the given URL.
static URL ConvertLocalfile(const URL &url)
virtual ~RedirectJob()
Destructor.
Definition: XrdClRedirectorRegistry.hh:43
virtual std::string GetTargetName() const =0
Gets the file name as specified in the metalink.
The message representation used throughout the system.
Definition: XrdClMessage.hh:29
An interface for metadata redirectors.
Definition: XrdClRedirectorRegistry.hh:59
RedirectorRegistry & operator=(const RedirectorRegistry &)
~RedirectorRegistry()
Destructor.
virtual void Run(void *arg)
Run the user handler.
virtual XRootDStatus Load(ResponseHandler *userHandler)=0
Initializes the object with the content of the metalink file.
XRootDStatus Register(const URL &url)
Creates a new virtual redirector and registers it (async).
A job class for redirect handling in the thread-pool.
Definition: XrdClRedirectorRegistry.hh:30
Definition: XrdSysPthread.hh:165
std::map< std::string, std::pair< VirtualRedirector *, size_t > > RedirectorMap
Definition: XrdClRedirectorRegistry.hh:155
XrdSysMutex pMutex
Definition: XrdClRedirectorRegistry.hh:187
Request status.
Definition: XrdClXRootDResponses.hh:218
virtual int Count(Message *req) const =0
Count how many replicas do we have left to try for given request.
Definition: XrdClAnyObject.hh:25
XRootDStatus RegisterAndWait(const URL &url)
Creates a new virtual redirector and registers it (sync).
virtual ~VirtualRedirector()
Destructor.
Definition: XrdClRedirectorRegistry.hh:65
VirtualRedirector * Get(const URL &url) const
Get a virtual redirector associated with the given URL.
Message handler.
Definition: XrdClPostMasterInterfaces.hh:71
virtual const std::vector< std::string > & GetReplicas()=0
Returns a vector with replicas as given in the meatlink file.
virtual std::vector< std::string > GetSupportedCheckSums() const =0
RedirectJob(IncomingMsgHandler *handler)
Constructor.
Definition: XrdClRedirectorRegistry.hh:36
virtual XRootDStatus HandleRequest(const Message *msg, IncomingMsgHandler *handler)=0
Handle an async response.
Definition: XrdClXRootDResponses.hh:1040
URL representation.
Definition: XrdClURL.hh:30
XRootDStatus RegisterImpl(const URL &url, ResponseHandler *handler)
Register implementation.
IncomingMsgHandler * pHandler
Definition: XrdClRedirectorRegistry.hh:53
RedirectorMap pRegistry
Definition: XrdClRedirectorRegistry.hh:185
Interface for a job to be run by the job manager.
Definition: XrdClJobManager.hh:33
Singleton access to URL to virtual redirector mapping.
Definition: XrdClRedirectorRegistry.hh:118
virtual std::string GetCheckSum(const std::string &type) const =0
virtual long long GetSize() const =0
RedirectorRegistry()
Definition: XrdClRedirectorRegistry.hh:173
static RedirectorRegistry & Instance()
Returns reference to the single instance.