diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-02-24 18:19:40 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-02-24 18:28:51 +0100 |
commit | 1597a5e068ab39f9ff5870d5c13da637f5fe4def (patch) | |
tree | aacc3ad5e6262739c6513c1d1fa70ea53b75bee4 /jdisc_http_service/src/main/java/com/yahoo/jdisc | |
parent | 477d3145f0674f5ebe8e69d357e9a31d8c561fb0 (diff) |
Determine local port for requests processed after connector is closed
Fallback to configured listen port for requests that are unable to
complete before connector shutdown is initiated.
Diffstat (limited to 'jdisc_http_service/src/main/java/com/yahoo/jdisc')
-rw-r--r-- | jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpServletRequestUtils.java | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpServletRequestUtils.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpServletRequestUtils.java index c0903529455..e7b9f459d2e 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpServletRequestUtils.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpServletRequestUtils.java @@ -2,7 +2,6 @@ package com.yahoo.jdisc.http.server.jetty; import org.eclipse.jetty.server.HttpConnection; -import org.eclipse.jetty.server.ServerConnector; import javax.servlet.http.HttpServletRequest; @@ -21,8 +20,19 @@ public class HttpServletRequestUtils { * @return the actual local port of the underlying Jetty connector */ public static int getConnectorLocalPort(HttpServletRequest request) { - ServerConnector jettyConnector = (ServerConnector) getConnection(request).getConnector(); - return jettyConnector.getLocalPort(); + JDiscServerConnector connector = (JDiscServerConnector) getConnection(request).getConnector(); + int actualLocalPort = connector.getLocalPort(); + int localPortIfConnectorUnopened = -1; + int localPortIfConnectorClosed = -2; + if (actualLocalPort == localPortIfConnectorUnopened || actualLocalPort == localPortIfConnectorClosed) { + int configuredLocalPort = connector.listenPort(); + int localPortEphemeralPort = 0; + if (configuredLocalPort == localPortEphemeralPort) { + throw new IllegalStateException("Unable to determine connector's listen port"); + } + return configuredLocalPort; + } + return actualLocalPort; } } |