Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:53

0001 #ifndef __XRDADAPTOR_HOSTHANDLER_H_
0002 #define __XRDADAPTOR_HOSTHANDLER_H_
0003 
0004 #include "XrdCl/XrdClXRootDResponses.hh"
0005 #include "FWCore/Utilities/interface/get_underlying_safe.h"
0006 
0007 /**
0008  * The SyncResponseHandler from the XrdCl does not
0009  * preserve the hostinfo list, which we would like to
0010  * utilize.
0011  */
0012 
0013 class SyncHostResponseHandler : public XrdCl::ResponseHandler {
0014 public:
0015   SyncHostResponseHandler() : sem(0) {}
0016 
0017   ~SyncHostResponseHandler() override = default;
0018 
0019   void HandleResponse(XrdCl::XRootDStatus *status, XrdCl::AnyObject *response) override {
0020     // propagate_const<T> has no reset() function
0021     pStatus_ = std::unique_ptr<XrdCl::XRootDStatus>(status);
0022     pResponse_ = std::unique_ptr<XrdCl::AnyObject>(response);
0023     sem.Post();
0024   }
0025 
0026   void HandleResponseWithHosts(XrdCl::XRootDStatus *status,
0027                                XrdCl::AnyObject *response,
0028                                XrdCl::HostList *hostList) override {
0029     // propagate_const<T> has no reset() function
0030     pStatus_ = std::unique_ptr<XrdCl::XRootDStatus>(status);
0031     pResponse_ = std::unique_ptr<XrdCl::AnyObject>(response);
0032     pHostList_ = std::unique_ptr<XrdCl::HostList>(hostList);
0033     sem.Post();
0034   }
0035 
0036   std::unique_ptr<XrdCl::XRootDStatus> GetStatus() { return std::move(get_underlying_safe(pStatus_)); }
0037 
0038   std::unique_ptr<XrdCl::AnyObject> GetResponse() { return std::move(get_underlying_safe(pResponse_)); }
0039 
0040   std::unique_ptr<XrdCl::HostList> GetHosts() { return std::move(get_underlying_safe(pHostList_)); }
0041 
0042   void WaitForResponse() { sem.Wait(); }
0043 
0044 private:
0045   edm::propagate_const<std::unique_ptr<XrdCl::XRootDStatus>> pStatus_;
0046   edm::propagate_const<std::unique_ptr<XrdCl::AnyObject>> pResponse_;
0047   edm::propagate_const<std::unique_ptr<XrdCl::HostList>> pHostList_;
0048   XrdSysSemaphore sem;
0049 };
0050 
0051 #endif