This is an automated email from the ASF dual-hosted git repository.

cmcfarlen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new 0afb53d14a Break cycle between iocore/hostdb and proxy/http libraries 
(#10595)
0afb53d14a is described below

commit 0afb53d14a2dc393164b0f6a69e07955a887d319
Author: Chris McFarlen <ch...@mcfarlen.us>
AuthorDate: Fri Oct 13 14:52:16 2023 -0500

    Break cycle between iocore/hostdb and proxy/http libraries (#10595)
    
    * Break cycle between iocore/hostdb and proxy/http libraries
    
    * add private dep on logging from http
    
    * one more link fix
    
    ---------
    
    Co-authored-by: Chris McFarlen <cmcfar...@apple.com>
---
 iocore/hostdb/CMakeLists.txt |   2 -
 iocore/hostdb/HostDB.cc      |  83 -----------------------------------
 proxy/http/CMakeLists.txt    |   1 +
 proxy/http/HttpConfig.cc     | 102 +++++++++++++++++++++++++++++++++++++++++--
 proxy/http/HttpConfig.h      |  25 -----------
 src/api/InkAPI.cc            |   4 +-
 src/tests/CMakeLists.txt     |   2 +-
 7 files changed, 103 insertions(+), 116 deletions(-)

diff --git a/iocore/hostdb/CMakeLists.txt b/iocore/hostdb/CMakeLists.txt
index db9ea717bd..178d7f62be 100644
--- a/iocore/hostdb/CMakeLists.txt
+++ b/iocore/hostdb/CMakeLists.txt
@@ -41,6 +41,4 @@ target_link_libraries(inkhostdb
         ts::inkdns
         ts::inkevent
         ts::tscore
-    PRIVATE
-        ts::proxy
 )
diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc
index d2a03d6eee..2a30189b50 100644
--- a/iocore/hostdb/HostDB.cc
+++ b/iocore/hostdb/HostDB.cc
@@ -37,7 +37,6 @@
 #include <random>
 #include <chrono>
 #include <shared_mutex>
-#include <http/HttpConfig.h>
 
 using swoc::TextView;
 using std::chrono::duration_cast;
@@ -116,88 +115,6 @@ name_of(HostDBType t)
   }
   return "";
 }
-
-/** Template for creating conversions and initialization for @c std::chrono 
based configuration variables.
- *
- * @tparam V The exact type of the configuration variable.
- *
- * The tricky template code is to enable having a class instance for each 
configuration variable, instead of for each _type_ of
- * configuration variable. This is required because the callback interface 
requires functions and so the actual storage must be
- * accessible from that function. *
- */
-template <typename V> struct ConfigDuration {
-  using self_type = ConfigDuration;
-  V *_var; ///< Pointer to the variable to control.
-
-  /** Constructor.
-   *
-   * @param v The variable to update.
-   */
-  ConfigDuration(V &v) : _var(&v) {}
-
-  /// Convert to the mgmt (configuration) type.
-  static MgmtInt
-  to_mgmt(void const *data)
-  {
-    return static_cast<MgmtInt>(static_cast<V const *>(data)->count());
-  }
-
-  /// Convert from the mgmt (configuration) type.
-  static void
-  from_mgmt(void *data, MgmtInt i)
-  {
-    *static_cast<V *>(data) = V{i};
-  }
-
-  /// The conversion structure, which handles @c MgmtInt.
-  static inline const MgmtConverter Conversions{&to_mgmt, &from_mgmt};
-
-  /** Process start up conversion from configuration.
-   *
-   * @param type The data type in the configuration.
-   * @param data The data in the configuration.
-   * @param var Pointer to the variable to update.
-   * @return @c true if @a data was successfully converted and stored, @c 
false if not.
-   *
-   * @note @a var is the target variable because it was explicitly set to be 
the value of @a _var in @c Enable.
-   */
-  static bool
-  callback(char const *, RecDataT type, RecData data, void *var)
-  {
-    if (RECD_INT == type) {
-      (*self_type::Conversions.store_int)(var, data.rec_int);
-      return true;
-    }
-    return false;
-  }
-
-  /** Enable.
-   *
-   * @param name Name of the configuration variable.
-   *
-   * This enables both reading from the configuration and handling the 
callback for dynamic
-   * updates of the variable.
-   */
-  void
-  Enable(std::string_view name)
-  {
-    Enable_Config_Var(name, &self_type::callback, _var);
-  }
-};
-
-ConfigDuration 
HostDBDownServerCacheTimeVar{HttpConfig::m_master.oride.down_server_timeout};
-// Make the conversions visible to the plugin API. This allows exporting just 
the conversions
-// without having to export the class definition. Again, the compiler doesn't 
allow doing this
-// in one line.
-extern MgmtConverter const &HostDBDownServerCacheTimeConv;
-MgmtConverter const &HostDBDownServerCacheTimeConv = 
HostDBDownServerCacheTimeVar.Conversions;
-
-void
-HostDB_Config_Init()
-{
-  
HostDBDownServerCacheTimeVar.Enable("proxy.config.http.down_server.cache_time");
-}
-
 // Static configuration information
 
 HostDBCache hostDB;
