TS-2107: change proxy.config.http.transaction_active_timeout_in

split proxy.config.http.transaction_active_timeout_in to 
proxy.config.http.transaction_header_timeout_in
and proxy.config.http.transaction_request_timeout_in.


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

Branch: refs/heads/5.0.x
Commit: e5d27294be996520588825bad8c82788e15dde85
Parents: 2e8f0c3
Author: Chen Bin <kuo...@taobao.com>
Authored: Thu Aug 22 13:47:30 2013 +0800
Committer: Chen Bin <kuo...@taobao.com>
Committed: Thu Aug 22 13:49:39 2013 +0800

----------------------------------------------------------------------
 CHANGES                                |  3 +++
 mgmt/RecordsConfig.cc                  |  4 +++-
 mgmt/cli/ConfigCmd.cc                  |  9 +++++----
 mgmt/cli/ConfigCmd.h                   |  3 ++-
 mgmt/cli/ShowCmd.cc                    |  9 ++++++---
 mgmt/cli/cli_detailed_command_list.txt |  6 ++++--
 proxy/http/HttpConfig.cc               |  8 ++++++--
 proxy/http/HttpConfig.h                |  9 +++++++--
 proxy/http/HttpSM.cc                   | 27 +++++++++++++++++++++++++--
 9 files changed, 61 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5d27294/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index c2e5d1b..cadbb34 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@
 Changes with Apache Traffic Server 4.1.0
 
 
