Skip to content

Commit a97078c

Browse files
Fix resource leak in JdbcBackedSessionMap (#8784)
* Fix resource leak * FIx specs failures Co-authored-by: David Burns <david.burns@theautomatedtester.co.uk>
1 parent 7ee0bac commit a97078c

2 files changed

Lines changed: 29 additions & 50 deletions

File tree

java/server/src/org/openqa/selenium/grid/sessionmap/jdbc/JdbcBackedSessionMap.java

Lines changed: 29 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,21 @@ public boolean add(Session session) {
129129
attributeMap.put(AttributeKey.SESSION_URI.getKey(),
130130
EventAttribute.setValue(session.getUri().toString()));
131131

132-
try (PreparedStatement statement = insertSessionStatement(session)) {
132+
try (PreparedStatement statement = connection.prepareStatement(
133+
String.format("insert into %1$s (%2$s, %3$s, %4$s, %5$s, %6$s) values (?, ?, ?, ?, ?)",
134+
TABLE_NAME,
135+
SESSION_ID_COL,
136+
SESSION_URI_COL,
137+
SESSION_STEREOTYPE_COL,
138+
SESSION_CAPS_COL,
139+
SESSION_START_COL))) {
140+
141+
statement.setString(1, session.getId().toString());
142+
statement.setString(2, session.getUri().toString());
143+
statement.setString(3, JSON.toJson(session.getStereotype()));
144+
statement.setString(4, JSON.toJson(session.getCapabilities()));
145+
statement.setString(5, JSON.toJson(session.getStartTime()));
146+
133147
String statementStr = statement.toString();
134148
span.setAttribute(DATABASE_STATEMENT, statementStr);
135149
span.setAttribute(DATABASE_OPERATION, "insert");
@@ -171,7 +185,14 @@ public Session get(SessionId id) throws NoSuchSessionException {
171185
setCommonSpanAttributes(span);
172186
setCommonEventAttributes(attributeMap);
173187

174-
try (PreparedStatement statement = readSessionStatement(id)) {
188+
try (PreparedStatement statement = connection.prepareStatement(
189+
String.format("select * from %1$s where %2$s = ?",
190+
TABLE_NAME,
191+
SESSION_ID_COL))) {
192+
193+
statement.setMaxRows(1);
194+
statement.setString(1, id.toString());
195+
175196
String statementStr = statement.toString();
176197
span.setAttribute(DATABASE_STATEMENT, statementStr);
177198
span.setAttribute(DATABASE_OPERATION, "select");
@@ -255,7 +276,12 @@ public void remove(SessionId id) {
255276
setCommonSpanAttributes(span);
256277
setCommonEventAttributes(attributeMap);
257278

258-
try (PreparedStatement statement = getDeleteSqlForSession(id)) {
279+
try (PreparedStatement statement = connection.prepareStatement(
280+
String.format("delete from %1$s where %2$s = ?",
281+
TABLE_NAME,
282+
SESSION_ID_COL))) {
283+
284+
statement.setString(1, id.toString());
259285
String statementStr = statement.toString();
260286
span.setAttribute(DATABASE_STATEMENT, statementStr);
261287
span.setAttribute(DATABASE_OPERATION, "delete");
@@ -287,48 +313,6 @@ public void close() {
287313
}
288314
}
289315

290-
private PreparedStatement insertSessionStatement(Session session) throws SQLException {
291-
PreparedStatement insertStatement = connection.prepareStatement(
292-
String.format("insert into %1$s (%2$s, %3$s, %4$s, %5$s, %6$s) values (?, ?, ?, ?, ?)",
293-
TABLE_NAME,
294-
SESSION_ID_COL,
295-
SESSION_URI_COL,
296-
SESSION_STEREOTYPE_COL,
297-
SESSION_CAPS_COL,
298-
SESSION_START_COL));
299-
300-
insertStatement.setString(1, session.getId().toString());
301-
insertStatement.setString(2, session.getUri().toString());
302-
insertStatement.setString(3, JSON.toJson(session.getStereotype()));
303-
insertStatement.setString(4, JSON.toJson(session.getCapabilities()));
304-
insertStatement.setString(5, JSON.toJson(session.getStartTime()));
305-
306-
return insertStatement;
307-
}
308-
309-
private PreparedStatement readSessionStatement(SessionId sessionId) throws SQLException {
310-
PreparedStatement getSessionsStatement = connection.prepareStatement(
311-
String.format("select * from %1$s where %2$s = ?",
312-
TABLE_NAME,
313-
SESSION_ID_COL));
314-
315-
getSessionsStatement.setMaxRows(1);
316-
getSessionsStatement.setString(1, sessionId.toString());
317-
318-
return getSessionsStatement;
319-
}
320-
321-
private PreparedStatement getDeleteSqlForSession(SessionId sessionId) throws SQLException{
322-
PreparedStatement deleteSessionStatement = connection.prepareStatement(
323-
String.format("delete from %1$s where %2$s = ?",
324-
TABLE_NAME,
325-
SESSION_ID_COL));
326-
327-
deleteSessionStatement.setString(1, sessionId.toString());
328-
329-
return deleteSessionStatement;
330-
}
331-
332316
private void setCommonSpanAttributes(Span span) {
333317
span.setAttribute("span.kind", Span.Kind.CLIENT.toString());
334318
if (jdbcUser != null) {

java/spotbugs-excludes.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,6 @@
123123
<Bug pattern="URF_UNREAD_FIELD"/>
124124
</Match>
125125

126-
<Match>
127-
<Class name="org.openqa.selenium.grid.sessionmap.jdbc.JdbcBackedSessionMap"/>
128-
<Bug pattern="OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE"/>
129-
</Match>
130-
131126
<Match>
132127
<Class name="org.openqa.selenium.grid.sessionqueue.config.NewSessionQueueFlags"/>
133128
<Bug pattern="URF_UNREAD_FIELD"/>

0 commit comments

Comments
 (0)