You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by su...@apache.org on 2015/11/05 19:56:24 UTC

trafficserver git commit: [TS-3994] Configurable option to allow redirect follow to use original request cache key.

Repository: trafficserver
Updated Branches:
  refs/heads/master 0be393be8 -> f2ba1dc71


[TS-3994] Configurable option to allow redirect follow to use
original request cache key.


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/f2ba1dc7
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/f2ba1dc7
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/f2ba1dc7

Branch: refs/heads/master
Commit: f2ba1dc71cd68bf7a98c87a3e1f19b131899847f
Parents: 0be393b
Author: Sudheer Vinukonda <su...@yahoo-inc.com>
Authored: Thu Nov 5 18:55:44 2015 +0000
Committer: Sudheer Vinukonda <su...@yahoo-inc.com>
Committed: Thu Nov 5 18:55:44 2015 +0000

----------------------------------------------------------------------
 lib/ts/apidefs.h.in                              |  1 +
 mgmt/RecordsConfig.cc                            |  5 ++++-
 plugins/experimental/ts_lua/ts_lua_http_config.c |  4 +++-
 proxy/InkAPI.cc                                  |  8 ++++++++
 proxy/InkAPITest.cc                              |  2 +-
 proxy/http/HttpConfig.cc                         | 16 ++++++++++------
 proxy/http/HttpConfig.h                          |  3 ++-
 proxy/http/HttpSM.cc                             |  2 +-
 8 files changed, 30 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f2ba1dc7/lib/ts/apidefs.h.in
----------------------------------------------------------------------
diff --git a/lib/ts/apidefs.h.in b/lib/ts/apidefs.h.in
index 6dba244..e8acced 100644
--- a/lib/ts/apidefs.h.in
+++ b/lib/ts/apidefs.h.in
@@ -692,6 +692,7 @@ typedef enum {
   TS_CONFIG_HTTP_ENABLE_REDIRECTION,
   TS_CONFIG_HTTP_NUMBER_OF_REDIRECTIONS,
   TS_CONFIG_HTTP_CACHE_MAX_OPEN_WRITE_RETRIES,
+  TS_CONFIG_HTTP_REDIRECT_USE_ORIG_CACHE_KEY,
   TS_CONFIG_LAST_ENTRY
 } TSOverridableConfigKey;
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f2ba1dc7/mgmt/RecordsConfig.cc
----------------------------------------------------------------------
diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
index 144d4c1..1a37264 100644
--- a/mgmt/RecordsConfig.cc
+++ b/mgmt/RecordsConfig.cc
@@ -169,13 +169,16 @@ static const RecordElement RecordsConfig[] =
   //#
   //# 1. redirection_enabled: if set to 1, redirection is enabled.
   //# 2. number_of_redirectionse: The maximum number of redirections TS permits
-  //# 3. post_copy_size: The maximum POST data size TS permits to copy
+  //# 3. proxy.config.http.redirect_use_orig_cache_key: Location Header if set to 0 (default), else use original request cache key
+  //# 4. post_copy_size: The maximum POST data size TS permits to copy
   //#
   //##############################################################################
   {RECT_CONFIG, "proxy.config.http.redirection_enabled", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_INT, "[0-1]", RECA_NULL}
   ,
   {RECT_CONFIG, "proxy.config.http.number_of_redirections", RECD_INT, "1", RECU_DYNAMIC, RR_NULL, RECC_NULL, NULL, RECA_NULL}
   ,
+  {RECT_CONFIG, "proxy.config.http.redirect_use_orig_cache_key", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_NULL, NULL, RECA_NULL}
+  ,
   {RECT_CONFIG, "proxy.config.http.redirect_host_no_port", RECD_INT, "1", RECU_DYNAMIC, RR_NULL, RECC_NULL, NULL, RECA_NULL}
   ,
   {RECT_CONFIG, "proxy.config.http.post_copy_size", RECD_INT, "2048", RECU_NULL, RR_NULL, RECC_NULL, NULL, RECA_NULL}

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f2ba1dc7/plugins/experimental/ts_lua/ts_lua_http_config.c
----------------------------------------------------------------------
diff --git a/plugins/experimental/ts_lua/ts_lua_http_config.c b/plugins/experimental/ts_lua/ts_lua_http_config.c
index ae2658b..50cf14c 100644
--- a/plugins/experimental/ts_lua/ts_lua_http_config.c
+++ b/plugins/experimental/ts_lua/ts_lua_http_config.c
@@ -112,6 +112,7 @@ typedef enum {
   TS_LUA_CONFIG_HTTP_ENABLE_REDIRECTION = TS_CONFIG_HTTP_ENABLE_REDIRECTION,
   TS_LUA_CONFIG_HTTP_NUMBER_OF_REDIRECTIONS = TS_CONFIG_HTTP_NUMBER_OF_REDIRECTIONS,
   TS_LUA_CONFIG_HTTP_CACHE_MAX_OPEN_WRITE_RETRIES = TS_CONFIG_HTTP_CACHE_MAX_OPEN_WRITE_RETRIES,
+  TS_LUA_CONFIG_HTTP_REDIRECT_USE_ORIG_CACHE_KEY = TS_CONFIG_HTTP_REDIRECT_USE_ORIG_CACHE_KEY,
   TS_LUA_CONFIG_LAST_ENTRY = TS_CONFIG_LAST_ENTRY,
 } TSLuaOverridableConfigKey;
 
