Skip to content

Commit 55f02a9

Browse files
authored
[grid] Improve readTimeout in handle session between Router and Node (#16163)
* [grid] Improve readTimeout in handle session between Router and Node * Fix review comment * Check null might return from Values.get() and remove catch block --------- Signed-off-by: Viet Nguyen Duc <[email protected]>
1 parent ab9733c commit 55f02a9

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

java/src/org/openqa/selenium/grid/node/Node.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,9 @@ protected Node(
199199
.to(() -> new Drain(this, json))
200200
.with(spanDecorator("node.drain").andThen(requiresSecret)),
201201
get("/se/grid/node/status")
202-
.to(() -> req -> new HttpResponse().setContent(asJson(getStatus())))
202+
.to(
203+
() ->
204+
req -> new HttpResponse().setContent(asJson(Map.of("value", getStatus()))))
203205
.with(spanDecorator("node.node_status")),
204206
get("/status").to(() -> new StatusHandler(this)).with(spanDecorator("node.status")));
205207
}

java/src/org/openqa/selenium/grid/router/HandleSession.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@
2121
import static org.openqa.selenium.remote.RemoteTags.SESSION_ID;
2222
import static org.openqa.selenium.remote.RemoteTags.SESSION_ID_EVENT;
2323
import static org.openqa.selenium.remote.http.Contents.asJson;
24+
import static org.openqa.selenium.remote.http.HttpMethod.GET;
2425
import static org.openqa.selenium.remote.tracing.Tags.EXCEPTION;
2526
import static org.openqa.selenium.remote.tracing.Tags.HTTP_REQUEST;
2627
import static org.openqa.selenium.remote.tracing.Tags.HTTP_REQUEST_EVENT;
2728
import static org.openqa.selenium.remote.tracing.Tags.HTTP_RESPONSE;
2829

2930
import java.io.Closeable;
3031
import java.net.URI;
32+
import java.time.Duration;
3133
import java.time.Instant;
3234
import java.time.temporal.ChronoUnit;
3335
import java.util.Iterator;
@@ -43,8 +45,10 @@
4345
import org.openqa.selenium.NoSuchSessionException;
4446
import org.openqa.selenium.concurrent.ExecutorServices;
4547
import org.openqa.selenium.concurrent.GuardedRunnable;
48+
import org.openqa.selenium.grid.data.NodeStatus;
4649
import org.openqa.selenium.grid.sessionmap.SessionMap;
4750
import org.openqa.selenium.grid.web.ReverseProxyHandler;
51+
import org.openqa.selenium.grid.web.Values;
4852
import org.openqa.selenium.internal.Require;
4953
import org.openqa.selenium.remote.ErrorCodec;
5054
import org.openqa.selenium.remote.SessionId;
@@ -230,8 +234,7 @@ private Callable<UsageCountingReverseProxyHandler> loadSessionId(
230234
return entry;
231235
}
232236

233-
ClientConfig config =
234-
ClientConfig.defaultConfig().baseUri(sessionUri).withRetries();
237+
ClientConfig config = fetchNodeSessionTimeout(sessionUri).withRetries();
235238
HttpClient httpClient = httpClientFactory.createClient(config);
236239

237240
return new CacheEntry(httpClient, 1);
@@ -247,6 +250,22 @@ private Callable<UsageCountingReverseProxyHandler> loadSessionId(
247250
});
248251
}
249252

253+
private ClientConfig fetchNodeSessionTimeout(URI uri) {
254+
ClientConfig config = ClientConfig.defaultConfig().baseUri(uri);
255+
Duration sessionTimeout = config.readTimeout();
256+
try (HttpClient httpClient = httpClientFactory.createClient(config)) {
257+
HttpRequest statusRequest = new HttpRequest(GET, "/se/grid/node/status");
258+
HttpResponse res = httpClient.execute(statusRequest);
259+
NodeStatus nodeStatus = Values.get(res, NodeStatus.class);
260+
if (nodeStatus != null) {
261+
sessionTimeout = nodeStatus.getSessionTimeout();
262+
}
263+
}
264+
LOG.fine("Set read timeout: " + sessionTimeout.toSeconds() + " seconds for " + uri);
265+
config = config.readTimeout(sessionTimeout);
266+
return config;
267+
}
268+
250269
@Override
251270
public void close() {
252271
ExecutorServices.shutdownGracefully(

0 commit comments

Comments
 (0)