Skip to content

Commit db2bb9e

Browse files
committed
[grid] Using session request timeout in the RouterServer
When a new session request comes, the Router forwards it to the SessionQueue, and the new session request will stay in the queue up to 300 seconds (default). However, the read timeout in the http client is 180 seconds (default), so the request will timeout in the Router first. Which is why we need to use the configured new session request timeout. Fixes SeleniumHQ/docker-selenium#1377
1 parent 4259e96 commit db2bb9e

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

java/src/org/openqa/selenium/grid/router/httpd/RouterServer.java

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@
1717

1818
package org.openqa.selenium.grid.router.httpd;
1919

20+
import static java.net.HttpURLConnection.HTTP_NO_CONTENT;
21+
import static org.openqa.selenium.grid.config.StandardGridRoles.DISTRIBUTOR_ROLE;
22+
import static org.openqa.selenium.grid.config.StandardGridRoles.HTTPD_ROLE;
23+
import static org.openqa.selenium.grid.config.StandardGridRoles.ROUTER_ROLE;
24+
import static org.openqa.selenium.grid.config.StandardGridRoles.SESSION_MAP_ROLE;
25+
import static org.openqa.selenium.grid.config.StandardGridRoles.SESSION_QUEUE_ROLE;
26+
import static org.openqa.selenium.net.Urls.fromUri;
27+
import static org.openqa.selenium.remote.http.Route.combine;
28+
import static org.openqa.selenium.remote.http.Route.get;
29+
2030
import com.google.auto.service.AutoService;
2131
import com.google.common.collect.ImmutableMap;
2232
import com.google.common.collect.ImmutableSet;
@@ -48,27 +58,19 @@
4858
import org.openqa.selenium.grid.sessionqueue.remote.RemoteNewSessionQueue;
4959
import org.openqa.selenium.grid.web.GridUiRoute;
5060
import org.openqa.selenium.internal.Require;
61+
import org.openqa.selenium.remote.http.ClientConfig;
5162
import org.openqa.selenium.remote.http.HttpClient;
5263
import org.openqa.selenium.remote.http.HttpResponse;
5364
import org.openqa.selenium.remote.http.Routable;
5465
import org.openqa.selenium.remote.http.Route;
5566
import org.openqa.selenium.remote.tracing.Tracer;
5667

5768
import java.net.URL;
69+
import java.time.Duration;
5870
import java.util.Collections;
5971
import java.util.Set;
6072
import java.util.logging.Logger;
6173

62-
import static java.net.HttpURLConnection.HTTP_NO_CONTENT;
63-
import static org.openqa.selenium.grid.config.StandardGridRoles.DISTRIBUTOR_ROLE;
64-
import static org.openqa.selenium.grid.config.StandardGridRoles.HTTPD_ROLE;
65-
import static org.openqa.selenium.grid.config.StandardGridRoles.ROUTER_ROLE;
66-
import static org.openqa.selenium.grid.config.StandardGridRoles.SESSION_MAP_ROLE;
67-
import static org.openqa.selenium.grid.config.StandardGridRoles.SESSION_QUEUE_ROLE;
68-
import static org.openqa.selenium.net.Urls.fromUri;
69-
import static org.openqa.selenium.remote.http.Route.combine;
70-
import static org.openqa.selenium.remote.http.Route.get;
71-
7274
@AutoService(CliCommand.class)
7375
public class RouterServer extends TemplateGridServerCommand {
7476

@@ -124,11 +126,16 @@ protected Handlers createHandlers(Config config) {
124126
SessionMapOptions sessionsOptions = new SessionMapOptions(config);
125127
SessionMap sessions = sessionsOptions.getSessionMap();
126128

127-
NewSessionQueueOptions sessionQueueOptions = new NewSessionQueueOptions(config);
128-
URL sessionQueueUrl = fromUri(sessionQueueOptions.getSessionQueueUri());
129+
NewSessionQueueOptions newSessionQueueOptions = new NewSessionQueueOptions(config);
130+
URL sessionQueueUrl = fromUri(newSessionQueueOptions.getSessionQueueUri());
131+
Duration sessionRequestTimeout = newSessionQueueOptions.getSessionRequestTimeout();
132+
ClientConfig httpClientConfig = ClientConfig
133+
.defaultConfig()
134+
.baseUrl(sessionQueueUrl)
135+
.readTimeout(sessionRequestTimeout);
129136
NewSessionQueue queue = new RemoteNewSessionQueue(
130137
tracer,
131-
clientFactory.createClient(sessionQueueUrl),
138+
clientFactory.createClient(httpClientConfig),
132139
secret);
133140

134141
DistributorOptions distributorOptions = new DistributorOptions(config);

0 commit comments

Comments
 (0)