mirror of
https://github.com/google/nomulus
synced 2026-10-01 12:16:02 +00:00
Bump the number of retries in transaction failures and add skew (#2699)
This can potentially help even more with serializable transaction failures (optimistic locking exceptions, which are expected to occur somewhat frequently). With six attempts, we will sleep at most five times, for 100+200+400+800+1600 ms each, for a total of at most 3.1 seconds (much less than the EPP maximum which I believe (?) to be 30 seconds. In addition, we add a 20% skew in an attempt to spread out possibly-conflicting transaction retries.
This commit is contained in:
+7
-7
@@ -293,11 +293,11 @@ class JpaTransactionManagerImplTest {
|
||||
assertThrows(
|
||||
OptimisticLockException.class,
|
||||
() -> spyJpaTm.transact(() -> spyJpaTm.delete(theEntityKey)));
|
||||
verify(spyJpaTm, times(3)).delete(theEntityKey);
|
||||
verify(spyJpaTm, times(6)).delete(theEntityKey);
|
||||
assertThrows(
|
||||
OptimisticLockException.class,
|
||||
() -> spyJpaTm.transact(() -> spyJpaTm.delete(theEntityKey)));
|
||||
verify(spyJpaTm, times(6)).delete(theEntityKey);
|
||||
verify(spyJpaTm, times(12)).delete(theEntityKey);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -355,10 +355,10 @@ class JpaTransactionManagerImplTest {
|
||||
spyJpaTm.transact(() -> spyJpaTm.insert(theEntity));
|
||||
assertThrows(
|
||||
RuntimeException.class, () -> spyJpaTm.transact(() -> spyJpaTm.delete(theEntityKey)));
|
||||
verify(spyJpaTm, times(3)).delete(theEntityKey);
|
||||
verify(spyJpaTm, times(6)).delete(theEntityKey);
|
||||
assertThrows(
|
||||
RuntimeException.class, () -> spyJpaTm.transact(() -> spyJpaTm.delete(theEntityKey)));
|
||||
verify(spyJpaTm, times(6)).delete(theEntityKey);
|
||||
verify(spyJpaTm, times(12)).delete(theEntityKey);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -759,11 +759,11 @@ class JpaTransactionManagerImplTest {
|
||||
spyJpaTm.transact(
|
||||
() -> {
|
||||
spyJpaTm.exists(theEntity);
|
||||
spyJpaTm.transact(() -> spyJpaTm.delete(theEntityKey));
|
||||
spyJpaTm.delete(theEntityKey);
|
||||
}));
|
||||
|
||||
verify(spyJpaTm, times(3)).exists(theEntity);
|
||||
verify(spyJpaTm, times(3)).delete(theEntityKey);
|
||||
verify(spyJpaTm, times(6)).exists(theEntity);
|
||||
verify(spyJpaTm, times(6)).delete(theEntityKey);
|
||||
}
|
||||
|
||||
private static void insertPerson(int age) {
|
||||
|
||||
Reference in New Issue
Block a user