+  *) [TS-2107] split proxy.config.http.transaction_active_timeout_in to 
proxy.config.http.transaction_header_timeout_in
+     and proxy.config.http.transaction_request_timeout_in.
+
   *) [TS-2114] buffer_upload plugin defines true and false
     Author: Kit Chan <chanshu...@gmail.com>
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5d27294/mgmt/RecordsConfig.cc
----------------------------------------------------------------------
diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
index 11f60c7..8e90ac1 100644
--- a/mgmt/RecordsConfig.cc
+++ b/mgmt/RecordsConfig.cc
@@ -506,7 +506,9 @@ RecordElement RecordsConfig[] = {
   ,
   {RECT_CONFIG, "proxy.config.http.transaction_no_activity_timeout_out", 
RECD_INT, "30", RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}
   ,
-  {RECT_CONFIG, "proxy.config.http.transaction_active_timeout_in", RECD_INT, 
"900", RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}
+  {RECT_CONFIG, "proxy.config.http.transaction_header_active_timeout_in", 
RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.http.transaction_request_active_timeout_in", 
RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}
   ,
   {RECT_CONFIG, "proxy.config.http.transaction_active_timeout_out", RECD_INT, 
"0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}
   ,

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5d27294/mgmt/cli/ConfigCmd.cc
----------------------------------------------------------------------
diff --git a/mgmt/cli/ConfigCmd.cc b/mgmt/cli/ConfigCmd.cc
index a40da20..ae7a5c5 100644
--- a/mgmt/cli/ConfigCmd.cc
+++ b/mgmt/cli/ConfigCmd.cc
@@ -978,8 +978,11 @@ Cmd_ConfigHttp(ClientData clientData, Tcl_Interp * interp, 
int argc, const char
     case CMD_CONFIG_HTTP_INACTIVE_TIMEOUT_OUT:
       return (Cli_RecordInt_Action(action, 
"proxy.config.http.transaction_no_activity_timeout_out", argtable->arg_int));
 
-    case CMD_CONFIG_HTTP_ACTIVE_TIMEOUT_IN:
-      return (Cli_RecordInt_Action(action, 
"proxy.config.http.transaction_active_timeout_in", argtable->arg_int));
+    case CMD_CONFIG_HTTP_HEADER_ACTIVE_TIMEOUT_IN:
+      return (Cli_RecordInt_Action(action, 
"proxy.config.http.transaction_header_active_timeout_in", argtable->arg_int));
+
+    case CMD_CONFIG_HTTP_REQUEST_ACTIVE_TIMEOUT_IN:
+      return (Cli_RecordInt_Action(action, 
"proxy.config.http.transaction_request_active_timeout_in", argtable->arg_int));
 
     case CMD_CONFIG_HTTP_ACTIVE_TIMEOUT_OUT:
       return (Cli_RecordInt_Action(action, 
"proxy.config.http.transaction_active_timeout_out", argtable->arg_int));
@@ -1039,8 +1042,6 @@ CmdArgs_ConfigHttp()
   createArgument("inactive-timeout-out", 1, CLI_ARGV_OPTION_INT_VALUE,
                  (char *) NULL, CMD_CONFIG_HTTP_INACTIVE_TIMEOUT_OUT, 
"Inactive timeout outbound <seconds>",
                  (char *) NULL);
-  createArgument("active-timeout-in", 1, CLI_ARGV_OPTION_INT_VALUE,
-                 (char *) NULL, CMD_CONFIG_HTTP_ACTIVE_TIMEOUT_IN, "Active 
timeout inbound <seconds>", (char *) NULL);
   createArgument("active-timeout-out", 1, CLI_ARGV_OPTION_INT_VALUE,
                  (char *) NULL, CMD_CONFIG_HTTP_ACTIVE_TIMEOUT_OUT, "Active 
timeout outbound <seconds>", (char *) NULL);
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5d27294/mgmt/cli/ConfigCmd.h
----------------------------------------------------------------------
diff --git a/mgmt/cli/ConfigCmd.h b/mgmt/cli/ConfigCmd.h
index 42ed681..05473c4 100644
--- a/mgmt/cli/ConfigCmd.h
+++ b/mgmt/cli/ConfigCmd.h
@@ -113,7 +113,8 @@ typedef enum
   CMD_CONFIG_HTTP_KEEP_ALIVE_TIMEOUT_OUT,
   CMD_CONFIG_HTTP_INACTIVE_TIMEOUT_IN,
   CMD_CONFIG_HTTP_INACTIVE_TIMEOUT_OUT,
-  CMD_CONFIG_HTTP_ACTIVE_TIMEOUT_IN,
+  CMD_CONFIG_HTTP_HEADER_ACTIVE_TIMEOUT_IN,
+  CMD_CONFIG_HTTP_REQUEST_ACTIVE_TIMEOUT_IN,
   CMD_CONFIG_HTTP_ACTIVE_TIMEOUT_OUT,
   CMD_CONFIG_HTTP_REMOVE_FROM,
   CMD_CONFIG_HTTP_REMOVE_REFERER,

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5d27294/mgmt/cli/ShowCmd.cc
----------------------------------------------------------------------
diff --git a/mgmt/cli/ShowCmd.cc b/mgmt/cli/ShowCmd.cc
index ed71560..138e8cb 100644
--- a/mgmt/cli/ShowCmd.cc
+++ b/mgmt/cli/ShowCmd.cc
@@ -1155,7 +1155,8 @@ ShowHttp()
   TSInt keepalive_timeout_out = -1;
   TSInt inactivity_timeout_in = -1;
   TSInt inactivity_timeout_out = -1;
-  TSInt activity_timeout_in = -1;
+  TSInt header_activity_timeout_in = -1;
+  TSInt request_activity_timeout_in = -1;
   TSInt activity_timeout_out = -1;
   TSInt max_alts = -1;
   TSInt remove_from = -1;
@@ -1176,7 +1177,8 @@ ShowHttp()
   Cli_RecordGetInt("proxy.config.http.keep_alive_no_activity_timeout_out", 
&keepalive_timeout_out);
   Cli_RecordGetInt("proxy.config.http.transaction_no_activity_timeout_in", 
&inactivity_timeout_in);
   Cli_RecordGetInt("proxy.config.http.transaction_no_activity_timeout_out", 
&inactivity_timeout_out);
-  Cli_RecordGetInt("proxy.config.http.transaction_active_timeout_in", 
&activity_timeout_in);
+  Cli_RecordGetInt("proxy.config.http.transaction_header_active_timeout_in", 
&header_activity_timeout_in);
+  Cli_RecordGetInt("proxy.config.http.transaction_request_active_timeout_in", 
&request_activity_timeout_in);
   Cli_RecordGetInt("proxy.config.http.transaction_active_timeout_out", 
&activity_timeout_out);
   Cli_RecordGetInt("proxy.config.cache.limits.http.max_alts", &max_alts);
   Cli_RecordGetInt("proxy.config.http.anonymize_remove_from", &remove_from);
@@ -1199,7 +1201,8 @@ ShowHttp()
   Cli_Printf("Keep-Alive Timeout Outbound --- %d s\n", keepalive_timeout_out);
   Cli_Printf("Inactivity Timeout Inbound ---- %d s\n", inactivity_timeout_in);
   Cli_Printf("Inactivity Timeout Outbound --- %d s\n", inactivity_timeout_out);
-  Cli_Printf("Activity Timeout Inbound ------ %d s\n", activity_timeout_in);
+  Cli_Printf("Header Activity Timeout Inbound ------ %d s\n", 
header_activity_timeout_in);
+  Cli_Printf("Request Activity Timeout Inbound ------ %d s\n", 
request_activity_timeout_in);
   Cli_Printf("Activity Timeout Outbound ----- %d s\n", activity_timeout_out);
   Cli_Printf("Maximum Number of Alternates -- %d\n", max_alts);
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5d27294/mgmt/cli/cli_detailed_command_list.txt
----------------------------------------------------------------------
diff --git a/mgmt/cli/cli_detailed_command_list.txt 
b/mgmt/cli/cli_detailed_command_list.txt
index 54b2776..670be8c 100644
--- a/mgmt/cli/cli_detailed_command_list.txt
+++ b/mgmt/cli/cli_detailed_command_list.txt
@@ -362,7 +362,8 @@ http                        HTTP Configuration
     Keep-Alive Timeout Outbound --- 10 s    
(proxy.config.http.keep_alive_no_activity_timeout_out)
     Inactivity Timeout Inbound ---- 120 s   
(proxy.config.http.transaction_no_activity_timeout_in)
     Inactivity Timeout Outbound --- 120 s   
(proxy.config.http.transaction_no_activity_timeout_out)
-    Activity Timeout Inbound ------ 7200 s  
(proxy.config.http.transaction_active_timeout_in)
+    Header Activity Timeout Inbound ------ 7200 s  
(proxy.config.http.transaction_header_active_timeout_in)
+    Request Activity Timeout Inbound ------ 7200 s  
(proxy.config.http.transaction_request_active_timeout_in)
     Activity Timeout Outbound ----- 7200 s  
(proxy.config.http.transaction_active_timeout_out)
     Maximum Number of Alternates -- 3       
(proxy.config.cache.limits.http.max_alts)
     Remove the following common headers
@@ -965,7 +966,8 @@ http                        HTTP Configuration
           keep-alive-timeout-out   
(proxy.config.http.keep_alive_no_activity_timeout_out)
           inactive-timeout-in      
(proxy.config.http.transaction_no_activity_timeout_in)
           inactive-timeout-out     
(proxy.config.http.transaction_no_activity_timeout_out)
-          active-timeout-in        
(proxy.config.http.transaction_active_timeout_in)
+          header-active-timeout-in        
(proxy.config.http.transaction_header_active_timeout_in)
+          request-active-timeout-in        
(proxy.config.http.transaction_request_active_timeout_in)
           active-timeout-out       
(proxy.config.http.transaction_active_timeout_out)
 
     ts# config:http keep-alive-timeout-in 10

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5d27294/proxy/http/HttpConfig.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpConfig.cc b/proxy/http/HttpConfig.cc
index 461a9b7..14cbf1e 100644
--- a/proxy/http/HttpConfig.cc
+++ b/proxy/http/HttpConfig.cc
@@ -1190,7 +1190,10 @@ HttpConfig::startup()
                                     
"proxy.config.http.transaction_no_activity_timeout_in");
   
HttpEstablishStaticConfigLongLong(c.oride.transaction_no_activity_timeout_out,
                                     
"proxy.config.http.transaction_no_activity_timeout_out");
-  HttpEstablishStaticConfigLongLong(c.transaction_active_timeout_in, 
"proxy.config.http.transaction_active_timeout_in");
+  HttpEstablishStaticConfigLongLong(c.transaction_header_active_timeout_in, 
"proxy.config.http.transaction_header_active_timeout_in");
+  HttpEstablishStaticConfigLongLong(c.transaction_request_active_timeout_in, 
"proxy.config.http.transaction_request_active_timeout_in");
+  if (c.transaction_header_active_timeout_in >= 
c.transaction_request_active_timeout_in)
+    c.transaction_request_active_timeout_in = 0;
   HttpEstablishStaticConfigLongLong(c.oride.transaction_active_timeout_out, 
"proxy.config.http.transaction_active_timeout_out");
   HttpEstablishStaticConfigLongLong(c.accept_no_activity_timeout, 
"proxy.config.http.accept_no_activity_timeout");
 
@@ -1461,7 +1464,8 @@ HttpConfig::reconfigure()
   params->oride.keep_alive_no_activity_timeout_out = 
m_master.oride.keep_alive_no_activity_timeout_out;
   params->oride.transaction_no_activity_timeout_in = 
m_master.oride.transaction_no_activity_timeout_in;
   params->oride.transaction_no_activity_timeout_out = 
m_master.oride.transaction_no_activity_timeout_out;
-  params->transaction_active_timeout_in = 
m_master.transaction_active_timeout_in;
+  params->oride.transaction_header_active_timeout_in = 
m_master.oride.transaction_header_active_timeout_in;
+  params->oride.transaction_request_active_timeout_in = 
m_master.oride.transaction_request_active_timeout_in;
   params->oride.transaction_active_timeout_out = 
m_master.oride.transaction_active_timeout_out;
   params->accept_no_activity_timeout = m_master.accept_no_activity_timeout;
   params->oride.background_fill_active_timeout = 
m_master.oride.background_fill_active_timeout;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5d27294/proxy/http/HttpConfig.h
----------------------------------------------------------------------
diff --git a/proxy/http/HttpConfig.h b/proxy/http/HttpConfig.h
index c220463..04e14cb 100644
--- a/proxy/http/HttpConfig.h
+++ b/proxy/http/HttpConfig.h
@@ -420,6 +420,7 @@ struct OverridableHttpConfigParams {
       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_header_active_timeout_in(0), 
transaction_request_active_timeout_in(0),
       transaction_active_timeout_out(0), origin_max_connections(0),
       connect_attempts_max_retries(0), 
connect_attempts_max_retries_dead_server(3),
       connect_attempts_rr_retries(3), connect_attempts_timeout(30),
@@ -558,6 +559,8 @@ struct OverridableHttpConfigParams {
   MgmtInt keep_alive_no_activity_timeout_out;
   MgmtInt transaction_no_activity_timeout_in;
   MgmtInt transaction_no_activity_timeout_out;
+  MgmtInt transaction_header_active_timeout_in;
+  MgmtInt transaction_request_active_timeout_in;
   MgmtInt transaction_active_timeout_out;
   MgmtInt origin_max_connections;
 
@@ -669,7 +672,8 @@ public:
   MgmtByte session_auth_cache_keep_alive_enabled;
   MgmtInt origin_server_pipeline;
   MgmtInt user_agent_pipeline;
-  MgmtInt transaction_active_timeout_in;
+  MgmtInt transaction_header_active_timeout_in;
+  MgmtInt transaction_request_active_timeout_in;
   MgmtInt accept_no_activity_timeout;
 
   ////////////////////////////////////
@@ -902,7 +906,8 @@ HttpConfigParams::HttpConfigParams()
     session_auth_cache_keep_alive_enabled(1),
     origin_server_pipeline(1),
     user_agent_pipeline(8),
-    transaction_active_timeout_in(900),
+    transaction_header_active_timeout_in(0),
+    transaction_request_active_timeout_in(0),
     accept_no_activity_timeout(120),
     parent_connect_attempts(4),
     per_parent_connect_attempts(2),

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5d27294/proxy/http/HttpSM.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index ba460da..ad9cd4c 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -636,8 +636,11 @@ HttpSM::attach_client_session(HttpClientSession * 
client_vc, IOBufferReader * bu
   // set up timeouts     //
   /////////////////////////
   
client_vc->get_netvc()->set_inactivity_timeout(HRTIME_SECONDS(HttpConfig::m_master.accept_no_activity_timeout));
-  
client_vc->get_netvc()->set_active_timeout(HRTIME_SECONDS(HttpConfig::m_master.transaction_active_timeout_in));
-
+  if (HttpConfig::m_master.transaction_header_active_timeout_in)
+    
client_vc->get_netvc()->set_active_timeout(HRTIME_SECONDS(HttpConfig::m_master.transaction_header_active_timeout_in));
+  else if (HttpConfig::m_master.transaction_request_active_timeout_in)
+    
client_vc->get_netvc()->set_active_timeout(HRTIME_SECONDS(HttpConfig::m_master.transaction_request_active_timeout_in));
+    
   // Add our state sm to the sm list
   state_add_to_list(EVENT_NONE, NULL);
 }
@@ -758,6 +761,7 @@ HttpSM::state_read_client_request_header(int event, void 
*data)
     milestones.ua_read_header_done = ink_get_hrtime();
   }
 
+  int method;
   switch (state) {
   case PARSE_ERROR:
     DebugSM("http", "[%" PRId64 "] error parsing client request header", 
sm_id);
@@ -765,6 +769,7 @@ HttpSM::state_read_client_request_header(int event, void 
*data)
     // Disable further I/O on the client
     ua_entry->read_vio->nbytes = ua_entry->read_vio->ndone;
 
+    ua_session->get_netvc()->cancel_active_timeout();
     call_transact_and_set_next_state(HttpTransact::BadRequest);
     break;
 
@@ -776,6 +781,7 @@ HttpSM::state_read_client_request_header(int event, void 
*data)
       // Disable further I/O on the client
       ua_entry->read_vio->nbytes = ua_entry->read_vio->ndone;
 
+      ua_session->get_netvc()->cancel_active_timeout();
       call_transact_and_set_next_state(HttpTransact::BadRequest);
       break;
     } else if (event == VC_EVENT_READ_COMPLETE) {
@@ -819,6 +825,21 @@ HttpSM::state_read_client_request_header(int event, void 
*data)
         (t_state.method == HTTP_WKSIDX_POST && 
HttpConfig::m_master.post_copy_size))
       enable_redirection = HttpConfig::m_master.redirection_enabled;
 
+    method = t_state.hdr_info.client_request.method_get_wksidx();
+    if ((method == HTTP_WKSIDX_POST || method == HTTP_WKSIDX_PUT || 
(t_state.hdr_info.extension_method && t_state.hdr_info.request_content_length > 
0))) {
+      // is setted HttpConfig::m_master.transaction_header_active_timeout_in, 
so should reset active_timeout_in
+      if (ua_session->get_netvc()->get_active_timeout() == 
HRTIME_SECONDS(HttpConfig::m_master.transaction_header_active_timeout_in)) {
+        if (HttpConfig::m_master.transaction_request_active_timeout_in) {
+          if 
(HRTIME_SECONDS(HttpConfig::m_master.transaction_request_active_timeout_in) > 
(milestones.ua_read_header_done - milestones.sm_start)) {
+            
ua_session->get_netvc()->set_active_timeout(HRTIME_SECONDS(HttpConfig::m_master.transaction_request_active_timeout_in)
 - (milestones.ua_read_header_done - milestones.sm_start));
+          }
+        } else {
+          ua_session->get_netvc()->cancel_active_timeout();
+        }
+      }
+    } else {
+      ua_session->get_netvc()->cancel_active_timeout();
+    }
     call_transact_and_set_next_state(HttpTransact::ModifyRequest);
 
     break;
@@ -3268,6 +3289,7 @@ HttpSM::tunnel_handler_post_ua(int event, 
HttpTunnelProducer * p)
   case VC_EVENT_ACTIVE_TIMEOUT:
     //  Did not complete post tunnling.  Abort the
     //   server and close the ua
+    ua_session->get_netvc()->cancel_active_timeout();
     p->handler_state = HTTP_SM_POST_UA_FAIL;
     tunnel.chain_abort_all(p);
     p->read_vio = NULL;
@@ -3297,6 +3319,7 @@ HttpSM::tunnel_handler_post_ua(int event, 
HttpTunnelProducer * p)
     p->handler_state = HTTP_SM_POST_SUCCESS;
     p->read_success = true;
     ua_entry->in_tunnel = false;
+    ua_session->get_netvc()->cancel_active_timeout();
 
     if (p->do_dechunking || p->do_chunked_passthru) {
       if (p->chunked_handler.truncation) {

Reply via email to