diff --git a/proxy/http/CMakeLists.txt b/proxy/http/CMakeLists.txt
index b69a8c4728..96a8f84708 100644
--- a/proxy/http/CMakeLists.txt
+++ b/proxy/http/CMakeLists.txt
@@ -67,6 +67,7 @@ target_link_libraries(http
         ts::http_remap
         ts::inkcache
         ts::inkutils
+        ts::logging
 )
 
 if(TS_USE_QUIC)
diff --git a/proxy/http/HttpConfig.cc b/proxy/http/HttpConfig.cc
index 7e736a1bf9..db51f8c1ea 100644
--- a/proxy/http/HttpConfig.cc
+++ b/proxy/http/HttpConfig.cc
@@ -34,8 +34,6 @@
 #include <records/I_RecHttp.h>
 #include "HttpSessionManager.h"
 
-extern void HostDB_Config_Init();
-
 #define HttpEstablishStaticConfigStringAlloc(_ix, _n) \
   REC_EstablishStaticConfigStringAlloc(_ix, _n);      \
   REC_RegisterConfigUpdateFunc(_n, http_config_cb, NULL)
@@ -201,6 +199,29 @@ http_config_cb(const char * /* name ATS_UNUSED */, 
RecDataT /* data_type ATS_UNU
   return 0;
 }
 
+/** Enable a dynamic configuration variable.
+ *
+ * @param name Configuration var name.
+ * @param cb Callback to do the actual update of the master record.
+ * @param cookie Extra data for @a cb
+ *
+ * The purpose of this is to unite the different ways and times a 
configuration variable needs
+ * to be loaded. These are
+ * - Process start.
+ * - Dynamic update.
+ * - Plugin API update.
+ *
+ * @a cb is expected to perform the update. It must return a @c bool which is
+ * - @c true if the value was changed.
+ * - @c false if the value was not changed.
+ *
+ * Based on that, a run time configuration update is triggered or not.
+ *
+ * In addition, this invokes @a cb and passes it the information in the 
configuration variable
+ * global table in order to perform the initial loading of the value. No 
update is triggered for
+ * that call as it is not needed.
+ *
+ */
 void
 Enable_Config_Var(std::string_view const &name, bool (*cb)(const char *, 
RecDataT, RecData, void *), void *cookie)
 {
@@ -605,6 +626,81 @@ load_negative_caching_var(RecRecord const *r, void *cookie)
   set_negative_caching_list(r->name, r->data_type, r->data, c, false);
 }
 
+/** Template for creating conversions and initialization for @c std::chrono 
based configuration variables.
+ *
+ * @tparam V The exact type of the configuration variable.
+ *
+ * The tricky template code is to enable having a class instance for each 
configuration variable, instead of for each _type_ of
+ * configuration variable. This is required because the callback interface 
requires functions and so the actual storage must be
+ * accessible from that function. *
+ */
+template <typename V> struct ConfigDuration {
+  using self_type = ConfigDuration;
+  V *_var; ///< Pointer to the variable to control.
+
+  /** Constructor.
+   *
+   * @param v The variable to update.
+   */
+  ConfigDuration(V &v) : _var(&v) {}
+
+  /// Convert to the mgmt (configuration) type.
+  static MgmtInt
+  to_mgmt(void const *data)
+  {
+    return static_cast<MgmtInt>(static_cast<V const *>(data)->count());
+  }
+
+  /// Convert from the mgmt (configuration) type.
+  static void
+  from_mgmt(void *data, MgmtInt i)
+  {
+    *static_cast<V *>(data) = V{i};
+  }
+
+  /// The conversion structure, which handles @c MgmtInt.
+  static inline const MgmtConverter Conversions{&to_mgmt, &from_mgmt};
+
+  /** Process start up conversion from configuration.
+   *
+   * @param type The data type in the configuration.
+   * @param data The data in the configuration.
+   * @param var Pointer to the variable to update.
+   * @return @c true if @a data was successfully converted and stored, @c 
false if not.
+   *
+   * @note @a var is the target variable because it was explicitly set to be 
the value of @a _var in @c Enable.
+   */
+  static bool
+  callback(char const *, RecDataT type, RecData data, void *var)
+  {
+    if (RECD_INT == type) {
+      (*self_type::Conversions.store_int)(var, data.rec_int);
+      return true;
+    }
+    return false;
+  }
+
+  /** Enable.
+   *
+   * @param name Name of the configuration variable.
+   *
+   * This enables both reading from the configuration and handling the 
callback for dynamic
+   * updates of the variable.
+   */
+  void
+  Enable(std::string_view name)
+  {
+    Enable_Config_Var(name, &self_type::callback, _var);
+  }
+};
+
+ConfigDuration 
HttpDownServerCacheTimeVar{HttpConfig::m_master.oride.down_server_timeout};
+// Make the conversions visible to the plugin API. This allows exporting just 
the conversions
+// without having to export the class definition. Again, the compiler doesn't 
allow doing this
+// in one line.
+extern MgmtConverter const &HttpDownServerCacheTimeConv;
+MgmtConverter const &HttpDownServerCacheTimeConv = 
HttpDownServerCacheTimeVar.Conversions;
+
 ////////////////////////////////////////////////////////////////
 //
 //  HttpConfig::startup()
@@ -854,7 +950,7 @@ HttpConfig::startup()
   HttpEstablishStaticConfigByte(c.referer_filter_enabled, 
"proxy.config.http.referer_filter");
   HttpEstablishStaticConfigByte(c.referer_format_redirect, 
"proxy.config.http.referer_format_redirect");
 
-  HostDB_Config_Init();
+  
HttpDownServerCacheTimeVar.Enable("proxy.config.http.down_server.cache_time");
 
   // Negative caching and revalidation
   HttpEstablishStaticConfigByte(c.oride.negative_caching_enabled, 
"proxy.config.http.negative_caching_enabled");
diff --git a/proxy/http/HttpConfig.h b/proxy/http/HttpConfig.h
index d4a535b32b..ac64307401 100644
--- a/proxy/http/HttpConfig.h
+++ b/proxy/http/HttpConfig.h
@@ -861,28 +861,3 @@ inline HttpConfigParams::~HttpConfigParams()
   delete connect_ports;
   delete redirect_actions_map;
 }
