Search in sources :

Example 1 with GuardedBy

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);
}
Also used : LockEntry(com.palantir.atlasdb.persistentlock.LockEntry) ImmutableLockEntry(com.palantir.atlasdb.persistentlock.ImmutableLockEntry) CheckAndSetException(com.palantir.atlasdb.keyvalue.api.CheckAndSetException) GuardedBy(net.jcip.annotations.GuardedBy) Test(org.junit.Test)

Aggregations

CheckAndSetException (com.palantir.atlasdb.keyvalue.api.CheckAndSetException)1 ImmutableLockEntry (com.palantir.atlasdb.persistentlock.ImmutableLockEntry)1 LockEntry (com.palantir.atlasdb.persistentlock.LockEntry)1 GuardedBy (net.jcip.annotations.GuardedBy)1 Test (org.junit.Test)1