Skip to content

Commit 8604d5c

Browse files
fix
1 parent fbc5c64 commit 8604d5c

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

shedlock-ydb/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>tech.ydb.dialects</groupId>
88
<artifactId>shedlock-ydb</artifactId>
9-
<version>0.2.0</version>
9+
<version>0.3.0</version>
1010

1111
<packaging>jar</packaging>
1212

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

+11-4
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,17 @@ private record YdbJDBCLock(String name, DataSource dataSource) implements Simple
7575
@Override
7676
public void unlock() {
7777
try (var connection = dataSource.getConnection()) {
78-
var ps = connection.prepareStatement(
79-
"UPDATE shedlock SET lock_until = CurrentUtcTimestamp() WHERE name = ?");
80-
ps.setObject(1, name);
81-
ps.execute();
78+
var autoCommit = connection.getAutoCommit();
79+
80+
try {
81+
connection.setAutoCommit(true);
82+
var ps = connection.prepareStatement(
83+
"UPDATE shedlock SET lock_until = CurrentUtcTimestamp() WHERE name = ?");
84+
ps.setObject(1, name);
85+
ps.execute();
86+
} finally {
87+
connection.setAutoCommit(autoCommit);
88+
}
8289
} catch (SQLException e) {
8390
LOGGER.error(String.format("Instance[{%s}] release lock is failed", LOCKED_BY), e);
8491

shedlock-ydb/src/test/java/tech/ydb/lock/provider/YdbLockProviderTest.java

+10-3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import java.sql.SQLException;
44
import java.time.Duration;
55
import java.time.Instant;
6+
import java.util.ArrayList;
67
import java.util.Optional;
78
import java.util.concurrent.ExecutionException;
89
import java.util.concurrent.Executors;
10+
import java.util.concurrent.Future;
911
import java.util.concurrent.atomic.AtomicBoolean;
1012
import java.util.concurrent.atomic.AtomicInteger;
1113
import javax.sql.DataSource;
@@ -67,12 +69,13 @@ public void integrationTest() throws ExecutionException, InterruptedException, S
6769
");");
6870
}
6971

72+
var lockFutures = new ArrayList<Future<?>>();
7073
var executorServer = Executors.newFixedThreadPool(10);
7174
var atomicInt = new AtomicInteger();
7275
var locked = new AtomicBoolean();
7376

7477
for (int i = 0; i < 10; i++) {
75-
executorServer.submit(() -> {
78+
lockFutures.add(executorServer.submit(() -> {
7679
Optional<SimpleLock> optinal = Optional.empty();
7780

7881
while (optinal.isEmpty()) {
@@ -96,9 +99,13 @@ public void integrationTest() throws ExecutionException, InterruptedException, S
9699
simpleLock.unlock();
97100
});
98101
}
99-
}).get();
102+
}));
100103
}
101104

102-
Assertions.assertEquals(500, atomicInt.get());
105+
for (var future : lockFutures) {
106+
future.get();
107+
}
108+
109+
Assertions.assertEquals(4950, atomicInt.get());
103110
}
104111
}

0 commit comments

Comments
 (0)