Skip to content

Commit e7c39cc

Browse files
committed
[grid] Extract GridModel into an interface
1 parent 10a1fb3 commit e7c39cc

File tree

4 files changed

+61
-20
lines changed

4 files changed

+61
-20
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.openqa.selenium.grid.distributor;
2+
3+
import org.openqa.selenium.grid.data.Availability;
4+
import org.openqa.selenium.grid.data.NodeId;
5+
import org.openqa.selenium.grid.data.NodeStatus;
6+
import org.openqa.selenium.grid.data.Session;
7+
import org.openqa.selenium.grid.data.SlotId;
8+
import org.openqa.selenium.remote.SessionId;
9+
10+
import java.util.Set;
11+
12+
public interface GridModel {
13+
14+
public void add(NodeStatus node);
15+
16+
public void refresh(NodeStatus status);
17+
18+
public void touch(NodeId id);
19+
20+
public void remove(NodeId id);
21+
22+
public void purgeDeadNodes();
23+
24+
public Availability setAvailability(NodeId id, Availability availability);
25+
26+
public boolean reserve(SlotId slotId);
27+
28+
public Set<NodeStatus> getSnapshot();
29+
30+
public Set<NodeStatus> nodes(Availability availability);
31+
32+
public void release(SessionId id);
33+
34+
public void setSession(SlotId slotId, Session session);
35+
36+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public class LocalDistributor extends Distributor {
115115
private final Duration healthcheckInterval;
116116

117117
private final ReadWriteLock lock = new ReentrantReadWriteLock(/* fair */ true);
118-
private final GridModel model;
118+
private final LocalGridModel model;
119119
private final Map<NodeId, Node> nodes;
120120

121121
private final NewSessionQueue sessionQueue;
@@ -142,7 +142,7 @@ public LocalDistributor(
142142
this.slotSelector = Require.nonNull("Slot selector", slotSelector);
143143
this.registrationSecret = Require.nonNull("Registration secret", registrationSecret);
144144
this.healthcheckInterval = Require.nonNull("Health check interval", healthcheckInterval);
145-
this.model = new GridModel(bus);
145+
this.model = new LocalGridModel(bus);
146146
this.nodes = new ConcurrentHashMap<>();
147147
this.rejectUnsupportedCaps = rejectUnsupportedCaps;
148148

java/server/src/org/openqa/selenium/grid/distributor/local/GridModel.java renamed to java/server/src/org/openqa/selenium/grid/distributor/local/LocalGridModel.java

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.openqa.selenium.grid.data.SessionClosedEvent;
2828
import org.openqa.selenium.grid.data.Slot;
2929
import org.openqa.selenium.grid.data.SlotId;
30+
import org.openqa.selenium.grid.distributor.GridModel;
3031
import org.openqa.selenium.internal.Require;
3132
import org.openqa.selenium.remote.SessionId;
3233

@@ -48,22 +49,23 @@
4849
import static org.openqa.selenium.grid.data.Availability.DRAINING;
4950
import static org.openqa.selenium.grid.data.Availability.UP;
5051

51-
public class GridModel {
52+
public class LocalGridModel implements GridModel {
5253

53-
private static final Logger LOG = Logger.getLogger(GridModel.class.getName());
54+
private static final Logger LOG = Logger.getLogger(LocalGridModel.class.getName());
5455
private static final SessionId RESERVED = new SessionId("reserved");
5556
private final ReadWriteLock lock = new ReentrantReadWriteLock(/* fair */ true);
5657
private final Map<Availability, Set<NodeStatus>> nodes = new ConcurrentHashMap<>();
5758
private final EventBus events;
5859

59-
public GridModel(EventBus events) {
60+
public LocalGridModel(EventBus events) {
6061
this.events = Require.nonNull("Event bus", events);
6162

6263
this.events.addListener(NodeDrainStarted.listener(nodeId -> setAvailability(nodeId, DRAINING)));
6364
this.events.addListener(SessionClosedEvent.listener(this::release));
6465
}
6566

66-
public GridModel add(NodeStatus node) {
67+
@Override
68+
public void add(NodeStatus node) {
6769
Require.nonNull("Node", node);
6870

6971
Lock writeLock = lock.writeLock();
@@ -88,11 +90,10 @@ public GridModel add(NodeStatus node) {
8890
} finally {
8991
writeLock.unlock();
9092
}
91-
92-
return this;
9393
}
9494

95-
public GridModel refresh(NodeStatus status) {
95+
@Override
96+
public void refresh(NodeStatus status) {
9697
Require.nonNull("Node status", status);
9798

9899
Lock writeLock = lock.writeLock();
@@ -101,27 +102,26 @@ public GridModel refresh(NodeStatus status) {
101102
AvailabilityAndNode availabilityAndNode = findNode(status.getId());
102103

103104
if (availabilityAndNode == null) {
104-
return this;
105+
return;
105106
}
106107

107108
// if the node was marked as "down", keep it down until a healthcheck passes:
108109
// just because the node can hit the event bus doesn't mean it's reachable
109110
if (DOWN.equals(availabilityAndNode.availability)) {
110111
nodes(DOWN).remove(availabilityAndNode.status);
111112
nodes(DOWN).add(status);
112-
return this;
113113
}
114114

115115
// But do trust the node if it tells us it's draining
116116
nodes(availabilityAndNode.availability).remove(availabilityAndNode.status);
117117
nodes(status.getAvailability()).add(status);
118-
return this;
119118
} finally {
120119
writeLock.unlock();
121120
}
122121
}
123122

124-
public GridModel touch(NodeId id) {
123+
@Override
124+
public void touch(NodeId id) {
125125
Require.nonNull("Node ID", id);
126126

127127
Lock writeLock = lock.writeLock();
@@ -131,30 +131,30 @@ public GridModel touch(NodeId id) {
131131
if (availabilityAndNode != null) {
132132
availabilityAndNode.status.touch();
133133
}
134-
return this;
135134
} finally {
136135
writeLock.unlock();
137136
}
138137
}
139138

140-
public GridModel remove(NodeId id) {
139+
@Override
140+
public void remove(NodeId id) {
141141
Require.nonNull("Node ID", id);
142142

143143
Lock writeLock = lock.writeLock();
144144
writeLock.lock();
145145
try {
146146
AvailabilityAndNode availabilityAndNode = findNode(id);
147147
if (availabilityAndNode == null) {
148-
return this;
148+
return;
149149
}
150150

151151
nodes(availabilityAndNode.availability).remove(availabilityAndNode.status);
152-
return this;
153152
} finally {
154153
writeLock.unlock();
155154
}
156155
}
157156

157+
@Override
158158
public void purgeDeadNodes() {
159159
long now = System.currentTimeMillis();
160160
Lock writeLock = lock.writeLock();
@@ -200,6 +200,7 @@ public void purgeDeadNodes() {
200200
}
201201
}
202202

203+
@Override
203204
public Availability setAvailability(NodeId id, Availability availability) {
204205
Require.nonNull("Node ID", id);
205206
Require.nonNull("Availability", availability);
@@ -232,6 +233,7 @@ public Availability setAvailability(NodeId id, Availability availability) {
232233
}
233234
}
234235

236+
@Override
235237
public boolean reserve(SlotId slotId) {
236238
Lock writeLock = lock.writeLock();
237239
writeLock.lock();
@@ -269,6 +271,7 @@ public boolean reserve(SlotId slotId) {
269271
}
270272
}
271273

274+
@Override
272275
public Set<NodeStatus> getSnapshot() {
273276
Lock readLock = this.lock.readLock();
274277
readLock.lock();
@@ -285,7 +288,7 @@ public Set<NodeStatus> getSnapshot() {
285288
}
286289
}
287290

288-
private Set<NodeStatus> nodes(Availability availability) {
291+
public Set<NodeStatus> nodes(Availability availability) {
289292
return nodes.computeIfAbsent(availability, ignored -> new HashSet<>());
290293
}
291294

@@ -312,7 +315,8 @@ private NodeStatus rewrite(NodeStatus status, Availability availability) {
312315
status.getOsInfo());
313316
}
314317

315-
private void release(SessionId id) {
318+
@Override
319+
public void release(SessionId id) {
316320
if (id == null) {
317321
return;
318322
}
@@ -361,6 +365,7 @@ private void reserve(NodeStatus status, Slot slot) {
361365
amend(UP, status, reserved);
362366
}
363367

368+
@Override
364369
public void setSession(SlotId slotId, Session session) {
365370
Require.nonNull("Slot ID", slotId);
366371

java/server/test/org/openqa/selenium/grid/distributor/local/GridModelTest.java renamed to java/server/test/org/openqa/selenium/grid/distributor/local/LocalGridModelTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
import java.time.Duration;
3535

36-
public class GridModelTest {
36+
public class LocalGridModelTest {
3737

3838
private final Tracer tracer = DefaultTestTracer.createTracer();
3939
private final EventBus events = new GuavaEventBus();

0 commit comments

Comments
 (0)