From 9b856c297eca074a4ffbdae34792868fe2303d52 Mon Sep 17 00:00:00 2001
From: Michael Davis <michael.davis@cern.ch>
Date: Fri, 12 Jan 2018 13:58:50 +0100
Subject: [PATCH] [cta-admin] Sets request timeout from XRD_REQUESTTIMEOUT

Default now set to 10s. Note that XRD_TIMEOUTRESOLUTION must be set
<= 10s, otherwise timeout defaults to 15s.
---
 cmdline/CtaAdminCmd.cpp | 21 ++++++++++++++++++---
 cmdline/CtaAdminCmd.hpp | 14 ++++++++++++--
 eos_cta/CMakeLists.txt  |  2 +-
 3 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/cmdline/CtaAdminCmd.cpp b/cmdline/CtaAdminCmd.cpp
index 3ab47a1c8c..5245d70e71 100644
--- a/cmdline/CtaAdminCmd.cpp
+++ b/cmdline/CtaAdminCmd.cpp
@@ -161,9 +161,7 @@ void CtaAdminCmd::send() const
 
    // Obtain a Service Provider
 
-   std::string resource("/ctafrontend");
-
-   XrdSsiPbServiceType cta_service(endpoint, resource);
+   XrdSsiPbServiceType cta_service(endpoint, Resource, StreamBufferSize, GetRequestTimeout());
 
    // Send the Request to the Service and get a Response
 
@@ -296,6 +294,23 @@ void CtaAdminCmd::throwUsage(const std::string &error_txt) const
    throw std::runtime_error(help.str());
 }
 
+
+
+int CtaAdminCmd::GetRequestTimeout() const
+{
+   const char *request_timeout_str = ::getenv("XRD_REQUESTTIMEOUT");
+
+   int request_timeout = request_timeout_str == nullptr ? DefaultRequestTimeout : atoi(request_timeout_str);
+
+   // Use default if XRD_REQUESTTIMEOUT is not a valid positive integer
+   if(request_timeout <= 0) request_timeout = DefaultRequestTimeout;
+
+#ifdef XRDSSI_DEBUG
+   std::cerr << "[DEBUG] CtaAdminCmd::GetRequestTimeout(): Request timeout = " << request_timeout << "s" << std::endl;
+#endif
+   return request_timeout;
+}
+
 }} // namespace cta::admin
 
 
diff --git a/cmdline/CtaAdminCmd.hpp b/cmdline/CtaAdminCmd.hpp
index 930b448566..97d70f888c 100644
--- a/cmdline/CtaAdminCmd.hpp
+++ b/cmdline/CtaAdminCmd.hpp
@@ -50,11 +50,21 @@ private:
     */
    void throwUsage(const std::string &error_txt = "") const;
 
+   /*!
+    * Return the request timeout value (to pass to the ServiceClientSide constructor)
+    */
+   int GetRequestTimeout() const;
+
    /*
     * Member variables
     */
-   std::string       m_execname;         //!< Executable name of this program
-   cta::xrd::Request m_request;          //!< Protocol Buffer for the command and parameters
+   const std::string Resource      = "/ctafrontend";    //!< XRootD SSI Resource name
+   const int StreamBufferSize      = 1024;              //!< Buffer size for Data/Stream Responses
+   const int DefaultRequestTimeout = 10;                //!< Default Request Timeout. Can be overridden by
+                                                        //!< XRD_REQUESTTIMEOUT environment variable.
+
+   std::string       m_execname;                        //!< Executable name of this program
+   cta::xrd::Request m_request;                         //!< Protocol Buffer for the command and parameters
 };
 
 }} // namespace cta::admin
diff --git a/eos_cta/CMakeLists.txt b/eos_cta/CMakeLists.txt
index 3dfe6ff0b8..f1579decef 100644
--- a/eos_cta/CMakeLists.txt
+++ b/eos_cta/CMakeLists.txt
@@ -16,7 +16,7 @@
 cmake_minimum_required(VERSION 2.6)
 
 find_package(Protobuf3 REQUIRED)
-set(PROTOBUF3_INCLUDE_PATH ${XRD_SSI_PB_DIR}/eos_cta/protobuf/)
+set(PROTOBUF3_INCLUDE_PATH ${XRD_SSI_PB_DIR}/eos_cta/protobuf)
 file(GLOB ProtoFiles "${PROTOBUF3_INCLUDE_PATH}/*.proto")
 
 PROTOBUF3_GENERATE_CPP(ProtoSources ProtoHeaders ${ProtoFiles})
-- 
GitLab