Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion java/src/org/openqa/selenium/grid/node/Node.java
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,9 @@ protected Node(
.to(() -> new Drain(this, json))
.with(spanDecorator("node.drain").andThen(requiresSecret)),
get("/se/grid/node/status")
.to(() -> req -> new HttpResponse().setContent(asJson(getStatus())))
.to(
() ->
req -> new HttpResponse().setContent(asJson(Map.of("value", getStatus()))))
.with(spanDecorator("node.node_status")),
get("/status").to(() -> new StatusHandler(this)).with(spanDecorator("node.status")));
}
Expand Down
31 changes: 29 additions & 2 deletions java/src/org/openqa/selenium/grid/router/HandleSession.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,15 @@
import static org.openqa.selenium.remote.RemoteTags.SESSION_ID;
import static org.openqa.selenium.remote.RemoteTags.SESSION_ID_EVENT;
import static org.openqa.selenium.remote.http.Contents.asJson;
import static org.openqa.selenium.remote.http.HttpMethod.GET;
import static org.openqa.selenium.remote.tracing.Tags.EXCEPTION;
import static org.openqa.selenium.remote.tracing.Tags.HTTP_REQUEST;
import static org.openqa.selenium.remote.tracing.Tags.HTTP_REQUEST_EVENT;
import static org.openqa.selenium.remote.tracing.Tags.HTTP_RESPONSE;

import java.io.Closeable;
import java.net.URI;
import java.time.Duration;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Iterator;
Expand All @@ -43,8 +45,10 @@
import org.openqa.selenium.NoSuchSessionException;
import org.openqa.selenium.concurrent.ExecutorServices;
import org.openqa.selenium.concurrent.GuardedRunnable;
import org.openqa.selenium.grid.data.NodeStatus;
import org.openqa.selenium.grid.sessionmap.SessionMap;
import org.openqa.selenium.grid.web.ReverseProxyHandler;
import org.openqa.selenium.grid.web.Values;
import org.openqa.selenium.internal.Require;
import org.openqa.selenium.remote.ErrorCodec;
import org.openqa.selenium.remote.SessionId;
Expand Down Expand Up @@ -230,8 +234,7 @@ private Callable<UsageCountingReverseProxyHandler> loadSessionId(
return entry;
}

ClientConfig config =
ClientConfig.defaultConfig().baseUri(sessionUri).withRetries();
ClientConfig config = fetchNodeSessionTimeout(sessionUri).withRetries();
HttpClient httpClient = httpClientFactory.createClient(config);

return new CacheEntry(httpClient, 1);
Expand All @@ -247,6 +250,30 @@ private Callable<UsageCountingReverseProxyHandler> loadSessionId(
});
}

private ClientConfig fetchNodeSessionTimeout(URI uri) {
ClientConfig config = ClientConfig.defaultConfig().baseUri(uri);
Duration sessionTimeout = config.readTimeout();
try (HttpClient httpClient = httpClientFactory.createClient(config)) {
HttpRequest statusRequest = new HttpRequest(GET, "/se/grid/node/status");
HttpResponse res = httpClient.execute(statusRequest);
NodeStatus nodeStatus = Values.get(res, NodeStatus.class);
sessionTimeout = nodeStatus.getSessionTimeout();
LOG.fine(
"Fetched session timeout from node status (read timeout: "
+ sessionTimeout.toSeconds()
+ " seconds) for "
+ uri);
} catch (Exception e) {
LOG.fine(
"Use default from ClientConfig (read timeout: "
+ config.readTimeout().toSeconds()
+ " seconds) for "
+ uri);
}
config = config.readTimeout(sessionTimeout);
return config;
}

@Override
public void close() {
ExecutorServices.shutdownGracefully(
Expand Down
Loading