[ 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)