You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by so...@apache.org on 2016/05/20 23:11:06 UTC
[trafficserver] 10/28: TS-3922: Add independent websocket timeouts.
This closes #590
This is an automated email from the ASF dual-hosted git repository.
sorber pushed a commit to branch 6.2.x
in repository https://git-dual.apache.org/repos/asf/trafficserver.git
commit d03f92f8b86580aa2069272187ea6d9f613d6bf4
Author: Brian Geffon <br...@apache.org>
AuthorDate: Wed Apr 20 21:32:03 2016 -0700
TS-3922: Add independent websocket timeouts. This closes #590
(cherry picked from commit 1466ccadd2c3cee31de9835249bf24f29a1d9ea1)
Conflicts:
proxy/http/HttpConfig.h
---
doc/admin-guide/files/records.config.en.rst | 12 ++++++++++++
iocore/net/UnixNet.cc | 9 +++++----
mgmt/RecordsConfig.cc | 4 ++++
proxy/http/HttpConfig.cc | 5 +++++
proxy/http/HttpConfig.h | 4 ++++
proxy/http/HttpSM.cc | 14 ++++++++++++++
6 files changed, 44 insertions(+), 4 deletions(-)
diff --git a/doc/admin-guide/files/records.config.en.rst b/doc/admin-guide/files/records.config.en.rst
index bdedc3d..1fa0d3e 100644
--- a/doc/admin-guide/files/records.config.en.rst
+++ b/doc/admin-guide/files/records.config.en.rst
@@ -1116,6 +1116,18 @@ HTTP Connection Timeouts
Specifies how long Traffic Server keeps connections to origin servers open if the transaction stalls.
+.. ts:cv:: CONFIG proxy.config.websocket.no_activity_timeout INT 600
+ :reloadable:
+ :overridable:
+
+ Specifies how long Traffic Server keeps connections open if a websocket stalls.
+
+.. ts:cv:: CONFIG proxy.config.websocket.active_timeout INT 3600
+ :reloadable:
+ :overridable:
+
+ The maximum amount of time Traffic Server keeps websocket connections open.
+
.. ts:cv:: CONFIG proxy.config.http.transaction_active_timeout_in INT 900
:reloadable:
diff --git a/iocore/net/UnixNet.cc b/iocore/net/UnixNet.cc
index d749844..5066b47 100644
--- a/iocore/net/UnixNet.cc
+++ b/iocore/net/UnixNet.cc
@@ -85,8 +85,9 @@ 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,
- ink_hrtime_to_sec(vc->next_inactivity_timeout_at), ink_hrtime_to_sec(vc->inactivity_timeout_in));
+ 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));
}
if (vc->next_inactivity_timeout_at && vc->next_inactivity_timeout_at < now) {
@@ -96,8 +97,8 @@ 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,
- vc->next_inactivity_timeout_at, vc->inactivity_timeout_in);
+ Debug("inactivity_cop_verbose", "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 6361971..221d0ca 100644
--- a/mgmt/RecordsConfig.cc
+++ b/mgmt/RecordsConfig.cc
@@ -537,6 +537,10 @@ static const RecordElement RecordsConfig[] =
,
{RECT_CONFIG, "proxy.config.http.keep_alive_no_activity_timeout_out", RECD_INT, "120", 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_no_activity_timeout_in", RECD_INT, "30", RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}
,
{RECT_CONFIG, "proxy.config.http.transaction_no_activity_timeout_out", RECD_INT, "30", RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}
diff --git a/proxy/http/HttpConfig.cc b/proxy/http/HttpConfig.cc
index 3cf91ee..0891c95 100644
--- a/proxy/http/HttpConfig.cc
+++ b/proxy/http/HttpConfig.cc
@@ -939,6 +939,9 @@ 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 +1218,8 @@ HttpConfig::reconfigure()
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_active_timeout_out = m_master.oride.transaction_active_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->accept_no_activity_timeout = m_master.accept_no_activity_timeout;
params->oride.background_fill_active_timeout = m_master.oride.background_fill_active_timeout;
params->oride.background_fill_threshold = m_master.oride.background_fill_threshold;
diff --git a/proxy/http/HttpConfig.h b/proxy/http/HttpConfig.h
index 8e2b66f..58de48f 100644
--- a/proxy/http/HttpConfig.h
+++ b/proxy/http/HttpConfig.h
@@ -422,6 +422,8 @@ struct OverridableHttpConfigParams {
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),
@@ -597,6 +599,8 @@ struct OverridableHttpConfigParams {
MgmtInt transaction_no_activity_timeout_in;
MgmtInt transaction_no_activity_timeout_out;
MgmtInt transaction_active_timeout_out;
+ MgmtInt websocket_active_timeout;
+ MgmtInt websocket_inactive_timeout;
MgmtInt origin_max_connections;
MgmtInt origin_max_connections_queue;
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index 97c4568..094aafa 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -1630,6 +1630,20 @@ 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);
--
To stop receiving notification emails like this one, please contact
"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>.