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**

(cherry picked from commit 8198ff1)
This commit is contained in:
Vedran Pavic
2016-12-01 04:35:52 -05:00
committed by Artem Bilan
parent 9078a74a19
commit 0b22f4ee58

View File

@@ -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
}