From 530b2a310f2b3a71578d8a0029c2450d92ca9e31 Mon Sep 17 00:00:00 2001 From: Chris Eager Date: Thu, 1 Jul 2021 12:43:17 -0500 Subject: [PATCH] Ensure active future is always completed --- .../storage/ManagedPeriodicWork.java | 7 +++++-- .../storage/ManagedPeriodicWorkTest.java | 18 +++++++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/ManagedPeriodicWork.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/ManagedPeriodicWork.java index db1863b81..9f82db964 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/ManagedPeriodicWork.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/ManagedPeriodicWork.java @@ -107,8 +107,11 @@ public abstract class ManagedPeriodicWork implements Managed { Util.sleep(sleepDurationAfterUnexpectedException.toMillis()); } finally { - lock.releaseActiveWork(workerId); - activeExecutionFuture.get().complete(null); + try { + lock.releaseActiveWork(workerId); + } finally { + activeExecutionFuture.get().complete(null); + } } } } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/ManagedPeriodicWorkTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/ManagedPeriodicWorkTest.java index 3749ee0cb..21d1cf8be 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/ManagedPeriodicWorkTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/ManagedPeriodicWorkTest.java @@ -9,8 +9,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -58,10 +58,10 @@ class ManagedPeriodicWorkTest { testWork.stop(); - verify(lock, times(1)).claimActiveWork(anyString(), any(Duration.class)); - verify(lock, times(1)).releaseActiveWork(anyString()); + verify(lock, atLeastOnce()).claimActiveWork(anyString(), any(Duration.class)); + verify(lock, atLeastOnce()).releaseActiveWork(anyString()); - assertEquals(1, testWork.getCount()); + assertTrue(1 <= testWork.getCount()); } @Test @@ -85,10 +85,10 @@ class ManagedPeriodicWorkTest { assertTrue(runMillis > 500); - verify(lock, times(1)).claimActiveWork(anyString(), any(Duration.class)); - verify(lock, times(1)).releaseActiveWork(anyString()); + verify(lock, atLeastOnce()).claimActiveWork(anyString(), any(Duration.class)); + verify(lock, atLeastOnce()).releaseActiveWork(anyString()); - assertEquals(1, testWork.getCount()); + assertTrue(1 <= testWork.getCount()); } @Test @@ -107,8 +107,8 @@ class ManagedPeriodicWorkTest { testWork.stop(); - verify(lock, times(1)).claimActiveWork(anyString(), any(Duration.class)); - verify(lock, times(1)).releaseActiveWork(anyString()); + verify(lock, atLeastOnce()).claimActiveWork(anyString(), any(Duration.class)); + verify(lock, atLeastOnce()).releaseActiveWork(anyString()); assertEquals(0, testWork.getCount()); }