xrootd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
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 <map>
18 
19 namespace XrdCl
20 {
21 
22 class Message;
23 class IncomingMsgHandler;
24 class OutgoingMsgHandler;
25 
26 //--------------------------------------------------------------------------------
28 //--------------------------------------------------------------------------------
29 class RedirectJob: public Job
30 {
31  public:
32  //------------------------------------------------------------------------
34  //------------------------------------------------------------------------
35  RedirectJob( IncomingMsgHandler *handler ) : pHandler( handler )
36  {
37  }
38 
39  //------------------------------------------------------------------------
41  //------------------------------------------------------------------------
42  virtual ~RedirectJob()
43  {
44  }
45 
46  //------------------------------------------------------------------------
48  //------------------------------------------------------------------------
49  virtual void Run( void *arg );
50 
51  private:
53 };
54 
55 //--------------------------------------------------------------------------------
57 //--------------------------------------------------------------------------------
59 {
60  public:
61  //----------------------------------------------------------------------------
63  //----------------------------------------------------------------------------
64  virtual ~VirtualRedirector(){}
65 
66  //----------------------------------------------------------------------------
71  //----------------------------------------------------------------------------
72  virtual XRootDStatus HandleRequest( const Message *msg,
73  IncomingMsgHandler *handler ) = 0;
74 
75  //----------------------------------------------------------------------------
77  //----------------------------------------------------------------------------
78  virtual XRootDStatus Load( ResponseHandler *userHandler ) = 0;
79 
80  //----------------------------------------------------------------------------
82  //----------------------------------------------------------------------------
83  virtual std::string GetTargetName() const = 0;
84 
85  //----------------------------------------------------------------------------
88  //----------------------------------------------------------------------------
89  virtual std::string GetCheckSum( const std::string &type ) const = 0;
90 
91  //----------------------------------------------------------------------------
94  //----------------------------------------------------------------------------
95  virtual long long GetSize() const = 0;
96 
97  //----------------------------------------------------------------------------
99  //----------------------------------------------------------------------------
100  virtual const std::vector<std::string>& GetReplicas() = 0;
101 
102  //----------------------------------------------------------------------------
104  //----------------------------------------------------------------------------
105  virtual int Count( Message *req ) const = 0;
106 };
107 
108 //--------------------------------------------------------------------------------
110 //--------------------------------------------------------------------------------
112 {
113 
114  public:
115 
116  //----------------------------------------------------------------------------
118  //----------------------------------------------------------------------------
119  static RedirectorRegistry& Instance();
120 
121  //----------------------------------------------------------------------------
123  //----------------------------------------------------------------------------
125 
126  //----------------------------------------------------------------------------
128  //----------------------------------------------------------------------------
129  XRootDStatus Register( const URL &url );
130 
131  //----------------------------------------------------------------------------
133  //----------------------------------------------------------------------------
134  XRootDStatus RegisterAndWait( const URL &url );
135 
136  //----------------------------------------------------------------------------
138  //----------------------------------------------------------------------------
139  VirtualRedirector* Get( const URL &url ) const;
140 
141  //----------------------------------------------------------------------------
143  //----------------------------------------------------------------------------
144  void Release( const URL &url );
145 
146  private:
147 
148  typedef std::map< std::string, std::pair<VirtualRedirector*, size_t> > RedirectorMap;
149 
150  //----------------------------------------------------------------------------
152  //----------------------------------------------------------------------------
153  XRootDStatus RegisterImpl( const URL &url, ResponseHandler *handler );
154 
155  //----------------------------------------------------------------------------
160  //----------------------------------------------------------------------------
161  static URL ConvertLocalfile( const URL &url );
162 
163  //----------------------------------------------------------------------------
164  // Constructor (private!).
165  //----------------------------------------------------------------------------
167 
168  //----------------------------------------------------------------------------
169  // Copy constructor (private!).
170  //----------------------------------------------------------------------------
172 
173  //----------------------------------------------------------------------------
174  // Assignment operator (private!).
175  //----------------------------------------------------------------------------
177 
179 
181 };
182 
183 } /* namespace XrdCl */
184 
185 #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:42
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:58
RedirectorRegistry & operator=(const RedirectorRegistry &)
~RedirectorRegistry()
Destructor.
virtual void Run(void *arg)
Run the user handler.
VirtualRedirector * Get(const URL &url) const
Get a virtual redirector associated with the given URL.
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:29
Definition: XrdSysPthread.hh:165
std::map< std::string, std::pair< VirtualRedirector *, size_t > > RedirectorMap
Definition: XrdClRedirectorRegistry.hh:148
XrdSysMutex pMutex
Definition: XrdClRedirectorRegistry.hh:180
Request status.
Definition: XrdClXRootDResponses.hh:212
virtual int Count(Message *req) const =0
Count how many replicas do we have left to try for given request.
XRootDStatus RegisterAndWait(const URL &url)
Creates a new virtual redirector and registers it (sync).
virtual ~VirtualRedirector()
Destructor.
Definition: XrdClRedirectorRegistry.hh:64
Message handler.
Definition: XrdClPostMasterInterfaces.hh:68
virtual const std::vector< std::string > & GetReplicas()=0
Returns a vector with replicas as given in the meatlink file.
RedirectJob(IncomingMsgHandler *handler)
Constructor.
Definition: XrdClRedirectorRegistry.hh:35
virtual XRootDStatus HandleRequest(const Message *msg, IncomingMsgHandler *handler)=0
Handle an async response.
Definition: XrdClXRootDResponses.hh:839
URL representation.
Definition: XrdClURL.hh:30
XRootDStatus RegisterImpl(const URL &url, ResponseHandler *handler)
Register implementation.
IncomingMsgHandler * pHandler
Definition: XrdClRedirectorRegistry.hh:52
RedirectorMap pRegistry
Definition: XrdClRedirectorRegistry.hh:178
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:111
virtual std::string GetCheckSum(const std::string &type) const =0
virtual long long GetSize() const =0
RedirectorRegistry()
Definition: XrdClRedirectorRegistry.hh:166
static RedirectorRegistry & Instance()
Returns reference to the single instance.