Skip to content

Commit a17ee39

Browse files
committed
Use a guava cache in the DefaultDriverSessions
1 parent 49b7c9b commit a17ee39

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

java/server/src/org/openqa/selenium/remote/server/DefaultDriverSessions.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@
1717

1818
package org.openqa.selenium.remote.server;
1919

20+
import com.google.common.cache.Cache;
21+
import com.google.common.cache.CacheBuilder;
22+
import com.google.common.cache.RemovalListener;
2023
import com.google.common.collect.ImmutableList;
24+
import com.google.common.collect.ImmutableSet;
2125
import com.google.common.io.Files;
2226

2327
import org.openqa.selenium.Capabilities;
@@ -27,12 +31,9 @@
2731
import org.openqa.selenium.remote.DesiredCapabilities;
2832
import org.openqa.selenium.remote.SessionId;
2933

30-
import java.util.Collections;
3134
import java.util.List;
32-
import java.util.Map;
3335
import java.util.ServiceLoader;
3436
import java.util.Set;
35-
import java.util.concurrent.ConcurrentHashMap;
3637
import java.util.logging.Logger;
3738

3839
public class DefaultDriverSessions implements DriverSessions {
@@ -42,8 +43,7 @@ public class DefaultDriverSessions implements DriverSessions {
4243
private final DriverFactory factory;
4344
private final Clock clock;
4445

45-
private final Map<SessionId, Session> sessionIdToDriver =
46-
new ConcurrentHashMap<>();
46+
private final Cache<SessionId, Session> sessionIdToDriver;
4747

4848
private static List<DriverProvider> defaultDriverProviders =
4949
new ImmutableList.Builder<DriverProvider>()
@@ -71,6 +71,12 @@ public DefaultDriverSessions(Platform runningOn, DriverFactory factory, Clock cl
7171
this.clock = clock;
7272
registerDefaults(runningOn);
7373
registerServiceLoaders(runningOn);
74+
75+
RemovalListener<SessionId, Session> listener = notification -> notification.getValue().close();
76+
77+
this.sessionIdToDriver = CacheBuilder.newBuilder()
78+
.removalListener(listener)
79+
.build();
7480
}
7581

7682
private void registerDefaults(Platform current) {
@@ -128,17 +134,14 @@ public SessionId newSession(Capabilities desiredCapabilities) throws Exception {
128134
}
129135

130136
public Session get(SessionId sessionId) {
131-
return sessionIdToDriver.get(sessionId);
137+
return sessionIdToDriver.getIfPresent(sessionId);
132138
}
133139

134140
public void deleteSession(SessionId sessionId) {
135-
final Session removedSession = sessionIdToDriver.remove(sessionId);
136-
if (removedSession != null) {
137-
removedSession.close();
138-
}
141+
sessionIdToDriver.invalidate(sessionId);
139142
}
140143

141144
public Set<SessionId> getSessions() {
142-
return Collections.unmodifiableSet(sessionIdToDriver.keySet());
145+
return ImmutableSet.copyOf(sessionIdToDriver.asMap().keySet());
143146
}
144147
}

java/server/src/org/openqa/selenium/remote/server/DefaultSession.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ public void close() {
148148
if (tempFs != null) {
149149
tempFs.deleteTemporaryFiles();
150150
tempFs.deleteBaseDir();
151+
tempFs = null;
151152
}
152153
}
153154

0 commit comments

Comments
 (0)