Skip to content

Commit 38c2b3f

Browse files
committed
[grid] Avoid memoizing Distributor status for GraphQL queries
Fixes #9421
1 parent 2263fb7 commit 38c2b3f

File tree

2 files changed

+12
-17
lines changed

2 files changed

+12
-17
lines changed

java/server/src/org/openqa/selenium/grid/graphql/Grid.java

+8-10
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
package org.openqa.selenium.grid.graphql;
1919

20-
import com.google.common.base.Suppliers;
2120
import com.google.common.collect.ImmutableList;
2221
import org.openqa.selenium.Capabilities;
2322
import org.openqa.selenium.ImmutableCapabilities;
@@ -37,14 +36,13 @@
3736
import java.util.List;
3837
import java.util.Map;
3938
import java.util.Set;
40-
import java.util.function.Supplier;
4139
import java.util.stream.Collectors;
4240

4341
public class Grid {
4442

4543
private static final Json JSON = new Json();
4644
private final URI uri;
47-
private final Supplier<DistributorStatus> distributorStatus;
45+
private final DistributorStatus distributorStatus;
4846
private final List<Set<Capabilities>> queueInfoList;
4947
private final String version;
5048

@@ -61,7 +59,7 @@ public Grid(
6159
.stream()
6260
.map(SessionRequestCapability::getDesiredCapabilities)
6361
.collect(Collectors.toList());
64-
this.distributorStatus = Suppliers.memoize(distributor::getStatus);
62+
this.distributorStatus = distributor.getStatus();
6563
this.version = Require.nonNull("Grid's version", version);
6664
}
6765

@@ -76,7 +74,7 @@ public String getVersion() {
7674
public List<Node> getNodes() {
7775
ImmutableList.Builder<Node> toReturn = ImmutableList.builder();
7876

79-
for (NodeStatus status : distributorStatus.get().getNodes()) {
77+
for (NodeStatus status : distributorStatus.getNodes()) {
8078
Map<Capabilities, Integer> stereotypes = new HashMap<>();
8179
Map<org.openqa.selenium.grid.data.Session, Slot> sessions = new HashMap<>();
8280

@@ -112,11 +110,11 @@ public List<Node> getNodes() {
112110
}
113111

114112
public int getNodeCount() {
115-
return distributorStatus.get().getNodes().size();
113+
return distributorStatus.getNodes().size();
116114
}
117115

118116
public int getSessionCount() {
119-
return distributorStatus.get().getNodes().stream()
117+
return distributorStatus.getNodes().stream()
120118
.map(NodeStatus::getSlots)
121119
.flatMap(Collection::stream)
122120
.filter(slot -> slot.getSession()!=null)
@@ -125,13 +123,13 @@ public int getSessionCount() {
125123
}
126124

127125
public int getTotalSlots() {
128-
return distributorStatus.get().getNodes().stream()
126+
return distributorStatus.getNodes().stream()
129127
.mapToInt(status -> status.getSlots().size())
130128
.sum();
131129
}
132130

133131
public int getMaxSession() {
134-
return distributorStatus.get().getNodes().stream()
132+
return distributorStatus.getNodes().stream()
135133
.mapToInt(NodeStatus::getMaxSessionCount)
136134
.sum();
137135
}
@@ -150,7 +148,7 @@ public List<String> getSessionQueueRequests() {
150148

151149
public List<Session> getSessions() {
152150
List<Session> sessions = new ArrayList<>();
153-
for (NodeStatus status : distributorStatus.get().getNodes()) {
151+
for (NodeStatus status : distributorStatus.getNodes()) {
154152
for (Slot slot : status.getSlots()) {
155153
if (slot.getSession()!=null) {
156154
org.openqa.selenium.grid.data.Session session = slot.getSession();

java/server/src/org/openqa/selenium/grid/graphql/SessionData.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,21 @@
1717

1818
package org.openqa.selenium.grid.graphql;
1919

20-
import com.google.common.base.Suppliers;
2120
import graphql.schema.DataFetcher;
2221
import graphql.schema.DataFetchingEnvironment;
23-
import org.openqa.selenium.grid.data.DistributorStatus;
2422
import org.openqa.selenium.grid.data.NodeStatus;
2523
import org.openqa.selenium.grid.data.Slot;
2624
import org.openqa.selenium.grid.distributor.Distributor;
2725
import org.openqa.selenium.internal.Require;
2826

2927
import java.util.Set;
30-
import java.util.function.Supplier;
3128

3229
public class SessionData implements DataFetcher {
3330

34-
private final Supplier<DistributorStatus> distributorStatus;
31+
private final Distributor distributor;
3532

3633
public SessionData(Distributor distributor) {
37-
distributorStatus = Suppliers.memoize(Require.nonNull("Distributor", distributor)::getStatus);
34+
this.distributor = Require.nonNull("Distributor", distributor);
3835
}
3936

4037
@Override
@@ -45,7 +42,7 @@ public Object get(DataFetchingEnvironment environment) {
4542
throw new SessionNotFoundException("Session id is empty. A valid session id is required.");
4643
}
4744

48-
Set<NodeStatus> nodeStatuses = distributorStatus.get().getNodes();
45+
Set<NodeStatus> nodeStatuses = distributor.getStatus().getNodes();
4946

5047
SessionInSlot currentSession = findSession(sessionId, nodeStatuses);
5148

@@ -62,7 +59,7 @@ public Object get(DataFetchingEnvironment environment) {
6259
currentSession.slot);
6360
} else {
6461
throw new SessionNotFoundException("No ongoing session found with the requested session id.",
65-
sessionId);
62+
sessionId);
6663
}
6764
}
6865

0 commit comments

Comments
 (0)