From b4d9831d9522059f51d35811d1ec6c4932c5e767 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Tue, 16 Jun 2020 12:27:40 -0400 Subject: [PATCH] GH-3307: Retry TransTimedEx in LockRepo.acquire Fixes https://github.com/spring-projects/spring-integration/issues/3307 The `DefaultLockRepository.acquire()` is transactional method and can fail with the `TransactionTimedOutException`. When we call `JdbcLock.lock()`, we expect an attempt until we really obtain a lock. * Treat a `TransactionTimedOutException` as a `TransientDataAccessException` and therefore retry a locking attempt logic **Cherry-pick to 5.3.x, 5.2.x & 4.3.x** (cherry picked from commit b0cd0156c7e7d81d87c6a94201a8172441220464) # Conflicts: # spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/lock/JdbcLockRegistry.java --- .../integration/jdbc/lock/JdbcLockRegistry.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/lock/JdbcLockRegistry.java b/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/lock/JdbcLockRegistry.java index 1b2c1296c5..5277e0b8fb 100644 --- a/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/lock/JdbcLockRegistry.java +++ b/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/lock/JdbcLockRegistry.java @@ -127,6 +127,9 @@ public class JdbcLockRegistry implements ExpirableLockRegistry { catch (TransientDataAccessException e) { // try again } + catch (TransactionTimedOutException e) { + // try again + } catch (InterruptedException e) { /* * This method must be uninterruptible so catch and ignore