use of net.jcip.annotations.GuardedBy in project atlasdb by palantir.
the class PersistentLockManagerTest method cannotAcquireAfterReleaseSeemsToFailButSecretlySucceedsAndThenSomeoneElseTakesTheLock.
@Test
@GuardedBy("manager")
public void cannotAcquireAfterReleaseSeemsToFailButSecretlySucceedsAndThenSomeoneElseTakesTheLock() {
doThrow(RuntimeException.class).when(mockPls).releaseBackupLock(any());
manager.acquirePersistentLockWithRetry();
try {
manager.releasePersistentLock();
} catch (RuntimeException e) {
// Expected
}
LockEntry usurper = ImmutableLockEntry.builder().lockName("BackupLock").instanceId(UUID.randomUUID()).reason("backup").build();
CheckAndSetException casException = new CheckAndSetException(Cell.create(PtBytes.toBytes("unu"), PtBytes.toBytes("sed")), TableReference.createFromFullyQualifiedName("unu.sed"), PtBytes.toBytes("unused"), ImmutableList.of(usurper.value()));
when(mockPls.acquireBackupLock(anyString())).thenThrow(casException);
// We call the non-retrying version here, because we:
// (a) don't want the test to hang
// (b) want to verify that we adjusted our view of the lockId.
manager.tryAcquirePersistentLock();
verify(mockPls, times(2)).acquireBackupLock("Sweep");
assertNull(manager.lockId);
}
Aggregations