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

zwoop pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new 62e1dcb  Issue 3546: Add "overridable" to the configuration variable 
description.
62e1dcb is described below

commit 62e1dcb621991819bebb49464afb095dc8d0123c
Author: Alan M. Carroll <a...@apache.org>
AuthorDate: Thu Mar 5 13:15:45 2020 -0600

    Issue 3546: Add "overridable" to the configuration variable description.
    
    (cherry picked from commit 5efcddef263ec213aea5ede76f5ac95dd9c3b343)
---
 CMakeLists.txt                         |   3 +-
 doc/developer-guide/config-vars.en.rst |  17 ++--
 include/shared/overridable_txn_vars.h  |  33 +++++++
 src/shared/overridable_txn_vars.cc     | 162 +++++++++++++++++++++++++++++++++
 src/traffic_ctl/Makefile.inc           |   3 +
 src/traffic_ctl/config.cc              |  33 +++++++
 src/traffic_server/InkAPI.cc           | 142 +----------------------------
 src/traffic_server/Makefile.inc        |   1 +
 8 files changed, 245 insertions(+), 149 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b464fcb..918ff24 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -63,7 +63,7 @@ endmacro(CPP_LIB)
 
 macro(CPP_ADD_SOURCES target path)
     file(GLOB cpp_add_src_files ${path}/*.h ${path}/*.cc)
-    target_sources(${target} PUBLIC ${cpp_add_src_files})
+    target_sources(${target} PRIVATE ${cpp_add_src_files})
 endmacro(CPP_ADD_SOURCES)
 
 CC_EXEC(traffic_cache_tool src/traffic_cache_tool)
@@ -74,6 +74,7 @@ CC_EXEC(traffic_logcat src/traffic_logcat)
 CC_EXEC(traffic_logstats src/traffic_logstats)
 CC_EXEC(traffic_manager src/traffic_manager)
 CC_EXEC(traffic_server src/traffic_server)
+target_sources(traffic_server PRIVATE src/shared/overridable_txn_vars.cc)
 CC_EXEC(traffic_top src/traffic_top)
 CC_EXEC(traffic_via src/traffic_via)
 CC_EXEC(traffic_wccp src/traffic_wccp)
diff --git a/doc/developer-guide/config-vars.en.rst 
b/doc/developer-guide/config-vars.en.rst
index 11fd9c8..a234a0e 100644
--- a/doc/developer-guide/config-vars.en.rst
+++ b/doc/developer-guide/config-vars.en.rst
@@ -33,11 +33,15 @@
 
 .. |InkAPI.cc| replace:: ``InkAPI.cc``
 
-.. _InkAPI.cc: 
https://github.com/apache/trafficserver/blob/master/proxy/api/InkAPI.cc
+.. _InkAPI.cc: 
https://github.com/apache/trafficserver/blob/master/src/traffic_server/InkAPI.cc
 
 .. |InkAPITest.cc| replace:: ``InkAPITest.cc``
 
-.. _InkAPITest.cc: 
https://github.com/apache/trafficserver/blob/master/proxy/api/InkAPITest.cc
+.. _InkAPITest.cc: 
https://github.com/apache/trafficserver/blob/master/src/traffic_server/InkAPITest.cc
+
+.. |overridable_txn_vars.cc| replace:: ``overridable_txn_vars.cc``
+
+.. _overridable_txn_vars.cc: 
https://github.com/apache/trafficserver/blob/master/src/shared/overridable_txn_vars.cc
 
 .. |ts_lua_http_config.c| replace:: ``ts_lua_http_config.c``
 
@@ -308,13 +312,10 @@ required for generic access:
 
 #. Add a value to the ``TSOverridableConfigKey`` enumeration in 
|apidefs.h.in|_.
 
-#. Augment the ``TSHttpTxnConfigFind`` function to return this enumeration 
value
-   when given the name of the configuration variable. Be sure to count the
-   characters very carefully.
+#. Augment ``Overridable_Map`` in |overridable_txn_vars.cc|_ to include 
configuration variable.
 
-#. Augment the ``_conf_to_memberp`` function in |InkAPI.cc|_ to return a 
pointer
-   to the appropriate member of ``OverridableHttpConfigParams`` and set the 
type
-   if not a byte value.
+#. Update the function ``_conf_to_memberp`` in |InkAPI.cc|_ to have a case for 
the enumeration value
+   in ``TSOverridableConfigKey``.
 
 #. Update the testing logic in |InkAPITest.cc|_ by adding the string name of 
the
    configuration variable to the ``SDK_Overridable_Configs`` array.
diff --git a/include/shared/overridable_txn_vars.h 
b/include/shared/overridable_txn_vars.h
new file mode 100644
index 0000000..31fcb1c
--- /dev/null
+++ b/include/shared/overridable_txn_vars.h
@@ -0,0 +1,33 @@
+/** @file
+
+  Map of transaction overridable configuration variables and names.
+
+  @section license License
+
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ */
+
+#include <unordered_map>
+#include "HTTP.h"
+#include "HttpConnectionCount.h"
+
+namespace ts
+{
+/// Map of configuration variable name to enum and type for all transaction 
overridable variables.
+extern const std::unordered_map<std::string_view, std::tuple<const 
TSOverridableConfigKey, const TSRecordDataType>>
+  Overridable_Txn_Vars;
+} // namespace ts
diff --git a/src/shared/overridable_txn_vars.cc 
b/src/shared/overridable_txn_vars.cc
new file mode 100644
index 0000000..c38d8d4
--- /dev/null
+++ b/src/shared/overridable_txn_vars.cc
@@ -0,0 +1,162 @@
+/** @file
+
+  Map of transaction overridable configuration variables and names.
+
+  @section license License
+
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ */
+
+#include "shared/overridable_txn_vars.h"
+
+const std::unordered_map<std::string_view, std::tuple<const 
TSOverridableConfigKey, const TSRecordDataType>>
+  ts::Overridable_Txn_Vars(
+    {{"proxy.config.srv_enabled", {TS_CONFIG_SRV_ENABLED, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.http", {TS_CONFIG_HTTP_CACHE_HTTP, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.ssl.hsts_max_age", {TS_CONFIG_SSL_HSTS_MAX_AGE, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.normalize_ae", {TS_CONFIG_HTTP_NORMALIZE_AE, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.chunking.size", {TS_CONFIG_HTTP_CHUNKING_SIZE, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.ssl.client.cert.path", {TS_CONFIG_SSL_CERT_FILEPATH, 
TS_RECORDDATATYPE_STRING}},
+     {"proxy.config.http.allow_half_open", {TS_CONFIG_HTTP_ALLOW_HALF_OPEN, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.chunking_enabled", {TS_CONFIG_HTTP_CHUNKING_ENABLED, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.generation", {TS_CONFIG_HTTP_CACHE_GENERATION, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.insert_client_ip", 
{TS_CONFIG_HTTP_ANONYMIZE_INSERT_CLIENT_IP, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.insert_forwarded", {TS_CONFIG_HTTP_INSERT_FORWARDED, 
TS_RECORDDATATYPE_STRING}},
+     {"proxy.config.http.cache.range.write", 
{TS_CONFIG_HTTP_CACHE_RANGE_WRITE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.allow_multi_range", 
{TS_CONFIG_HTTP_ALLOW_MULTI_RANGE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.range.lookup", 
{TS_CONFIG_HTTP_CACHE_RANGE_LOOKUP, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.net.sock_packet_tos_out", 
{TS_CONFIG_NET_SOCK_PACKET_TOS_OUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.slow.log.threshold", 
{TS_CONFIG_HTTP_SLOW_LOG_THRESHOLD, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.max_stale_age", 
{TS_CONFIG_HTTP_CACHE_MAX_STALE_AGE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.default_buffer_size", 
{TS_CONFIG_HTTP_DEFAULT_BUFFER_SIZE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.response_server_str", 
{TS_CONFIG_HTTP_RESPONSE_SERVER_STR, TS_RECORDDATATYPE_STRING}},
+     {"proxy.config.http.keep_alive_post_out", 
{TS_CONFIG_HTTP_KEEP_ALIVE_POST_OUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.net.sock_option_flag_out", 
{TS_CONFIG_NET_SOCK_OPTION_FLAG_OUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.net.sock_packet_mark_out", 
{TS_CONFIG_NET_SOCK_PACKET_MARK_OUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.websocket.active_timeout", 
{TS_CONFIG_WEBSOCKET_ACTIVE_TIMEOUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.flow_control.enabled", 
{TS_CONFIG_HTTP_FLOW_CONTROL_ENABLED, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.send_http11_requests", 
{TS_CONFIG_HTTP_SEND_HTTP11_REQUESTS, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.body_factory.template_base", 
{TS_CONFIG_BODY_FACTORY_TEMPLATE_BASE, TS_RECORDDATATYPE_STRING}},
+     {"proxy.config.http.anonymize_remove_from", 
{TS_CONFIG_HTTP_ANONYMIZE_REMOVE_FROM, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.keep_alive_enabled_in", 
{TS_CONFIG_HTTP_KEEP_ALIVE_ENABLED_IN, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.doc_in_cache_skip_dns", 
{TS_CONFIG_HTTP_DOC_IN_CACHE_SKIP_DNS, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.forward_connect_method", 
{TS_CONFIG_HTTP_FORWARD_CONNECT_METHOD, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.request_buffer_enabled", 
{TS_CONFIG_HTTP_REQUEST_BUFFER_ENABLED, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.down_server.cache_time", 
{TS_CONFIG_HTTP_DOWN_SERVER_CACHE_TIME, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.insert_age_in_response", 
{TS_CONFIG_HTTP_INSERT_AGE_IN_RESPONSE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.url_remap.pristine_host_hdr", 
{TS_CONFIG_URL_REMAP_PRISTINE_HOST_HDR, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.insert_request_via_str", 
{TS_CONFIG_HTTP_INSERT_REQUEST_VIA_STR, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.flow_control.low_water", 
{TS_CONFIG_HTTP_FLOW_CONTROL_LOW_WATER_MARK, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.required_headers", 
{TS_CONFIG_HTTP_CACHE_REQUIRED_HEADERS, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.ssl.hsts_include_subdomains", 
{TS_CONFIG_SSL_HSTS_INCLUDE_SUBDOMAINS, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.number_of_redirections", 
{TS_CONFIG_HTTP_NUMBER_OF_REDIRECTIONS, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.keep_alive_enabled_out", 
{TS_CONFIG_HTTP_KEEP_ALIVE_ENABLED_OUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.response_server_enabled", 
{TS_CONFIG_HTTP_RESPONSE_SERVER_ENABLED, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.anonymize_remove_cookie", 
{TS_CONFIG_HTTP_ANONYMIZE_REMOVE_COOKIE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.request_header_max_size", 
{TS_CONFIG_HTTP_REQUEST_HEADER_MAX_SIZE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.parent_proxy.retry_time", 
{TS_CONFIG_HTTP_PARENT_PROXY_RETRY_TIME, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.insert_response_via_str", 
{TS_CONFIG_HTTP_INSERT_RESPONSE_VIA_STR, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.flow_control.high_water", 
{TS_CONFIG_HTTP_FLOW_CONTROL_HIGH_WATER_MARK, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.negative_caching_enabled", 
{TS_CONFIG_HTTP_NEGATIVE_CACHING_ENABLED, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.when_to_revalidate", 
{TS_CONFIG_HTTP_CACHE_WHEN_TO_REVALIDATE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.response_header_max_size", 
{TS_CONFIG_HTTP_RESPONSE_HEADER_MAX_SIZE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.anonymize_remove_referer", 
{TS_CONFIG_HTTP_ANONYMIZE_REMOVE_REFERER, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.global_user_agent_header", 
{TS_CONFIG_HTTP_GLOBAL_USER_AGENT_HEADER, TS_RECORDDATATYPE_STRING}},
+     {"proxy.config.net.sock_recv_buffer_size_out", 
{TS_CONFIG_NET_SOCK_RECV_BUFFER_SIZE_OUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.net.sock_send_buffer_size_out", 
{TS_CONFIG_NET_SOCK_SEND_BUFFER_SIZE_OUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.connect_attempts_timeout", 
{TS_CONFIG_HTTP_CONNECT_ATTEMPTS_TIMEOUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.websocket.no_activity_timeout", 
{TS_CONFIG_WEBSOCKET_NO_ACTIVITY_TIMEOUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.negative_caching_lifetime", 
{TS_CONFIG_HTTP_NEGATIVE_CACHING_LIFETIME, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.default_buffer_water_mark", 
{TS_CONFIG_HTTP_DEFAULT_BUFFER_WATER_MARK, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.heuristic_lm_factor", 
{TS_CONFIG_HTTP_CACHE_HEURISTIC_LM_FACTOR, TS_RECORDDATATYPE_FLOAT}},
+     {OutboundConnTrack::CONFIG_VAR_MAX, 
{TS_CONFIG_HTTP_PER_SERVER_CONNECTION_MAX, TS_RECORDDATATYPE_INT}},
+     {OutboundConnTrack::CONFIG_VAR_MIN, 
{TS_CONFIG_HTTP_SERVER_MIN_KEEP_ALIVE_CONNS, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.anonymize_remove_client_ip", 
{TS_CONFIG_HTTP_ANONYMIZE_REMOVE_CLIENT_IP, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.open_read_retry_time", 
{TS_CONFIG_HTTP_CACHE_OPEN_READ_RETRY_TIME, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.down_server.abort_threshold", 
{TS_CONFIG_HTTP_DOWN_SERVER_ABORT_THRESHOLD, TS_RECORDDATATYPE_INT}},
+     {OutboundConnTrack::CONFIG_VAR_MATCH, 
{TS_CONFIG_HTTP_PER_SERVER_CONNECTION_MATCH, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.parent_proxy.fail_threshold", 
{TS_CONFIG_HTTP_PARENT_PROXY_FAIL_THRESHOLD, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.ignore_authentication", 
{TS_CONFIG_HTTP_CACHE_IGNORE_AUTHENTICATION, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.anonymize_remove_user_agent", 
{TS_CONFIG_HTTP_ANONYMIZE_REMOVE_USER_AGENT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.connect_attempts_rr_retries", 
{TS_CONFIG_HTTP_CONNECT_ATTEMPTS_RR_RETRIES, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.max_open_read_retries", 
{TS_CONFIG_HTTP_CACHE_MAX_OPEN_READ_RETRIES, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.auth_server_session_private", 
{TS_CONFIG_HTTP_AUTH_SERVER_SESSION_PRIVATE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.redirect_use_orig_cache_key", 
{TS_CONFIG_HTTP_REDIRECT_USE_ORIG_CACHE_KEY, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.ignore_client_no_cache", 
{TS_CONFIG_HTTP_CACHE_IGNORE_CLIENT_NO_CACHE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.ims_on_client_no_cache", 
{TS_CONFIG_HTTP_CACHE_IMS_ON_CLIENT_NO_CACHE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.ignore_server_no_cache", 
{TS_CONFIG_HTTP_CACHE_IGNORE_SERVER_NO_CACHE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.heuristic_min_lifetime", 
{TS_CONFIG_HTTP_CACHE_HEURISTIC_MIN_LIFETIME, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.heuristic_max_lifetime", 
{TS_CONFIG_HTTP_CACHE_HEURISTIC_MAX_LIFETIME, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.server_session_sharing.match", 
{TS_CONFIG_HTTP_SERVER_SESSION_SHARING_MATCH, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.ignore_accept_mismatch", 
{TS_CONFIG_HTTP_CACHE_IGNORE_ACCEPT_MISMATCH, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.open_write_fail_action", 
{TS_CONFIG_HTTP_CACHE_OPEN_WRITE_FAIL_ACTION, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.insert_squid_x_forwarded_for", 
{TS_CONFIG_HTTP_INSERT_SQUID_X_FORWARDED_FOR, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.connect_attempts_max_retries", 
{TS_CONFIG_HTTP_CONNECT_ATTEMPTS_MAX_RETRIES, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.max_open_write_retries", 
{TS_CONFIG_HTTP_CACHE_MAX_OPEN_WRITE_RETRIES, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.forward.proxy_auth_to_parent", 
{TS_CONFIG_HTTP_FORWARD_PROXY_AUTH_TO_PARENT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.parent_proxy.mark_down_hostdb", 
{TS_CONFIG_PARENT_FAILURES_UPDATE_HOSTDB, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.negative_revalidating_enabled", 
{TS_CONFIG_HTTP_NEGATIVE_REVALIDATING_ENABLED, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.guaranteed_min_lifetime", 
{TS_CONFIG_HTTP_CACHE_GUARANTEED_MIN_LIFETIME, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.guaranteed_max_lifetime", 
{TS_CONFIG_HTTP_CACHE_GUARANTEED_MAX_LIFETIME, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.transaction_active_timeout_in", 
{TS_CONFIG_HTTP_TRANSACTION_ACTIVE_TIMEOUT_IN, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.post_connect_attempts_timeout", 
{TS_CONFIG_HTTP_POST_CONNECT_ATTEMPTS_TIMEOUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.ignore_client_cc_max_age", 
{TS_CONFIG_HTTP_CACHE_IGNORE_CLIENT_CC_MAX_AGE, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.negative_revalidating_lifetime", 
{TS_CONFIG_HTTP_NEGATIVE_REVALIDATING_LIFETIME, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.transaction_active_timeout_out", 
{TS_CONFIG_HTTP_TRANSACTION_ACTIVE_TIMEOUT_OUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.background_fill_active_timeout", 
{TS_CONFIG_HTTP_BACKGROUND_FILL_ACTIVE_TIMEOUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.attach_server_session_to_client", 
{TS_CONFIG_HTTP_ATTACH_SERVER_SESSION_TO_CLIENT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.cache_responses_to_cookies",
+      {TS_CONFIG_HTTP_CACHE_CACHE_RESPONSES_TO_COOKIES, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.keep_alive_no_activity_timeout_in",
+      {TS_CONFIG_HTTP_KEEP_ALIVE_NO_ACTIVITY_TIMEOUT_IN, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.post.check.content_length.enabled",
+      {TS_CONFIG_HTTP_POST_CHECK_CONTENT_LENGTH_ENABLED, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.cache_urls_that_look_dynamic",
+      {TS_CONFIG_HTTP_CACHE_CACHE_URLS_THAT_LOOK_DYNAMIC, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.transaction_no_activity_timeout_in",
+      {TS_CONFIG_HTTP_TRANSACTION_NO_ACTIVITY_TIMEOUT_IN, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.keep_alive_no_activity_timeout_out",
+      {TS_CONFIG_HTTP_KEEP_ALIVE_NO_ACTIVITY_TIMEOUT_OUT, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.uncacheable_requests_bypass_parent",
+      {TS_CONFIG_HTTP_UNCACHEABLE_REQUESTS_BYPASS_PARENT, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.transaction_no_activity_timeout_out",
+      {TS_CONFIG_HTTP_TRANSACTION_NO_ACTIVITY_TIMEOUT_OUT, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.background_fill_completed_threshold",
+      {TS_CONFIG_HTTP_BACKGROUND_FILL_COMPLETED_THRESHOLD, 
TS_RECORDDATATYPE_FLOAT}},
+     {"proxy.config.http.parent_proxy.total_connect_attempts",
+      {TS_CONFIG_HTTP_PARENT_PROXY_TOTAL_CONNECT_ATTEMPTS, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.ignore_accept_charset_mismatch",
+      {TS_CONFIG_HTTP_CACHE_IGNORE_ACCEPT_CHARSET_MISMATCH, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.ignore_accept_language_mismatch",
+      {TS_CONFIG_HTTP_CACHE_IGNORE_ACCEPT_LANGUAGE_MISMATCH, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.cache.ignore_accept_encoding_mismatch",
+      {TS_CONFIG_HTTP_CACHE_IGNORE_ACCEPT_ENCODING_MISMATCH, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.parent_proxy.connect_attempts_timeout",
+      {TS_CONFIG_HTTP_PARENT_CONNECT_ATTEMPT_TIMEOUT, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.connect_attempts_max_retries_dead_server",
+      {TS_CONFIG_HTTP_CONNECT_ATTEMPTS_MAX_RETRIES_DEAD_SERVER, 
TS_RECORDDATATYPE_INT}},
+     {"proxy.config.http.parent_proxy.per_parent_connect_attempts",
+      {TS_CONFIG_HTTP_PER_PARENT_CONNECT_ATTEMPTS, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.ssl.client.verify.server", 
{TS_CONFIG_SSL_CLIENT_VERIFY_SERVER, TS_RECORDDATATYPE_INT}},
+     {"proxy.config.ssl.client.verify.server.policy", 
{TS_CONFIG_SSL_CLIENT_VERIFY_SERVER_POLICY, TS_RECORDDATATYPE_STRING}},
+     {"proxy.config.ssl.client.verify.server.properties",
+      {TS_CONFIG_SSL_CLIENT_VERIFY_SERVER_PROPERTIES, 
TS_RECORDDATATYPE_STRING}},
+     {"proxy.config.ssl.client.sni_policy", {TS_CONFIG_SSL_CLIENT_SNI_POLICY, 
TS_RECORDDATATYPE_STRING}},
+     {"proxy.config.ssl.client.cert.filename", 
{TS_CONFIG_SSL_CLIENT_CERT_FILENAME, TS_RECORDDATATYPE_STRING}},
+     {"proxy.config.ssl.client.cert.path", {TS_CONFIG_SSL_CERT_FILEPATH, 
TS_RECORDDATATYPE_STRING}},
+     {"proxy.config.ssl.client.private_key.filename", 
{TS_CONFIG_SSL_CLIENT_PRIVATE_KEY_FILENAME, TS_RECORDDATATYPE_STRING}},
+     {"proxy.config.ssl.client.CA.cert.filename", 
{TS_CONFIG_SSL_CLIENT_CA_CERT_FILENAME, TS_RECORDDATATYPE_STRING}}});
diff --git a/src/traffic_ctl/Makefile.inc b/src/traffic_ctl/Makefile.inc
index 446e565..3808c19 100644
--- a/src/traffic_ctl/Makefile.inc
+++ b/src/traffic_ctl/Makefile.inc
@@ -23,6 +23,8 @@ traffic_ctl_traffic_ctl_CPPFLAGS = \
     $(AM_CPPFLAGS) \
     $(iocore_include_dirs) \
     -I$(abs_top_srcdir)/include \
+    -I$(abs_top_srcdir)/proxy/http \
+    -I$(abs_top_srcdir)/proxy/hdrs \
     -I$(abs_top_srcdir)/lib \
     -I$(abs_top_srcdir)/mgmt \
     -I$(abs_top_srcdir)/mgmt/api/include \
@@ -37,6 +39,7 @@ traffic_ctl_traffic_ctl_SOURCES = \
        traffic_ctl/server.cc \
        traffic_ctl/storage.cc \
        traffic_ctl/host.cc \
+       shared/overridable_txn_vars.cc \
        traffic_ctl/traffic_ctl.cc
 
 traffic_ctl_traffic_ctl_LDADD = \
diff --git a/src/traffic_ctl/config.cc b/src/traffic_ctl/config.cc
index 6212b8c..d60cb3a 100644
--- a/src/traffic_ctl/config.cc
+++ b/src/traffic_ctl/config.cc
@@ -25,6 +25,10 @@
 #include <ctime>
 #include "records/I_RecDefs.h"
 #include "records/P_RecUtils.h"
+#include "ts/apidefs.h"
+#include "HTTP.h"
+#include "HttpConnectionCount.h"
+#include "shared/overridable_txn_vars.h"
 #include <tscore/BufferWriter.h>
 
 struct RecordDescriptionPolicy {
@@ -169,6 +173,30 @@ rec_labelof(int rec_class)
   }
 }
 
+static const char *
+rec_datatypeof(TSRecordDataType dt)
+{
+  switch (dt) {
+  case TS_RECORDDATATYPE_INT:
+    return "int";
+  case TS_RECORDDATATYPE_NULL:
+    return "null";
+  case TS_RECORDDATATYPE_FLOAT:
+    return "float";
+  case TS_RECORDDATATYPE_STRING:
+    return "string";
+  case TS_RECORDDATATYPE_COUNTER:
+    return "counter";
+  case TS_RECORDDATATYPE_STAT_CONST:
+    return "constant stat";
+  case TS_RECORDDATATYPE_STAT_FX:
+    return "stat fx";
+  case TS_RECORDDATATYPE_MAX:
+    return "*";
+  }
+  return "?";
+}
+
 static std::string
 timestr(time_t tm)
 {
@@ -224,6 +252,9 @@ CtrlEngine::config_describe()
       return;
     }
 
+    auto ov_iter       = ts::Overridable_Txn_Vars.find(it);
+    bool overridable_p = (ov_iter != ts::Overridable_Txn_Vars.end());
+
     std::string text;
     std::cout << ts::bwprint(text, "{:16s}: {}\n", "Name", desc.rec_name);
     std::cout << ts::bwprint(text, "{:16s}: {}\n", "Current Value ", 
CtrlMgmtRecordValue(desc.rec_type, desc.rec_value).c_str());
@@ -234,6 +265,8 @@ CtrlEngine::config_describe()
     std::cout << ts::bwprint(text, "{:16s}: {}\n", "Update Type ", 
rec_updateof(desc.rec_updatetype));
     std::cout << ts::bwprint(text, "{:16s}: {}\n", "Update Status ", 
desc.rec_update);
     std::cout << ts::bwprint(text, "{:16s}: {}\n", "Source ", 
rec_sourceof(desc.rec_source));
+    std::cout << ts::bwprint(text, "{:16s}: {} {}\n", "Overridable", 
overridable_p ? "yes" : "no",
+                             overridable_p ? 
rec_datatypeof(std::get<1>(ov_iter->second)) : "");
 
     if (strlen(desc.rec_checkexpr)) {
       std::cout << ts::bwprint(text, "{:16s}: {}\n", "Syntax Check ", 
rec_checkof(desc.rec_checktype), desc.rec_checkexpr);
diff --git a/src/traffic_server/InkAPI.cc b/src/traffic_server/InkAPI.cc
index 4f0813a..0be202f 100644
--- a/src/traffic_server/InkAPI.cc
+++ b/src/traffic_server/InkAPI.cc
@@ -73,6 +73,7 @@
 #include "records/I_RecCore.h"
 #include "I_Machine.h"
 #include "HttpProxyServerMain.h"
+#include "shared/overridable_txn_vars.h"
 
 #include "ts/ts.h"
 
@@ -8849,142 +8850,6 @@ TSHttpTxnConfigStringGet(TSHttpTxn txnp, 
TSOverridableConfigKey conf, const char
   return TS_SUCCESS;
 }
 
-// This is a map of all overridable configurations, with the data type
-static const std::unordered_map<std::string_view, std::tuple<const 
TSOverridableConfigKey, const TSRecordDataType>> Overridable_Map(
-  {{"proxy.config.srv_enabled", {TS_CONFIG_SRV_ENABLED, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.http", {TS_CONFIG_HTTP_CACHE_HTTP, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.ssl.hsts_max_age", {TS_CONFIG_SSL_HSTS_MAX_AGE, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.normalize_ae", {TS_CONFIG_HTTP_NORMALIZE_AE, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.chunking.size", {TS_CONFIG_HTTP_CHUNKING_SIZE, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.ssl.client.cert.path", {TS_CONFIG_SSL_CERT_FILEPATH, 
TS_RECORDDATATYPE_STRING}},
-   {"proxy.config.http.allow_half_open", {TS_CONFIG_HTTP_ALLOW_HALF_OPEN, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.chunking_enabled", {TS_CONFIG_HTTP_CHUNKING_ENABLED, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.generation", {TS_CONFIG_HTTP_CACHE_GENERATION, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.insert_client_ip", 
{TS_CONFIG_HTTP_ANONYMIZE_INSERT_CLIENT_IP, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.insert_forwarded", {TS_CONFIG_HTTP_INSERT_FORWARDED, 
TS_RECORDDATATYPE_STRING}},
-   {"proxy.config.http.cache.range.write", {TS_CONFIG_HTTP_CACHE_RANGE_WRITE, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.allow_multi_range", {TS_CONFIG_HTTP_ALLOW_MULTI_RANGE, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.range.lookup", 
{TS_CONFIG_HTTP_CACHE_RANGE_LOOKUP, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.net.sock_packet_tos_out", 
{TS_CONFIG_NET_SOCK_PACKET_TOS_OUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.slow.log.threshold", 
{TS_CONFIG_HTTP_SLOW_LOG_THRESHOLD, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.max_stale_age", 
{TS_CONFIG_HTTP_CACHE_MAX_STALE_AGE, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.default_buffer_size", 
{TS_CONFIG_HTTP_DEFAULT_BUFFER_SIZE, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.response_server_str", 
{TS_CONFIG_HTTP_RESPONSE_SERVER_STR, TS_RECORDDATATYPE_STRING}},
-   {"proxy.config.http.keep_alive_post_out", 
{TS_CONFIG_HTTP_KEEP_ALIVE_POST_OUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.net.sock_option_flag_out", 
{TS_CONFIG_NET_SOCK_OPTION_FLAG_OUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.net.sock_packet_mark_out", 
{TS_CONFIG_NET_SOCK_PACKET_MARK_OUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.websocket.active_timeout", 
{TS_CONFIG_WEBSOCKET_ACTIVE_TIMEOUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.flow_control.enabled", 
{TS_CONFIG_HTTP_FLOW_CONTROL_ENABLED, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.send_http11_requests", 
{TS_CONFIG_HTTP_SEND_HTTP11_REQUESTS, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.body_factory.template_base", 
{TS_CONFIG_BODY_FACTORY_TEMPLATE_BASE, TS_RECORDDATATYPE_STRING}},
-   {"proxy.config.http.anonymize_remove_from", 
{TS_CONFIG_HTTP_ANONYMIZE_REMOVE_FROM, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.keep_alive_enabled_in", 
{TS_CONFIG_HTTP_KEEP_ALIVE_ENABLED_IN, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.doc_in_cache_skip_dns", 
{TS_CONFIG_HTTP_DOC_IN_CACHE_SKIP_DNS, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.forward_connect_method", 
{TS_CONFIG_HTTP_FORWARD_CONNECT_METHOD, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.request_buffer_enabled", 
{TS_CONFIG_HTTP_REQUEST_BUFFER_ENABLED, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.down_server.cache_time", 
{TS_CONFIG_HTTP_DOWN_SERVER_CACHE_TIME, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.insert_age_in_response", 
{TS_CONFIG_HTTP_INSERT_AGE_IN_RESPONSE, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.url_remap.pristine_host_hdr", 
{TS_CONFIG_URL_REMAP_PRISTINE_HOST_HDR, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.insert_request_via_str", 
{TS_CONFIG_HTTP_INSERT_REQUEST_VIA_STR, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.flow_control.low_water", 
{TS_CONFIG_HTTP_FLOW_CONTROL_LOW_WATER_MARK, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.required_headers", 
{TS_CONFIG_HTTP_CACHE_REQUIRED_HEADERS, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.ssl.hsts_include_subdomains", 
{TS_CONFIG_SSL_HSTS_INCLUDE_SUBDOMAINS, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.number_of_redirections", 
{TS_CONFIG_HTTP_NUMBER_OF_REDIRECTIONS, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.keep_alive_enabled_out", 
{TS_CONFIG_HTTP_KEEP_ALIVE_ENABLED_OUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.response_server_enabled", 
{TS_CONFIG_HTTP_RESPONSE_SERVER_ENABLED, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.anonymize_remove_cookie", 
{TS_CONFIG_HTTP_ANONYMIZE_REMOVE_COOKIE, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.request_header_max_size", 
{TS_CONFIG_HTTP_REQUEST_HEADER_MAX_SIZE, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.parent_proxy.retry_time", 
{TS_CONFIG_HTTP_PARENT_PROXY_RETRY_TIME, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.insert_response_via_str", 
{TS_CONFIG_HTTP_INSERT_RESPONSE_VIA_STR, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.flow_control.high_water", 
{TS_CONFIG_HTTP_FLOW_CONTROL_HIGH_WATER_MARK, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.negative_caching_enabled", 
{TS_CONFIG_HTTP_NEGATIVE_CACHING_ENABLED, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.when_to_revalidate", 
{TS_CONFIG_HTTP_CACHE_WHEN_TO_REVALIDATE, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.response_header_max_size", 
{TS_CONFIG_HTTP_RESPONSE_HEADER_MAX_SIZE, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.anonymize_remove_referer", 
{TS_CONFIG_HTTP_ANONYMIZE_REMOVE_REFERER, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.global_user_agent_header", 
{TS_CONFIG_HTTP_GLOBAL_USER_AGENT_HEADER, TS_RECORDDATATYPE_STRING}},
-   {"proxy.config.net.sock_recv_buffer_size_out", 
{TS_CONFIG_NET_SOCK_RECV_BUFFER_SIZE_OUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.net.sock_send_buffer_size_out", 
{TS_CONFIG_NET_SOCK_SEND_BUFFER_SIZE_OUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.connect_attempts_timeout", 
{TS_CONFIG_HTTP_CONNECT_ATTEMPTS_TIMEOUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.websocket.no_activity_timeout", 
{TS_CONFIG_WEBSOCKET_NO_ACTIVITY_TIMEOUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.negative_caching_lifetime", 
{TS_CONFIG_HTTP_NEGATIVE_CACHING_LIFETIME, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.default_buffer_water_mark", 
{TS_CONFIG_HTTP_DEFAULT_BUFFER_WATER_MARK, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.heuristic_lm_factor", 
{TS_CONFIG_HTTP_CACHE_HEURISTIC_LM_FACTOR, TS_RECORDDATATYPE_FLOAT}},
-   {OutboundConnTrack::CONFIG_VAR_MAX, 
{TS_CONFIG_HTTP_PER_SERVER_CONNECTION_MAX, TS_RECORDDATATYPE_INT}},
-   {OutboundConnTrack::CONFIG_VAR_MIN, 
{TS_CONFIG_HTTP_SERVER_MIN_KEEP_ALIVE_CONNS, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.anonymize_remove_client_ip", 
{TS_CONFIG_HTTP_ANONYMIZE_REMOVE_CLIENT_IP, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.open_read_retry_time", 
{TS_CONFIG_HTTP_CACHE_OPEN_READ_RETRY_TIME, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.down_server.abort_threshold", 
{TS_CONFIG_HTTP_DOWN_SERVER_ABORT_THRESHOLD, TS_RECORDDATATYPE_INT}},
-   {OutboundConnTrack::CONFIG_VAR_MATCH, 
{TS_CONFIG_HTTP_PER_SERVER_CONNECTION_MATCH, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.parent_proxy.fail_threshold", 
{TS_CONFIG_HTTP_PARENT_PROXY_FAIL_THRESHOLD, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.ignore_authentication", 
{TS_CONFIG_HTTP_CACHE_IGNORE_AUTHENTICATION, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.anonymize_remove_user_agent", 
{TS_CONFIG_HTTP_ANONYMIZE_REMOVE_USER_AGENT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.connect_attempts_rr_retries", 
{TS_CONFIG_HTTP_CONNECT_ATTEMPTS_RR_RETRIES, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.max_open_read_retries", 
{TS_CONFIG_HTTP_CACHE_MAX_OPEN_READ_RETRIES, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.auth_server_session_private", 
{TS_CONFIG_HTTP_AUTH_SERVER_SESSION_PRIVATE, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.redirect_use_orig_cache_key", 
{TS_CONFIG_HTTP_REDIRECT_USE_ORIG_CACHE_KEY, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.ignore_client_no_cache", 
{TS_CONFIG_HTTP_CACHE_IGNORE_CLIENT_NO_CACHE, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.ims_on_client_no_cache", 
{TS_CONFIG_HTTP_CACHE_IMS_ON_CLIENT_NO_CACHE, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.ignore_server_no_cache", 
{TS_CONFIG_HTTP_CACHE_IGNORE_SERVER_NO_CACHE, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.heuristic_min_lifetime", 
{TS_CONFIG_HTTP_CACHE_HEURISTIC_MIN_LIFETIME, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.heuristic_max_lifetime", 
{TS_CONFIG_HTTP_CACHE_HEURISTIC_MAX_LIFETIME, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.server_session_sharing.match", 
{TS_CONFIG_HTTP_SERVER_SESSION_SHARING_MATCH, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.ignore_accept_mismatch", 
{TS_CONFIG_HTTP_CACHE_IGNORE_ACCEPT_MISMATCH, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.open_write_fail_action", 
{TS_CONFIG_HTTP_CACHE_OPEN_WRITE_FAIL_ACTION, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.insert_squid_x_forwarded_for", 
{TS_CONFIG_HTTP_INSERT_SQUID_X_FORWARDED_FOR, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.connect_attempts_max_retries", 
{TS_CONFIG_HTTP_CONNECT_ATTEMPTS_MAX_RETRIES, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.max_open_write_retries", 
{TS_CONFIG_HTTP_CACHE_MAX_OPEN_WRITE_RETRIES, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.forward.proxy_auth_to_parent", 
{TS_CONFIG_HTTP_FORWARD_PROXY_AUTH_TO_PARENT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.parent_proxy.mark_down_hostdb", 
{TS_CONFIG_PARENT_FAILURES_UPDATE_HOSTDB, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.negative_revalidating_enabled", 
{TS_CONFIG_HTTP_NEGATIVE_REVALIDATING_ENABLED, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.guaranteed_min_lifetime", 
{TS_CONFIG_HTTP_CACHE_GUARANTEED_MIN_LIFETIME, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.guaranteed_max_lifetime", 
{TS_CONFIG_HTTP_CACHE_GUARANTEED_MAX_LIFETIME, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.transaction_active_timeout_in", 
{TS_CONFIG_HTTP_TRANSACTION_ACTIVE_TIMEOUT_IN, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.post_connect_attempts_timeout", 
{TS_CONFIG_HTTP_POST_CONNECT_ATTEMPTS_TIMEOUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.ignore_client_cc_max_age", 
{TS_CONFIG_HTTP_CACHE_IGNORE_CLIENT_CC_MAX_AGE, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.negative_revalidating_lifetime", 
{TS_CONFIG_HTTP_NEGATIVE_REVALIDATING_LIFETIME, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.transaction_active_timeout_out", 
{TS_CONFIG_HTTP_TRANSACTION_ACTIVE_TIMEOUT_OUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.background_fill_active_timeout", 
{TS_CONFIG_HTTP_BACKGROUND_FILL_ACTIVE_TIMEOUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.attach_server_session_to_client", 
{TS_CONFIG_HTTP_ATTACH_SERVER_SESSION_TO_CLIENT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.cache_responses_to_cookies", 
{TS_CONFIG_HTTP_CACHE_CACHE_RESPONSES_TO_COOKIES, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.keep_alive_no_activity_timeout_in",
-    {TS_CONFIG_HTTP_KEEP_ALIVE_NO_ACTIVITY_TIMEOUT_IN, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.post.check.content_length.enabled",
-    {TS_CONFIG_HTTP_POST_CHECK_CONTENT_LENGTH_ENABLED, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.cache_urls_that_look_dynamic",
-    {TS_CONFIG_HTTP_CACHE_CACHE_URLS_THAT_LOOK_DYNAMIC, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.transaction_no_activity_timeout_in",
-    {TS_CONFIG_HTTP_TRANSACTION_NO_ACTIVITY_TIMEOUT_IN, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.keep_alive_no_activity_timeout_out",
-    {TS_CONFIG_HTTP_KEEP_ALIVE_NO_ACTIVITY_TIMEOUT_OUT, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.uncacheable_requests_bypass_parent",
-    {TS_CONFIG_HTTP_UNCACHEABLE_REQUESTS_BYPASS_PARENT, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.transaction_no_activity_timeout_out",
-    {TS_CONFIG_HTTP_TRANSACTION_NO_ACTIVITY_TIMEOUT_OUT, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.background_fill_completed_threshold",
-    {TS_CONFIG_HTTP_BACKGROUND_FILL_COMPLETED_THRESHOLD, 
TS_RECORDDATATYPE_FLOAT}},
-   {"proxy.config.http.parent_proxy.total_connect_attempts",
-    {TS_CONFIG_HTTP_PARENT_PROXY_TOTAL_CONNECT_ATTEMPTS, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.ignore_accept_charset_mismatch",
-    {TS_CONFIG_HTTP_CACHE_IGNORE_ACCEPT_CHARSET_MISMATCH, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.ignore_accept_language_mismatch",
-    {TS_CONFIG_HTTP_CACHE_IGNORE_ACCEPT_LANGUAGE_MISMATCH, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.cache.ignore_accept_encoding_mismatch",
-    {TS_CONFIG_HTTP_CACHE_IGNORE_ACCEPT_ENCODING_MISMATCH, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.parent_proxy.connect_attempts_timeout",
-    {TS_CONFIG_HTTP_PARENT_CONNECT_ATTEMPT_TIMEOUT, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.connect_attempts_max_retries_dead_server",
-    {TS_CONFIG_HTTP_CONNECT_ATTEMPTS_MAX_RETRIES_DEAD_SERVER, 
TS_RECORDDATATYPE_INT}},
-   {"proxy.config.http.parent_proxy.per_parent_connect_attempts",
-    {TS_CONFIG_HTTP_PER_PARENT_CONNECT_ATTEMPTS, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.ssl.client.verify.server", 
{TS_CONFIG_SSL_CLIENT_VERIFY_SERVER, TS_RECORDDATATYPE_INT}},
-   {"proxy.config.ssl.client.verify.server.policy", 
{TS_CONFIG_SSL_CLIENT_VERIFY_SERVER_POLICY, TS_RECORDDATATYPE_STRING}},
-   {"proxy.config.ssl.client.verify.server.properties", 
{TS_CONFIG_SSL_CLIENT_VERIFY_SERVER_PROPERTIES, TS_RECORDDATATYPE_STRING}},
-   {"proxy.config.ssl.client.sni_policy", {TS_CONFIG_SSL_CLIENT_SNI_POLICY, 
TS_RECORDDATATYPE_STRING}},
-   {"proxy.config.ssl.client.cert.filename", 
{TS_CONFIG_SSL_CLIENT_CERT_FILENAME, TS_RECORDDATATYPE_STRING}},
-   {"proxy.config.ssl.client.cert.path", {TS_CONFIG_SSL_CERT_FILEPATH, 
TS_RECORDDATATYPE_STRING}},
-   {"proxy.config.ssl.client.private_key.filename", 
{TS_CONFIG_SSL_CLIENT_PRIVATE_KEY_FILENAME, TS_RECORDDATATYPE_STRING}},
-   {"proxy.config.ssl.client.CA.cert.filename", 
{TS_CONFIG_SSL_CLIENT_CA_CERT_FILENAME, TS_RECORDDATATYPE_STRING}}});
-
 TSReturnCode
 TSHttpTxnConfigFind(const char *name, int length, TSOverridableConfigKey 
*conf, TSRecordDataType *type)
 {
@@ -8992,11 +8857,8 @@ TSHttpTxnConfigFind(const char *name, int length, 
TSOverridableConfigKey *conf,
   sdk_assert(sdk_sanity_check_null_ptr(conf) == TS_SUCCESS);
 
   std::string_view name_sv(name, length < 0 ? strlen(name) : length);
-  auto config = Overridable_Map.find(name_sv);
-
-  if (config != Overridable_Map.end()) {
+  if (auto config = ts::Overridable_Txn_Vars.find(name_sv); config != 
ts::Overridable_Txn_Vars.end()) {
     std::tie(*conf, *type) = config->second;
-
     return TS_SUCCESS;
   }
 
diff --git a/src/traffic_server/Makefile.inc b/src/traffic_server/Makefile.inc
index eb74f71..d189bd7 100644
--- a/src/traffic_server/Makefile.inc
+++ b/src/traffic_server/Makefile.inc
@@ -51,6 +51,7 @@ traffic_server_traffic_server_SOURCES = \
        traffic_server/InkAPI.cc \
        traffic_server/InkIOCoreAPI.cc \
        traffic_server/SocksProxy.cc \
+       shared/overridable_txn_vars.cc \
        traffic_server/traffic_server.cc
 
 if BUILD_TESTS

Reply via email to