Ensure active future is always completed

This commit is contained in:
Chris Eager 2021-07-01 12:43:17 -05:00 committed by Chris Eager
parent d5b0d99a54
commit 530b2a310f
2 changed files with 14 additions and 11 deletions

View File

@ -107,8 +107,11 @@ public abstract class ManagedPeriodicWork implements Managed {
Util.sleep(sleepDurationAfterUnexpectedException.toMillis()); Util.sleep(sleepDurationAfterUnexpectedException.toMillis());
} finally { } finally {
lock.releaseActiveWork(workerId); try {
activeExecutionFuture.get().complete(null); lock.releaseActiveWork(workerId);
} finally {
activeExecutionFuture.get().complete(null);
}
} }
} }
} }

View File

@ -9,8 +9,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@ -58,10 +58,10 @@ class ManagedPeriodicWorkTest {
testWork.stop(); testWork.stop();
verify(lock, times(1)).claimActiveWork(anyString(), any(Duration.class)); verify(lock, atLeastOnce()).claimActiveWork(anyString(), any(Duration.class));
verify(lock, times(1)).releaseActiveWork(anyString()); verify(lock, atLeastOnce()).releaseActiveWork(anyString());
assertEquals(1, testWork.getCount()); assertTrue(1 <= testWork.getCount());
} }
@Test @Test
@ -85,10 +85,10 @@ class ManagedPeriodicWorkTest {
assertTrue(runMillis > 500); assertTrue(runMillis > 500);
verify(lock, times(1)).claimActiveWork(anyString(), any(Duration.class)); verify(lock, atLeastOnce()).claimActiveWork(anyString(), any(Duration.class));
verify(lock, times(1)).releaseActiveWork(anyString()); verify(lock, atLeastOnce()).releaseActiveWork(anyString());
assertEquals(1, testWork.getCount()); assertTrue(1 <= testWork.getCount());
} }
@Test @Test
@ -107,8 +107,8 @@ class ManagedPeriodicWorkTest {
testWork.stop(); testWork.stop();
verify(lock, times(1)).claimActiveWork(anyString(), any(Duration.class)); verify(lock, atLeastOnce()).claimActiveWork(anyString(), any(Duration.class));
verify(lock, times(1)).releaseActiveWork(anyString()); verify(lock, atLeastOnce()).releaseActiveWork(anyString());
assertEquals(0, testWork.getCount()); assertEquals(0, testWork.getCount());
} }