Skip to content

Commit 134cfec

Browse files
committed
[grid] Lets avoid to create more than one "Regularly" when the Node registers again
1 parent 7004f1d commit 134cfec

2 files changed

Lines changed: 31 additions & 23 deletions

File tree

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,21 @@
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+
2028
import com.google.auto.service.AutoService;
2129
import com.google.common.collect.ImmutableSet;
2230
import com.google.common.net.MediaType;
31+
2332
import net.jodah.failsafe.Failsafe;
2433
import net.jodah.failsafe.RetryPolicy;
34+
2535
import org.openqa.selenium.BuildInfo;
2636
import org.openqa.selenium.cli.CliCommand;
2737
import org.openqa.selenium.events.EventBus;
@@ -57,14 +67,6 @@
5767
import java.util.concurrent.atomic.AtomicBoolean;
5868
import java.util.logging.Logger;
5969

60-
import static java.net.HttpURLConnection.HTTP_INTERNAL_ERROR;
61-
import static java.net.HttpURLConnection.HTTP_NO_CONTENT;
62-
import static org.openqa.selenium.grid.config.StandardGridRoles.EVENT_BUS_ROLE;
63-
import static org.openqa.selenium.grid.config.StandardGridRoles.HTTPD_ROLE;
64-
import static org.openqa.selenium.grid.config.StandardGridRoles.NODE_ROLE;
65-
import static org.openqa.selenium.grid.data.Availability.DOWN;
66-
import static org.openqa.selenium.remote.http.Route.get;
67-
6870
@AutoService(CliCommand.class)
6971
public class NodeServer extends TemplateGridServerCommand {
7072

@@ -197,7 +199,7 @@ public NettyServer start() {
197199
Executors.newSingleThreadExecutor().submit(() -> {
198200
Failsafe.with(registrationPolicy).run(
199201
() -> {
200-
LOG.info("Sending registration event");
202+
LOG.info("Sending registration event...");
201203
HealthCheck.Result check = node.getHealthCheck().check();
202204
if (DOWN.equals(check.getAvailability())) {
203205
LOG.severe("Node is not alive: " + check.getMessage());

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

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

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

20+
import static com.google.common.collect.ImmutableSet.toImmutableSet;
21+
import static org.openqa.selenium.grid.data.Availability.DRAINING;
22+
import static org.openqa.selenium.grid.data.Availability.UP;
23+
import static org.openqa.selenium.grid.node.CapabilityResponseEncoder.getEncoder;
24+
import static org.openqa.selenium.remote.HttpSessionId.getSessionId;
25+
import static org.openqa.selenium.remote.RemoteTags.CAPABILITIES;
26+
import static org.openqa.selenium.remote.RemoteTags.SESSION_ID;
27+
import static org.openqa.selenium.remote.http.Contents.asJson;
28+
import static org.openqa.selenium.remote.http.Contents.string;
29+
import static org.openqa.selenium.remote.http.HttpMethod.DELETE;
30+
2031
import com.google.common.annotations.VisibleForTesting;
2132
import com.google.common.base.Ticker;
2233
import com.google.common.cache.Cache;
2334
import com.google.common.cache.CacheBuilder;
2435
import com.google.common.cache.RemovalListener;
2536
import com.google.common.collect.ImmutableList;
2637
import com.google.common.collect.ImmutableMap;
38+
2739
import org.openqa.selenium.Capabilities;
2840
import org.openqa.selenium.ImmutableCapabilities;
2941
import org.openqa.selenium.NoSuchSessionException;
@@ -84,21 +96,11 @@
8496
import java.util.Set;
8597
import java.util.UUID;
8698
import java.util.concurrent.ExecutionException;
99+
import java.util.concurrent.atomic.AtomicBoolean;
87100
import java.util.concurrent.atomic.AtomicInteger;
88101
import java.util.logging.Logger;
89102
import java.util.stream.Collectors;
90103

91-
import static com.google.common.collect.ImmutableSet.toImmutableSet;
92-
import static org.openqa.selenium.grid.data.Availability.DRAINING;
93-
import static org.openqa.selenium.grid.data.Availability.UP;
94-
import static org.openqa.selenium.grid.node.CapabilityResponseEncoder.getEncoder;
95-
import static org.openqa.selenium.remote.HttpSessionId.getSessionId;
96-
import static org.openqa.selenium.remote.RemoteTags.CAPABILITIES;
97-
import static org.openqa.selenium.remote.RemoteTags.SESSION_ID;
98-
import static org.openqa.selenium.remote.http.Contents.asJson;
99-
import static org.openqa.selenium.remote.http.Contents.string;
100-
import static org.openqa.selenium.remote.http.HttpMethod.DELETE;
101-
102104
@ManagedService(objectName = "org.seleniumhq.grid:type=Node,name=LocalNode",
103105
description = "Node running the webdriver sessions.")
104106
public class LocalNode extends Node {
@@ -115,7 +117,8 @@ public class LocalNode extends Node {
115117
private final Cache<SessionId, SessionSlot> currentSessions;
116118
private final Cache<SessionId, TemporaryFilesystem> tempFileSystems;
117119
private final Regularly regularly;
118-
private AtomicInteger pendingSessions = new AtomicInteger();
120+
private final AtomicInteger pendingSessions = new AtomicInteger();
121+
private final AtomicBoolean heartBeatStarted = new AtomicBoolean(false);
119122

120123
private LocalNode(
121124
Tracer tracer,
@@ -175,8 +178,11 @@ private LocalNode(
175178

176179
bus.addListener(NodeAddedEvent.listener(nodeId -> {
177180
if (getId().equals(nodeId)) {
178-
regularly.submit(() ->
179-
bus.fire(new NodeHeartBeatEvent(getId())), heartbeatPeriod, heartbeatPeriod);
181+
// Lets avoid to create more than one "Regularly" when the Node registers again.
182+
if (!heartBeatStarted.getAndSet(true)) {
183+
regularly.submit(
184+
() -> bus.fire(new NodeHeartBeatEvent(getId())), heartbeatPeriod, heartbeatPeriod);
185+
}
180186
}
181187
}));
182188

0 commit comments

Comments
 (0)