summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2021-02-24 18:19:40 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2021-02-24 18:28:51 +0100
commit1597a5e068ab39f9ff5870d5c13da637f5fe4def (patch)
treeaacc3ad5e6262739c6513c1d1fa70ea53b75bee4 /jdisc_http_service
parent477d3145f0674f5ebe8e69d357e9a31d8c561fb0 (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')
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpServletRequestUtils.java16
-rw-r--r--jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLogTest.java8
-rw-r--r--jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpRequestFactoryTest.java5
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);