@@ -194,7 +195,8 @@ ts_lua_var_item ts_lua_http_config_vars[] = {
   TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_HTTP_CACHE_GENERATION), TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_BODY_FACTORY_TEMPLATE_BASE),
   TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_HTTP_CACHE_OPEN_WRITE_FAIL_ACTION),
   TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_HTTP_ENABLE_REDIRECTION), TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_HTTP_NUMBER_OF_REDIRECTIONS),
-  TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_HTTP_CACHE_MAX_OPEN_WRITE_RETRIES), TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_LAST_ENTRY),
+  TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_HTTP_CACHE_MAX_OPEN_WRITE_RETRIES),
+  TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_HTTP_REDIRECT_USE_ORIG_CACHE_KEY), TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_LAST_ENTRY),
 };
 
 // Needed to make sure we have the latest list of overridable http config vars when compiling

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f2ba1dc7/proxy/InkAPI.cc
----------------------------------------------------------------------
diff --git a/proxy/InkAPI.cc b/proxy/InkAPI.cc
index 2c6a946..8373e16 100644
--- a/proxy/InkAPI.cc
+++ b/proxy/InkAPI.cc
@@ -7976,6 +7976,10 @@ _conf_to_memberp(TSOverridableConfigKey conf, OverridableHttpConfigParams *overr
     typ = OVERRIDABLE_TYPE_INT;
     ret = &overridableHttpConfig->number_of_redirections;
     break;
+  case TS_CONFIG_HTTP_REDIRECT_USE_ORIG_CACHE_KEY:
+    typ = OVERRIDABLE_TYPE_INT;
+    ret = &overridableHttpConfig->redirect_use_orig_cache_key;
+    break;
   // This helps avoiding compiler warnings, yet detect unhandled enum members.
   case TS_CONFIG_NULL:
   case TS_CONFIG_LAST_ENTRY:
@@ -8466,6 +8470,10 @@ TSHttpTxnConfigFind(const char *name, int length, TSOverridableConfigKey *conf,
       if (0 == strncmp(name, "proxy.config.http.auth_server_session_private", length))
         cnf = TS_CONFIG_HTTP_AUTH_SERVER_SESSION_PRIVATE;
       break;
+    case 'y':
+      if (!strncmp(name, "proxy.config.http.redirect_use_orig_cache_key", length))
+        cnf = TS_CONFIG_HTTP_REDIRECT_USE_ORIG_CACHE_KEY;
+      break;
     }
     break;
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f2ba1dc7/proxy/InkAPITest.cc
----------------------------------------------------------------------
diff --git a/proxy/InkAPITest.cc b/proxy/InkAPITest.cc
index 4be5099..f8944f8 100644
--- a/proxy/InkAPITest.cc
+++ b/proxy/InkAPITest.cc
@@ -7210,7 +7210,7 @@ const char *SDK_Overridable_Configs[TS_CONFIG_LAST_ENTRY] = {
   "proxy.config.http.auth_server_session_private", "proxy.config.http.slow.log.threshold", "proxy.config.http.cache.generation",
   "proxy.config.body_factory.template_base", "proxy.config.http.cache.open_write_fail_action",
   "proxy.config.http.redirection_enabled", "proxy.config.http.number_of_redirections",
-  "proxy.config.http.cache.max_open_write_retries"};
+  "proxy.config.http.cache.max_open_write_retries", "proxy.config.http.redirect_use_orig_cache_key"};
 
 REGRESSION_TEST(SDK_API_OVERRIDABLE_CONFIGS)(RegressionTest *test, int /* atype ATS_UNUSED */, int *pstatus)
 {

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f2ba1dc7/proxy/http/HttpConfig.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpConfig.cc b/proxy/http/HttpConfig.cc
index 6cc56c9..5a94fcb 100644
--- a/proxy/http/HttpConfig.cc
+++ b/proxy/http/HttpConfig.cc
@@ -1102,12 +1102,14 @@ HttpConfig::startup()
   //# Redirection
   //#
   //# 1. redirection_enabled: if set to 1, redirection is enabled.
-  //# 2. number_of_redirections: The maximum number of redirections YTS permits
-  //# 3. post_copy_size: The maximum POST data size YTS permits to copy
-  //# 4. redirection_host_no_port: do not include default port in host header during redirection
+  //# 2. redirect_use_orig_cache_key: if set to 1, use original request cache key.
+  //# 3. number_of_redirections: The maximum number of redirections YTS permits
+  //# 4. post_copy_size: The maximum POST data size YTS permits to copy
+  //# 5. redirection_host_no_port: do not include default port in host header during redirection
   //#
   //##############################################################################
   HttpEstablishStaticConfigByte(c.oride.redirection_enabled, "proxy.config.http.redirection_enabled");
+  HttpEstablishStaticConfigByte(c.oride.redirect_use_orig_cache_key, "proxy.config.http.redirect_use_orig_cache_key");
   HttpEstablishStaticConfigByte(c.redirection_host_no_port, "proxy.config.http.redirect_host_no_port");
   HttpEstablishStaticConfigLongLong(c.oride.number_of_redirections, "proxy.config.http.number_of_redirections");
   HttpEstablishStaticConfigLongLong(c.post_copy_size, "proxy.config.http.post_copy_size");
@@ -1360,13 +1362,15 @@ HttpConfig::reconfigure()
   //# Redirection
   //#
   //# 1. redirection_enabled: if set to 1, redirection is enabled.
-  //# 2. number_of_redirections: The maximum number of redirections YTS permits
-  //# 3. post_copy_size: The maximum POST data size YTS permits to copy
-  //# 4. redirection_host_no_port: do not include default port in host header during redirection
+  //# 2. redirect_use_orig_cache_key: if set to 1, use original request cache key.
+  //# 3. number_of_redirections: The maximum number of redirections YTS permits
+  //# 4. post_copy_size: The maximum POST data size YTS permits to copy
+  //# 5. redirection_host_no_port: do not include default port in host header during redirection
   //#
   //##############################################################################
 
   params->oride.redirection_enabled = INT_TO_BOOL(m_master.oride.redirection_enabled);
+  params->oride.redirect_use_orig_cache_key = INT_TO_BOOL(m_master.oride.redirect_use_orig_cache_key);
   params->redirection_host_no_port = INT_TO_BOOL(m_master.redirection_host_no_port);
   params->oride.number_of_redirections = m_master.oride.number_of_redirections;
   params->post_copy_size = m_master.post_copy_size;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f2ba1dc7/proxy/http/HttpConfig.h
----------------------------------------------------------------------
diff --git a/proxy/http/HttpConfig.h b/proxy/http/HttpConfig.h
index f6fdda6..5f99cbd 100644
--- a/proxy/http/HttpConfig.h
+++ b/proxy/http/HttpConfig.h
@@ -389,7 +389,7 @@ struct OverridableHttpConfigParams {
       body_factory_template_base(NULL), body_factory_template_base_len(0), proxy_response_server_string(NULL),
       proxy_response_server_string_len(0), global_user_agent_header(NULL), global_user_agent_header_size(0),
       cache_heuristic_lm_factor(0.10), freshness_fuzz_prob(0.005), background_fill_threshold(0.5), cache_open_write_fail_action(0),
-      redirection_enabled(0), number_of_redirections(1)
+      redirection_enabled(0), redirect_use_orig_cache_key(0), number_of_redirections(1)
   {
   }
 
@@ -593,6 +593,7 @@ struct OverridableHttpConfigParams {
   //##############################################################################
 
   MgmtByte redirection_enabled;
+  MgmtByte redirect_use_orig_cache_key;
   MgmtInt number_of_redirections;
 };
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f2ba1dc7/proxy/http/HttpSM.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index 02b4ff3..188aef5 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -4394,7 +4394,7 @@ HttpSM::do_cache_lookup_and_read()
   // Changed the lookup_url to c_url which enables even
   // the new redirect url to perform a CACHE_LOOKUP
   URL *c_url;
-  if (t_state.redirect_info.redirect_in_process)
+  if (t_state.redirect_info.redirect_in_process && !t_state.txn_conf->redirect_use_orig_cache_key)
     c_url = t_state.hdr_info.client_request.url_get();
   else
     c_url = t_state.cache_info.lookup_url;