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