[ 
https://issues.apache.org/jira/browse/TS-3922?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15249214#comment-15249214
 ] 

Brian Geffon commented on TS-3922:
----------------------------------

The following patch was based off an old version of master:

{code}
diff --git a/iocore/net/UnixNet.cc b/iocore/net/UnixNet.cc
index 131a12f..64c3dcb 100644
--- a/iocore/net/UnixNet.cc
+++ b/iocore/net/UnixNet.cc
@@ -86,7 +86,7 @@ public:
         vc->set_inactivity_timeout(HRTIME_SECONDS(default_inactivity_timeout));
         NET_INCREMENT_DYN_STAT(default_inactivity_timeout_stat);
       } else {
-        Debug("inactivity_cop_verbose", "vc: %p now: %" PRId64 " timeout at: 
%" PRId64 " timeout in: %" PRId64, vc, now,
+        Debug("inactivity_cop_verbose", "vc: %p now: %" PRId64 " timeout at: 
%" PRId64 " timeout in: %" PRId64, vc, ink_hrtime_to_sec(now),
               ink_hrtime_to_sec(vc->next_inactivity_timeout_at), 
ink_hrtime_to_sec(vc->inactivity_timeout_in));
       }

@@ -97,7 +97,7 @@ public:
           NET_SUM_DYN_STAT(keep_alive_queue_timeout_total_stat, diff);
           NET_INCREMENT_DYN_STAT(keep_alive_queue_timeout_count_stat);
         }
-        Debug("inactivity_cop_verbose", "vc: %p now: %" PRId64 " timeout at: 
%" PRId64 " timeout in: %" PRId64, vc, now,
+        Debug("inactivity_cop_verbose_2", "vc: %p now: %" PRId64 " timeout at: 
%" PRId64 " timeout in: %" PRId64, vc, ink_hrtime_to_sec(now),
               vc->next_inactivity_timeout_at, vc->inactivity_timeout_in);
         vc->handleEvent(EVENT_IMMEDIATE, e);
       }
diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
index 66c5ee6..b46ee7a 100644
--- a/mgmt/RecordsConfig.cc
+++ b/mgmt/RecordsConfig.cc
@@ -525,6 +525,10 @@ static const 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.websocket.no_activity_timeout", RECD_INT, "600", 
RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}
+  ,
+  {RECT_CONFIG, "proxy.config.websocket.active_timeout", RECD_INT, "3600", 
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_active_timeout_out", RECD_INT, 
"0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}
diff --git a/proxy/http/HttpConfig.cc b/proxy/http/HttpConfig.cc
index 96fe448..0100cdb 100644
--- a/proxy/http/HttpConfig.cc
+++ b/proxy/http/HttpConfig.cc
@@ -947,6 +947,11 @@ 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.oride.websocket_active_timeout,
+                                      "proxy.config.websocket.active_timeout");
+  HttpEstablishStaticConfigLongLong(c.oride.websocket_inactive_timeout,
+                                      
"proxy.config.websocket.no_activity_timeout");
+
   HttpEstablishStaticConfigLongLong(c.transaction_active_timeout_in, 
"proxy.config.http.transaction_active_timeout_in");
   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");
@@ -1215,6 +1220,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->oride.websocket_active_timeout = 
m_master.oride.websocket_active_timeout;
+  params->oride.websocket_inactive_timeout = 
m_master.oride.websocket_inactive_timeout;
   params->transaction_active_timeout_in = 
m_master.transaction_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;
diff --git a/proxy/http/HttpConfig.h b/proxy/http/HttpConfig.h
index 62cc4a4..0ebc808 100644
--- a/proxy/http/HttpConfig.h
+++ b/proxy/http/HttpConfig.h
@@ -378,6 +378,7 @@ struct OverridableHttpConfigParams {
       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),
+      websocket_active_timeout(3600), websocket_inactive_timeout(600),
       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),
       post_connect_attempts_timeout(1800), down_server_timeout(300), 
client_abort_threshold(10), freshness_fuzz_time(240),
@@ -526,6 +527,8 @@ struct OverridableHttpConfigParams {
   MgmtInt keep_alive_no_activity_timeout_out;
   MgmtInt transaction_no_activity_timeout_in;
   MgmtInt transaction_no_activity_timeout_out;
+  MgmtInt websocket_active_timeout;
+  MgmtInt websocket_inactive_timeout;
   MgmtInt transaction_active_timeout_out;
   MgmtInt origin_max_connections;

diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index 08dfb13..222d2ca 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -1557,6 +1557,19 @@ HttpSM::handle_api_return()
       // a blind tunnel.
       if (t_state.is_websocket) {
         
HTTP_INCREMENT_DYN_STAT(http_websocket_current_active_client_connections_stat);
+
+        if (ua_session) {
+          DebugSM("http_websocket", "(client session) Setting websocket active 
timeout=%ld s and inactive timeout=%ld s", 
t_state.txn_conf->websocket_active_timeout, 
t_state.txn_conf->websocket_inactive_timeout);
+          
ua_session->get_netvc()->set_active_timeout(HRTIME_SECONDS(t_state.txn_conf->websocket_active_timeout));
+          
ua_session->get_netvc()->set_inactivity_timeout(HRTIME_SECONDS(t_state.txn_conf->websocket_inactive_timeout));
+        }
+
+        if (server_session) {
+          DebugSM("http_websocket", "(server session) Setting websocket active 
timeout=%ld s and inactive timeout=%ld s", 
t_state.txn_conf->websocket_active_timeout, 
t_state.txn_conf->websocket_inactive_timeout);
+          
server_session->get_netvc()->set_active_timeout(HRTIME_SECONDS(t_state.txn_conf->websocket_active_timeout));
+          
server_session->get_netvc()->set_inactivity_timeout(HRTIME_SECONDS(t_state.txn_conf->websocket_inactive_timeout));
+        }
+
       }

       setup_blind_tunnel(true);
{code}

> Add independent WebSocket timeouts
> ----------------------------------
>
>                 Key: TS-3922
>                 URL: https://issues.apache.org/jira/browse/TS-3922
>             Project: Traffic Server
>          Issue Type: Improvement
>          Components: Core
>            Reporter: Brian Geffon
>            Assignee: Brian Geffon
>             Fix For: 7.0.0
>
>
> Right now WebSockets fall under the active/inactive transaction timeouts. 
> Obviously the inactivate timeout isn't a problem but the active timeout is. 
> We need at minimum a new timeout for active WS connections, I'll likely add a 
> new timeout for inactive state too.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to