Skip to content

Commit c40a481

Browse files
VietND96Copilot
andcommitted
Fix review comment as suggestion
Co-authored-by: Copilot <[email protected]> Signed-off-by: Viet Nguyen Duc <[email protected]>
1 parent 8b1ba6f commit c40a481

File tree

1 file changed

+29
-25
lines changed

1 file changed

+29
-25
lines changed

java/src/org/openqa/selenium/grid/sessionmap/local/LocalSessionMap.java

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@
2222

2323
import java.net.URI;
2424
import java.util.Collection;
25+
import java.util.Collections;
2526
import java.util.HashMap;
2627
import java.util.HashSet;
2728
import java.util.Map;
2829
import java.util.Set;
2930
import java.util.concurrent.ConcurrentHashMap;
3031
import java.util.concurrent.ConcurrentMap;
32+
import java.util.concurrent.locks.Lock;
3133
import java.util.concurrent.locks.ReadWriteLock;
3234
import java.util.concurrent.locks.ReentrantReadWriteLock;
3335
import java.util.logging.Logger;
@@ -115,14 +117,9 @@ public boolean add(Session session) {
115117
public Session get(SessionId id) {
116118
Require.nonNull("Session ID", id);
117119

118-
Session session = knownSessions.get(id);
119-
if (session != null) {
120-
return session;
121-
}
122-
123120
sessionMapLock.readLock().lock();
124121
try {
125-
session = knownSessions.get(id);
122+
Session session = knownSessions.get(id);
126123
if (session == null) {
127124
throw new NoSuchSessionException("Unable to find session with ID: " + id);
128125
}
@@ -201,6 +198,8 @@ private void batchRemoveByUri(URI externalUri, Class<? extends Event> eventClass
201198
private static class IndexedSessionMap {
202199
private final ConcurrentMap<SessionId, Session> sessions = new ConcurrentHashMap<>();
203200
private final ConcurrentMap<URI, Set<SessionId>> sessionsByUri = new ConcurrentHashMap<>();
201+
private final ReadWriteLock lock = new ReentrantReadWriteLock();
202+
private final Lock writeLock = lock.writeLock();
204203

205204
public Session get(SessionId id) {
206205
return sessions.get(id);
@@ -242,29 +241,34 @@ public Session remove(SessionId id) {
242241
}
243242

244243
public void batchRemove(Set<SessionId> sessionIds) {
245-
Map<URI, Set<SessionId>> uriToSessionIds = new HashMap<>();
246-
247-
for (SessionId id : sessionIds) {
248-
Session session = sessions.get(id);
249-
if (session != null && session.getUri() != null) {
250-
uriToSessionIds.computeIfAbsent(session.getUri(), k -> new HashSet<>()).add(id);
244+
writeLock.lock();
245+
try {
246+
Map<URI, Set<SessionId>> uriToSessionIds = new HashMap<>();
247+
248+
for (SessionId id : sessionIds) {
249+
Session session = sessions.get(id);
250+
if (session != null && session.getUri() != null) {
251+
uriToSessionIds.computeIfAbsent(session.getUri(), k -> new HashSet<>()).add(id);
252+
}
251253
}
252-
}
253254

254-
for (SessionId id : sessionIds) {
255-
sessions.remove(id);
256-
}
255+
for (SessionId id : sessionIds) {
256+
sessions.remove(id);
257+
}
257258

258-
for (Map.Entry<URI, Set<SessionId>> entry : uriToSessionIds.entrySet()) {
259-
URI uri = entry.getKey();
260-
Set<SessionId> idsToRemove = entry.getValue();
259+
for (Map.Entry<URI, Set<SessionId>> entry : uriToSessionIds.entrySet()) {
260+
URI uri = entry.getKey();
261+
Set<SessionId> idsToRemove = entry.getValue();
261262

262-
sessionsByUri.computeIfPresent(
263-
uri,
264-
(k, existingIds) -> {
265-
existingIds.removeAll(idsToRemove);
266-
return existingIds.isEmpty() ? null : existingIds;
267-
});
263+
sessionsByUri.computeIfPresent(
264+
uri,
265+
(k, existingIds) -> {
266+
existingIds.removeAll(idsToRemove);
267+
return existingIds.isEmpty() ? null : existingIds;
268+
});
269+
}
270+
} finally {
271+
writeLock.unlock();
268272
}
269273
}
270274

0 commit comments

Comments
 (0)