From 8198ff18615df6161a621d54544af2ebd906692c Mon Sep 17 00:00:00 2001 From: Vedran Pavic Date: Thu, 1 Dec 2016 10:35:52 +0100 Subject: [PATCH] INT-4178: Retry `CannotSerializeTransactionException` in `JdbcLockRegistry` JIRA: https://jira.spring.io/browse/INT-4178 The `JdbcLockRegistry` does not retry `CannotSerializeTransactionException` thrown by `DefaultLockRepository.acquire` which in turn causes `LockRegistryLeaderInitiator`s thread to get stuck. * catch `CannotSerializeTransactionException` on `DefaultLockRepository.acquire` and ignore it to ensure a retry **Cherry-pick to 4.3.x** --- .../integration/jdbc/lock/JdbcLockRegistry.java | 12 ++++++++++++ 1 file changed, 12 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 c66ebab9b4..8404a710ab 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 @@ -26,6 +26,7 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import org.springframework.dao.CannotAcquireLockException; +import org.springframework.dao.CannotSerializeTransactionException; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.integration.support.locks.DefaultLockRegistry; import org.springframework.integration.support.locks.ExpirableLockRegistry; @@ -43,6 +44,8 @@ import org.springframework.util.Assert; * * @author Dave Syer * @author Artem Bilan + * @author Vedran Pavić + * * @since 4.3 */ public class JdbcLockRegistry implements ExpirableLockRegistry { @@ -120,6 +123,9 @@ public class JdbcLockRegistry implements ExpirableLockRegistry { } break; } + catch (CannotSerializeTransactionException e) { + // try again + } catch (TransactionTimedOutException e) { // try again } @@ -154,6 +160,9 @@ public class JdbcLockRegistry implements ExpirableLockRegistry { } break; } + catch (CannotSerializeTransactionException e) { + // try again + } catch (TransactionTimedOutException e) { // try again } @@ -198,6 +207,9 @@ public class JdbcLockRegistry implements ExpirableLockRegistry { } return acquired; } + catch (CannotSerializeTransactionException e) { + // try again + } catch (TransactionTimedOutException e) { // try again }