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());
} finally {
lock.releaseActiveWork(workerId);
activeExecutionFuture.get().complete(null);
try {
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.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());
}