Skip to content

Commit 4056795

Browse files
committed
Fix resource leaking in YDB shedlock
1 parent 92338e4 commit 4056795

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

shedlock-ydb/src/main/java/tech/ydb/lock/provider/YdbJDBCLockProvider.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import java.sql.SQLException;
44
import java.util.Optional;
5+
56
import javax.sql.DataSource;
7+
68
import net.javacrumbs.shedlock.core.LockConfiguration;
79
import net.javacrumbs.shedlock.core.LockProvider;
810
import net.javacrumbs.shedlock.core.SimpleLock;
@@ -31,33 +33,30 @@ public Optional<SimpleLock> lock(LockConfiguration lockConfiguration) {
3133
try {
3234
connection.setAutoCommit(false);
3335

34-
var selectPS = connection.prepareStatement("SELECT locked_by, lock_until FROM shedlock " +
35-
"WHERE name = ? AND lock_until > CurrentUtcTimestamp()");
36-
37-
selectPS.setString(1, lockConfiguration.getName());
38-
39-
try (var rs = selectPS.executeQuery()) {
40-
if (rs.next()) {
41-
LOGGER.debug("Instance[{}] acquire lock is failed. Leader is {}, lock_until = {}",
42-
LOCKED_BY, rs.getString(1), rs.getString(2));
43-
return Optional.empty();
36+
try (var selectPS = connection.prepareStatement("SELECT locked_by, lock_until FROM shedlock " +
37+
"WHERE name = ? AND lock_until > CurrentUtcTimestamp()")) {
38+
selectPS.setString(1, lockConfiguration.getName());
39+
try (var rs = selectPS.executeQuery()) {
40+
if (rs.next()) {
41+
LOGGER.debug("Instance[{}] acquire lock is failed. Leader is {}, lock_until = {}",
42+
LOCKED_BY, rs.getString(1), rs.getString(2));
43+
return Optional.empty();
44+
}
4445
}
4546
}
4647

47-
var upsertPS = connection.prepareStatement("" +
48+
try (var upsertPS = connection.prepareStatement("" +
4849
"UPSERT INTO shedlock(name, lock_until, locked_at, locked_by) " +
4950
"VALUES (?, Unwrap(CurrentUtcTimestamp() + ?), CurrentUtcTimestamp(), ?)"
50-
);
51-
52-
upsertPS.setObject(1, lockConfiguration.getName());
53-
upsertPS.setObject(2, lockConfiguration.getLockAtMostFor());
54-
upsertPS.setObject(3, LOCKED_BY);
55-
upsertPS.execute();
51+
)) {
52+
upsertPS.setObject(1, lockConfiguration.getName());
53+
upsertPS.setObject(2, lockConfiguration.getLockAtMostFor());
54+
upsertPS.setObject(3, LOCKED_BY);
55+
upsertPS.execute();
56+
}
5657

5758
connection.commit();
58-
5959
LOGGER.debug("Instance[{}] is leader", LOCKED_BY);
60-
6160
return Optional.of(new YdbJDBCLock(lockConfiguration.getName(), dataSource));
6261
} finally {
6362
connection.setAutoCommit(autoCommit);

0 commit comments

Comments
 (0)