Skip to content

Commit 995d897

Browse files
pujaganidiemol
andauthored
[grid] Use heartbeat to register the Node (#9321)
* [grid] Use heartbeat to register the Node Fixes #9297 Co-authored-by: Diego Molina <[email protected]> Co-authored-by: Diego Molina <[email protected]>
1 parent a577a2c commit 995d897

File tree

7 files changed

+27
-18
lines changed

7 files changed

+27
-18
lines changed

java/server/src/org/openqa/selenium/grid/data/NodeHeartBeatEvent.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ public class NodeHeartBeatEvent extends Event {
2828

2929
private static final EventName NODE_HEARTBEAT = new EventName("node-heartbeat");
3030

31-
public NodeHeartBeatEvent(NodeId nodeId) {
32-
super(NODE_HEARTBEAT, Require.nonNull("Node id", nodeId));
31+
public NodeHeartBeatEvent(NodeStatus status) {
32+
super(NODE_HEARTBEAT, Require.nonNull("Node status", status));
3333
}
3434

35-
public static EventListener<NodeId> listener(Consumer<NodeId> handler) {
35+
public static EventListener<NodeStatus> listener(Consumer<NodeStatus> handler) {
3636
Require.nonNull("Handler", handler);
3737

38-
return new EventListener<NodeId>(NODE_HEARTBEAT, NodeId.class, handler);
38+
return new EventListener<NodeStatus>(NODE_HEARTBEAT, NodeStatus.class, handler);
3939
}
4040
}

java/server/src/org/openqa/selenium/grid/distributor/local/LocalDistributor.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
import java.util.Optional;
8080
import java.util.Queue;
8181
import java.util.Set;
82+
import java.util.concurrent.ConcurrentHashMap;
8283
import java.util.concurrent.ConcurrentLinkedQueue;
8384
import java.util.concurrent.Executors;
8485
import java.util.concurrent.ScheduledExecutorService;
@@ -130,14 +131,20 @@ public LocalDistributor(
130131
this.clientFactory = Require.nonNull("HTTP client factory", clientFactory);
131132
this.sessions = Require.nonNull("Session map", sessions);
132133
this.model = new GridModel(bus);
133-
this.nodes = new HashMap<>();
134+
this.nodes = new ConcurrentHashMap<>();
134135
this.sessionRequests = Require.nonNull("New Session Request Queue", sessionRequests);
135136
this.registrationSecret = Require.nonNull("Registration secret", registrationSecret);
136137
this.healthcheckInterval = Require.nonNull("Health check interval", healthcheckInterval);
137138

138139
bus.addListener(NodeStatusEvent.listener(this::register));
139140
bus.addListener(NodeStatusEvent.listener(model::refresh));
140-
bus.addListener(NodeHeartBeatEvent.listener(model::touch));
141+
bus.addListener(NodeHeartBeatEvent.listener(nodeStatus -> {
142+
if (nodes.containsKey(nodeStatus.getId())) {
143+
model.touch(nodeStatus.getId());
144+
} else {
145+
register(nodeStatus);
146+
}
147+
}));
141148
bus.addListener(NodeDrainComplete.listener(this::remove));
142149
bus.addListener(NewSessionRequestEvent.listener(requestIds::offer));
143150

java/server/src/org/openqa/selenium/grid/node/httpd/NodeServer.java

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

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

20-
import static java.net.HttpURLConnection.HTTP_INTERNAL_ERROR;
21-
import static java.net.HttpURLConnection.HTTP_NO_CONTENT;
22-
import static org.openqa.selenium.grid.config.StandardGridRoles.EVENT_BUS_ROLE;
23-
import static org.openqa.selenium.grid.config.StandardGridRoles.HTTPD_ROLE;
24-
import static org.openqa.selenium.grid.config.StandardGridRoles.NODE_ROLE;
25-
import static org.openqa.selenium.grid.data.Availability.DOWN;
26-
import static org.openqa.selenium.remote.http.Route.get;
27-
2820
import com.google.auto.service.AutoService;
2921
import com.google.common.collect.ImmutableSet;
3022
import com.google.common.net.MediaType;
@@ -67,6 +59,14 @@
6759
import java.util.concurrent.atomic.AtomicBoolean;
6860
import java.util.logging.Logger;
6961

62+
import static java.net.HttpURLConnection.HTTP_INTERNAL_ERROR;
63+
import static java.net.HttpURLConnection.HTTP_NO_CONTENT;
64+
import static org.openqa.selenium.grid.config.StandardGridRoles.EVENT_BUS_ROLE;
65+
import static org.openqa.selenium.grid.config.StandardGridRoles.HTTPD_ROLE;
66+
import static org.openqa.selenium.grid.config.StandardGridRoles.NODE_ROLE;
67+
import static org.openqa.selenium.grid.data.Availability.DOWN;
68+
import static org.openqa.selenium.remote.http.Route.get;
69+
7070
@AutoService(CliCommand.class)
7171
public class NodeServer extends TemplateGridServerCommand {
7272

java/server/src/org/openqa/selenium/grid/node/local/LocalNode.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@
5050
import org.openqa.selenium.grid.data.NodeAddedEvent;
5151
import org.openqa.selenium.grid.data.NodeDrainComplete;
5252
import org.openqa.selenium.grid.data.NodeDrainStarted;
53-
import org.openqa.selenium.grid.data.NodeHeartBeatEvent;
5453
import org.openqa.selenium.grid.data.NodeId;
5554
import org.openqa.selenium.grid.data.NodeStatus;
55+
import org.openqa.selenium.grid.data.NodeHeartBeatEvent;
5656
import org.openqa.selenium.grid.data.Session;
5757
import org.openqa.selenium.grid.data.SessionClosedEvent;
5858
import org.openqa.selenium.grid.data.Slot;
@@ -181,7 +181,7 @@ private LocalNode(
181181
// Lets avoid to create more than one "Regularly" when the Node registers again.
182182
if (!heartBeatStarted.getAndSet(true)) {
183183
regularly.submit(
184-
() -> bus.fire(new NodeHeartBeatEvent(getId())), heartbeatPeriod, heartbeatPeriod);
184+
() -> bus.fire(new NodeHeartBeatEvent(getStatus())), heartbeatPeriod, heartbeatPeriod);
185185
}
186186
}
187187
}));

java/server/test/org/openqa/selenium/grid/distributor/AddingNodesTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import com.google.common.collect.ImmutableMap;
2121
import com.google.common.collect.ImmutableSet;
22+
2223
import org.junit.Before;
2324
import org.junit.Test;
2425
import org.openqa.selenium.Capabilities;

java/server/test/org/openqa/selenium/grid/distributor/DistributorTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,9 @@ public void shouldStartHeartBeatOnNodeRegistration() {
187187
AtomicBoolean heartbeatStarted = new AtomicBoolean();
188188
CountDownLatch latch = new CountDownLatch(1);
189189

190-
bus.addListener(NodeHeartBeatEvent.listener(nodeId -> {
190+
bus.addListener(NodeHeartBeatEvent.listener(nodeStatus -> {
191191
latch.countDown();
192-
if (node.getId().equals(nodeId)) {
192+
if (node.getId().equals(nodeStatus.getId())) {
193193
heartbeatStarted.set(true);
194194
}
195195
}));

java/server/test/org/openqa/selenium/grid/distributor/local/LocalDistributorTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.openqa.selenium.grid.distributor.local;
1919

2020
import com.google.common.collect.ImmutableMap;
21+
2122
import org.junit.Before;
2223
import org.junit.Test;
2324
import org.openqa.selenium.Capabilities;

0 commit comments

Comments
 (0)