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 | |
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')
3 files changed, 21 insertions, 8 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; } } diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLogTest.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLogTest.java index c9b466517b3..6370912af48 100644 --- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLogTest.java +++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLogTest.java @@ -4,13 +4,13 @@ package com.yahoo.jdisc.http.server.jetty; import com.yahoo.container.logging.AccessLogEntry; import com.yahoo.container.logging.RequestLog; import com.yahoo.container.logging.RequestLogEntry; +import com.yahoo.jdisc.http.ConnectorConfig; import com.yahoo.jdisc.http.ServerConfig; import org.eclipse.jetty.http.MetaData; import org.eclipse.jetty.server.HttpChannel; import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Response; -import org.eclipse.jetty.server.ServerConnector; import org.junit.Test; import java.util.List; @@ -129,8 +129,10 @@ public class AccessLogRequestLogTest { } private static Request createRequestMock() { - ServerConnector serverConnector = mock(ServerConnector.class); - when(serverConnector.getLocalPort()).thenReturn(1234); + JDiscServerConnector serverConnector = mock(JDiscServerConnector.class); + int localPort = 1234; + when(serverConnector.connectorConfig()).thenReturn(new ConnectorConfig(new ConnectorConfig.Builder().listenPort(localPort))); + when(serverConnector.getLocalPort()).thenReturn(localPort); HttpConnection httpConnection = mock(HttpConnection.class); when(httpConnection.getConnector()).thenReturn(serverConnector); Request request = mock(Request.class); diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java index 984d93042ab..9c1348004ee 100644 --- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java +++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java @@ -7,10 +7,10 @@ import com.yahoo.jdisc.References; import com.yahoo.jdisc.ResourceReference; import com.yahoo.jdisc.Response; import com.yahoo.jdisc.handler.RequestHandler; +import com.yahoo.jdisc.http.ConnectorConfig; import com.yahoo.jdisc.http.HttpRequest; import com.yahoo.jdisc.service.CurrentContainer; import org.eclipse.jetty.server.HttpConnection; -import org.eclipse.jetty.server.ServerConnector; import org.junit.Test; import javax.servlet.http.HttpServletRequest; @@ -144,7 +144,8 @@ public class HttpRequestFactoryTest { private static HttpServletRequest createMockRequest(String scheme, String serverName, String path, String queryString) { HttpServletRequest request = mock(HttpServletRequest.class); HttpConnection connection = mock(HttpConnection.class); - ServerConnector connector = mock(ServerConnector.class); + JDiscServerConnector connector = mock(JDiscServerConnector.class); + when(connector.connectorConfig()).thenReturn(new ConnectorConfig(new ConnectorConfig.Builder().listenPort(LOCAL_PORT))); when(connector.getLocalPort()).thenReturn(LOCAL_PORT); when(connection.getCreatedTimeStamp()).thenReturn(System.currentTimeMillis()); when(connection.getConnector()).thenReturn(connector); |