This is an automated email from the ASF dual-hosted git repository. zwoop pushed a commit to branch master in repository https://git-dual.apache.org/repos/asf/trafficserver.git
commit ea4f7e2c0a346e7a34a93816fcbfb45357a641f2 Author: Leif Hedstrom <[email protected]> AuthorDate: Sat Apr 30 12:58:58 2016 -0600 TS-4401 Override proxy.config.http.uncacheable_requests_bypass_parent --- doc/admin-guide/files/records.config.en.rst | 2 + lib/ts/apidefs.h.in | 1 + plugins/experimental/ts_lua/ts_lua_http_config.c | 2 + proxy/InkAPI.cc | 5 +++ proxy/InkAPITest.cc | 1 + proxy/http/HttpConfig.cc | 4 +- proxy/http/HttpConfig.h | 49 ++++++++++++------------ proxy/http/HttpTransact.cc | 2 +- 8 files changed, 39 insertions(+), 27 deletions(-) diff --git a/doc/admin-guide/files/records.config.en.rst b/doc/admin-guide/files/records.config.en.rst index 67a9b09..f3c0595 100644 --- a/doc/admin-guide/files/records.config.en.rst +++ b/doc/admin-guide/files/records.config.en.rst @@ -1315,6 +1315,8 @@ Origin Server Connect Attempts because the origin server was too slow in sending the response header. .. ts:cv:: CONFIG proxy.config.http.uncacheable_requests_bypass_parent INT 1 + :reloadable: + :overridable: When enabled (1), Traffic Server bypasses the parent proxy for a request that is not cacheable. diff --git a/lib/ts/apidefs.h.in b/lib/ts/apidefs.h.in index b876e99..d4b94db 100644 --- a/lib/ts/apidefs.h.in +++ b/lib/ts/apidefs.h.in @@ -697,6 +697,7 @@ typedef enum { TS_CONFIG_HTTP_ORIGIN_MAX_CONNECTIONS_QUEUE, TS_CONFIG_WEBSOCKET_NO_ACTIVITY_TIMEOUT, TS_CONFIG_WEBSOCKET_ACTIVE_TIMEOUT, + TS_CONFIG_HTTP_UNCACHEABLE_REQUESTS_BYPASS_PARENT, TS_CONFIG_LAST_ENTRY } TSOverridableConfigKey; diff --git a/plugins/experimental/ts_lua/ts_lua_http_config.c b/plugins/experimental/ts_lua/ts_lua_http_config.c index 952af54..aca39ce 100644 --- a/plugins/experimental/ts_lua/ts_lua_http_config.c +++ b/plugins/experimental/ts_lua/ts_lua_http_config.c @@ -116,6 +116,7 @@ typedef enum { TS_LUA_CONFIG_HTTP_ORIGIN_MAX_CONNECTIONS_QUEUE = TS_CONFIG_HTTP_ORIGIN_MAX_CONNECTIONS_QUEUE, TS_LUA_CONFIG_WEBSOCKET_NO_ACTIVITY_TIMEOUT = TS_CONFIG_WEBSOCKET_NO_ACTIVITY_TIMEOUT, TS_LUA_CONFIG_WEBSOCKET_ACTIVE_TIMEOUT = TS_CONFIG_WEBSOCKET_ACTIVE_TIMEOUT, + TS_LUA_CONFIG_HTTP_UNCACHEABLE_REQUESTS_BYPASS_PARENT = TS_CONFIG_HTTP_UNCACHEABLE_REQUESTS_BYPASS_PARENT, TS_LUA_CONFIG_LAST_ENTRY = TS_CONFIG_LAST_ENTRY, } TSLuaOverridableConfigKey; @@ -224,6 +225,7 @@ ts_lua_var_item ts_lua_http_config_vars[] = { TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_HTTP_ORIGIN_MAX_CONNECTIONS_QUEUE), TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_WEBSOCKET_NO_ACTIVITY_TIMEOUT), TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_WEBSOCKET_ACTIVE_TIMEOUT), + TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_HTTP_UNCACHEABLE_REQUESTS_BYPASS_PARENT), TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_LAST_ENTRY), }; diff --git a/proxy/InkAPI.cc b/proxy/InkAPI.cc index f0ac359..c28f3ab 100644 --- a/proxy/InkAPI.cc +++ b/proxy/InkAPI.cc @@ -7956,6 +7956,9 @@ _conf_to_memberp(TSOverridableConfigKey conf, OverridableHttpConfigParams *overr typ = OVERRIDABLE_TYPE_INT; ret = &overridableHttpConfig->websocket_active_timeout; break; + case TS_CONFIG_HTTP_UNCACHEABLE_REQUESTS_BYPASS_PARENT: + ret = &overridableHttpConfig->uncacheable_requests_bypass_parent; + break; // This helps avoiding compiler warnings, yet detect unhandled enum members. case TS_CONFIG_NULL: case TS_CONFIG_LAST_ENTRY: @@ -8579,6 +8582,8 @@ TSHttpTxnConfigFind(const char *name, int length, TSOverridableConfigKey *conf, case 't': if (!strncmp(name, "proxy.config.http.keep_alive_no_activity_timeout_out", length)) cnf = TS_CONFIG_HTTP_KEEP_ALIVE_NO_ACTIVITY_TIMEOUT_OUT; + else if (!strncmp(name, "proxy.config.http.uncacheable_requests_bypass_parent", length)) + cnf = TS_CONFIG_HTTP_UNCACHEABLE_REQUESTS_BYPASS_PARENT; break; } break; diff --git a/proxy/InkAPITest.cc b/proxy/InkAPITest.cc index 4445e47..d3b5716 100644 --- a/proxy/InkAPITest.cc +++ b/proxy/InkAPITest.cc @@ -7353,6 +7353,7 @@ const char *SDK_Overridable_Configs[TS_CONFIG_LAST_ENTRY] = { "proxy.config.http.origin_max_connections_queue", "proxy.config.websocket.no_activity_timeout", "proxy.config.websocket.active_timeout", + "proxy.config.http.uncacheable_requests_bypass_parent", }; REGRESSION_TEST(SDK_API_OVERRIDABLE_CONFIGS)(RegressionTest *test, int /* atype ATS_UNUSED */, int *pstatus) diff --git a/proxy/http/HttpConfig.cc b/proxy/http/HttpConfig.cc index d40f9e9..c82d2d9 100644 --- a/proxy/http/HttpConfig.cc +++ b/proxy/http/HttpConfig.cc @@ -891,7 +891,7 @@ HttpConfig::startup() // Wank me. HttpEstablishStaticConfigByte(c.disable_ssl_parenting, "proxy.local.http.parent_proxy.disable_connect_tunneling"); HttpEstablishStaticConfigByte(c.no_dns_forward_to_parent, "proxy.config.http.no_dns_just_forward_to_parent"); - HttpEstablishStaticConfigByte(c.uncacheable_requests_bypass_parent, "proxy.config.http.uncacheable_requests_bypass_parent"); + HttpEstablishStaticConfigByte(c.oride.uncacheable_requests_bypass_parent, "proxy.config.http.uncacheable_requests_bypass_parent"); HttpEstablishStaticConfigByte(c.oride.doc_in_cache_skip_dns, "proxy.config.http.doc_in_cache_skip_dns"); HttpEstablishStaticConfigByte(c.no_origin_server_dns, "proxy.config.http.no_origin_server_dns"); @@ -1144,7 +1144,7 @@ HttpConfig::reconfigure() params->proxy_hostname = ats_strdup(m_master.proxy_hostname); params->proxy_hostname_len = (params->proxy_hostname) ? strlen(params->proxy_hostname) : 0; params->no_dns_forward_to_parent = INT_TO_BOOL(m_master.no_dns_forward_to_parent); - params->uncacheable_requests_bypass_parent = INT_TO_BOOL(m_master.uncacheable_requests_bypass_parent); + params->oride.uncacheable_requests_bypass_parent = INT_TO_BOOL(m_master.oride.uncacheable_requests_bypass_parent); params->no_origin_server_dns = INT_TO_BOOL(m_master.no_origin_server_dns); params->use_client_target_addr = m_master.use_client_target_addr; params->use_client_source_port = INT_TO_BOOL(m_master.use_client_source_port); diff --git a/proxy/http/HttpConfig.h b/proxy/http/HttpConfig.h index ef3c608..9330fa6 100644 --- a/proxy/http/HttpConfig.h +++ b/proxy/http/HttpConfig.h @@ -363,27 +363,28 @@ struct OverridableHttpConfigParams { : maintain_pristine_host_hdr(1), chunking_enabled(1), negative_caching_enabled(0), negative_revalidating_enabled(0), cache_when_to_revalidate(0), keep_alive_enabled_in(1), keep_alive_enabled_out(1), keep_alive_post_out(1), server_session_sharing_match(TS_SERVER_SESSION_SHARING_MATCH_BOTH), auth_server_session_private(1), - fwd_proxy_auth_to_parent(0), insert_age_in_response(1), anonymize_remove_from(0), anonymize_remove_referer(0), - anonymize_remove_user_agent(0), anonymize_remove_cookie(0), anonymize_remove_client_ip(0), anonymize_insert_client_ip(1), - proxy_response_server_enabled(1), proxy_response_hsts_max_age(-1), proxy_response_hsts_include_subdomains(0), - insert_squid_x_forwarded_for(1), send_http11_requests(1), cache_http(1), cache_cluster_cache_local(0), - cache_ignore_client_no_cache(1), cache_ignore_client_cc_max_age(0), cache_ims_on_client_no_cache(1), - cache_ignore_server_no_cache(0), cache_responses_to_cookies(1), cache_ignore_auth(0), cache_urls_that_look_dynamic(1), - cache_required_headers(2), cache_range_lookup(1), cache_range_write(0), insert_request_via_string(1), - insert_response_via_string(0), doc_in_cache_skip_dns(1), flow_control_enabled(0), accept_encoding_filter_enabled(0), - normalize_ae_gzip(0), negative_caching_lifetime(1800), negative_revalidating_lifetime(1800), sock_recv_buffer_size_out(0), - sock_send_buffer_size_out(0), sock_option_flag_out(0), sock_packet_mark_out(0), sock_packet_tos_out(0), - server_tcp_init_cwnd(0), request_hdr_max_size(131072), response_hdr_max_size(131072), post_check_content_length_enabled(1), - cache_heuristic_min_lifetime(3600), cache_heuristic_max_lifetime(86400), cache_guaranteed_min_lifetime(0), - cache_guaranteed_max_lifetime(31536000), cache_max_stale_age(604800), keep_alive_no_activity_timeout_in(115), - keep_alive_no_activity_timeout_out(120), transaction_no_activity_timeout_in(30), transaction_no_activity_timeout_out(30), - transaction_active_timeout_out(0), websocket_active_timeout(3600), websocket_inactive_timeout(600), origin_max_connections(0), - origin_max_connections_queue(0), attach_server_session_to_client(0), connect_attempts_max_retries(0), - connect_attempts_max_retries_dead_server(3), connect_attempts_rr_retries(3), connect_attempts_timeout(30), - post_connect_attempts_timeout(1800), down_server_timeout(300), client_abort_threshold(10), freshness_fuzz_time(240), - freshness_fuzz_min_time(0), max_cache_open_read_retries(-1), cache_open_read_retry_time(10), cache_generation_number(-1), - max_cache_open_write_retries(1), background_fill_active_timeout(60), http_chunking_size(4096), flow_high_water_mark(0), - flow_low_water_mark(0), default_buffer_size_index(8), default_buffer_water_mark(32768), slow_log_threshold(0), + fwd_proxy_auth_to_parent(0), uncacheable_requests_bypass_parent(1), insert_age_in_response(1), anonymize_remove_from(0), + anonymize_remove_referer(0), anonymize_remove_user_agent(0), anonymize_remove_cookie(0), anonymize_remove_client_ip(0), + anonymize_insert_client_ip(1), proxy_response_server_enabled(1), proxy_response_hsts_max_age(-1), + proxy_response_hsts_include_subdomains(0), insert_squid_x_forwarded_for(1), send_http11_requests(1), cache_http(1), + cache_cluster_cache_local(0), cache_ignore_client_no_cache(1), cache_ignore_client_cc_max_age(0), + cache_ims_on_client_no_cache(1), cache_ignore_server_no_cache(0), cache_responses_to_cookies(1), cache_ignore_auth(0), + cache_urls_that_look_dynamic(1), cache_required_headers(2), cache_range_lookup(1), cache_range_write(0), + insert_request_via_string(1), insert_response_via_string(0), doc_in_cache_skip_dns(1), flow_control_enabled(0), + accept_encoding_filter_enabled(0), normalize_ae_gzip(0), negative_caching_lifetime(1800), + negative_revalidating_lifetime(1800), sock_recv_buffer_size_out(0), sock_send_buffer_size_out(0), sock_option_flag_out(0), + sock_packet_mark_out(0), sock_packet_tos_out(0), server_tcp_init_cwnd(0), request_hdr_max_size(131072), + response_hdr_max_size(131072), post_check_content_length_enabled(1), cache_heuristic_min_lifetime(3600), + cache_heuristic_max_lifetime(86400), cache_guaranteed_min_lifetime(0), cache_guaranteed_max_lifetime(31536000), + cache_max_stale_age(604800), keep_alive_no_activity_timeout_in(115), keep_alive_no_activity_timeout_out(120), + transaction_no_activity_timeout_in(30), transaction_no_activity_timeout_out(30), transaction_active_timeout_out(0), + websocket_active_timeout(3600), websocket_inactive_timeout(600), origin_max_connections(0), origin_max_connections_queue(0), + attach_server_session_to_client(0), connect_attempts_max_retries(0), connect_attempts_max_retries_dead_server(3), + connect_attempts_rr_retries(3), connect_attempts_timeout(30), post_connect_attempts_timeout(1800), down_server_timeout(300), + client_abort_threshold(10), freshness_fuzz_time(240), freshness_fuzz_min_time(0), max_cache_open_read_retries(-1), + cache_open_read_retry_time(10), cache_generation_number(-1), max_cache_open_write_retries(1), + background_fill_active_timeout(60), http_chunking_size(4096), flow_high_water_mark(0), flow_low_water_mark(0), + default_buffer_size_index(8), default_buffer_water_mark(32768), slow_log_threshold(0), // Strings / floats must come last body_factory_template_base(NULL), body_factory_template_base_len(0), proxy_response_server_string(NULL), @@ -417,6 +418,7 @@ struct OverridableHttpConfigParams { // MgmtByte share_server_sessions; MgmtByte auth_server_session_private; MgmtByte fwd_proxy_auth_to_parent; + MgmtByte uncacheable_requests_bypass_parent; MgmtByte insert_age_in_response; @@ -642,7 +644,6 @@ public: MgmtByte enable_url_expandomatic; MgmtByte no_dns_forward_to_parent; - MgmtByte uncacheable_requests_bypass_parent; MgmtByte no_origin_server_dns; MgmtByte use_client_target_addr; MgmtByte use_client_source_port; @@ -851,8 +852,8 @@ extern volatile int32_t icp_dynamic_enabled; ///////////////////////////////////////////////////////////// inline HttpConfigParams::HttpConfigParams() : proxy_hostname(NULL), proxy_hostname_len(0), server_max_connections(0), origin_min_keep_alive_connections(0), - max_websocket_connections(-1), disable_ssl_parenting(0), enable_url_expandomatic(0), no_dns_forward_to_parent(0), - uncacheable_requests_bypass_parent(1), no_origin_server_dns(0), use_client_target_addr(0), use_client_source_port(0), + max_websocket_connections(-1), disable_ssl_parenting(0), enable_url_expandomatic(0), + no_dns_forward_to_parent(0), no_origin_server_dns(0), use_client_target_addr(0), use_client_source_port(0), proxy_request_via_string(NULL), proxy_request_via_string_len(0), proxy_response_via_string(NULL), proxy_response_via_string_len(0), url_expansions_string(NULL), url_expansions(NULL), num_url_expansions(0), session_auth_cache_keep_alive_enabled(1), transaction_active_timeout_in(900), accept_no_activity_timeout(120), diff --git a/proxy/http/HttpTransact.cc b/proxy/http/HttpTransact.cc index 1985bd3..b46850c 100644 --- a/proxy/http/HttpTransact.cc +++ b/proxy/http/HttpTransact.cc @@ -257,7 +257,7 @@ find_server_and_update_current_info(HttpTransact::State *s) DebugTxn("http_trans", "request not cacheable, so bypass parent"); s->parent_result.result = PARENT_DIRECT; } - } else if (s->http_config_param->uncacheable_requests_bypass_parent && s->http_config_param->no_dns_forward_to_parent == 0 && + } else if (s->txn_conf->uncacheable_requests_bypass_parent && s->http_config_param->no_dns_forward_to_parent == 0 && !HttpTransact::is_request_cache_lookupable(s)) { // request not lookupable and cacheable, so bypass parent if the parent is not an origin server. // Note that the configuration of the proxy as well as the request -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