-
-/** Enable a dynamic configuration variable.
- *
- * @param name Configuration var name.
- * @param cb Callback to do the actual update of the master record.
- * @param cookie Extra data for @a cb
- *
- * The purpose of this is to unite the different ways and times a 
configuration variable needs
- * to be loaded. These are
- * - Process start.
- * - Dynamic update.
- * - Plugin API update.
- *
- * @a cb is expected to perform the update. It must return a @c bool which is
- * - @c true if the value was changed.
- * - @c false if the value was not changed.
- *
- * Based on that, a run time configuration update is triggered or not.
- *
- * In addition, this invokes @a cb and passes it the information in the 
configuration variable
- * global table in order to perform the initial loading of the value. No 
update is triggered for
- * that call as it is not needed.
- *
- */
-extern void Enable_Config_Var(std::string_view const &name, bool (*cb)(const 
char *, RecDataT, RecData, void *), void *cookie);
diff --git a/src/api/InkAPI.cc b/src/api/InkAPI.cc
index 80260e158d..f81d54ae55 100644
--- a/src/api/InkAPI.cc
+++ b/src/api/InkAPI.cc
@@ -7961,7 +7961,7 @@ static void *
 _conf_to_memberp(TSOverridableConfigKey conf, OverridableHttpConfigParams 
*overridableHttpConfig, MgmtConverter const *&conv)
 {
   // External converters.
-  extern MgmtConverter const &HostDBDownServerCacheTimeConv;
+  extern MgmtConverter const &HttpDownServerCacheTimeConv;
 
   void *ret = nullptr;
   conv      = nullptr;
@@ -8118,7 +8118,7 @@ _conf_to_memberp(TSOverridableConfigKey conf, 
OverridableHttpConfigParams *overr
     ret = 
_memberp_to_generic(&overridableHttpConfig->connect_attempts_timeout, conv);
     break;
   case TS_CONFIG_HTTP_DOWN_SERVER_CACHE_TIME:
-    conv = &HostDBDownServerCacheTimeConv;
+    conv = &HttpDownServerCacheTimeConv;
     ret  = &overridableHttpConfig->down_server_timeout;
     break;
   case TS_CONFIG_HTTP_DOC_IN_CACHE_SKIP_DNS:
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index 2775dd5605..cc5aadeebd 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -82,7 +82,7 @@ macro(add_stubbed_test name)
     add_executable(${name}
             ${CMAKE_SOURCE_DIR}/iocore/cache/test/stub.cc
             ${ARGN})
-    target_link_libraries(${name} PRIVATE ts::proxy)
+    target_link_libraries(${name} PRIVATE ts::proxy ts::http)
     add_test(NAME test_stubbed_${name} COMMAND $<TARGET_FILE:${name}>)
 endmacro()
 

Reply via email to