use of com.palantir.atlasdb.timelock.api.DisableNamespacesResponse in project atlasdb by palantir.
the class AllNodesDisabledNamespacesUpdaterTest method rollsBackDisabledNamespacesAfterPartialFailure.
// Case A: start with no disabled namespaces; disable fails on some node; we should re-enable all
@Test
public void rollsBackDisabledNamespacesAfterPartialFailure() {
Set<Namespace> failedNamespaces = ImmutableSet.of(OTHER_NAMESPACE);
when(remote1.disable(any(), any())).thenReturn(SUCCESSFUL_SINGLE_NODE_UPDATE);
when(remote2.disable(any(), any())).thenReturn(singleNodeUpdateFailure(failedNamespaces));
when(remote1.reenable(any(), any())).thenReturn(SUCCESSFUL_SINGLE_NODE_UPDATE);
when(localUpdater.getNamespacesLockedWithDifferentLockId(any(), any())).thenReturn(ImmutableMap.of());
DisableNamespacesResponse response = updater.disableOnAllNodes(AUTH_HEADER, disableNamespacesRequest(BOTH_NAMESPACES));
ReenableNamespacesRequest rollbackRequest = ReenableNamespacesRequest.of(BOTH_NAMESPACES, LOCK_ID);
verify(remote1).reenable(AUTH_HEADER, rollbackRequest);
verify(remote2, never()).reenable(AUTH_HEADER, rollbackRequest);
verify(localUpdater, never()).disable(any());
assertThat(response).isEqualTo(partiallyDisabled(BOTH_NAMESPACES));
}
use of com.palantir.atlasdb.timelock.api.DisableNamespacesResponse in project atlasdb by palantir.
the class AllNodesDisabledNamespacesUpdaterTest method reportsRollbackFailures.
@Test
public void reportsRollbackFailures() {
Set<Namespace> failedNamespaces = ImmutableSet.of(OTHER_NAMESPACE);
when(remote1.disable(any(), any())).thenReturn(SUCCESSFUL_SINGLE_NODE_UPDATE);
when(remote2.disable(any(), any())).thenReturn(singleNodeUpdateFailure(failedNamespaces));
when(localUpdater.getNamespacesLockedWithDifferentLockId(any(), any())).thenReturn(ImmutableMap.of());
when(remote1.reenable(any(), any())).thenReturn(singleNodeUpdateFailure(failedNamespaces));
DisableNamespacesResponse response = updater.disableOnAllNodes(AUTH_HEADER, disableNamespacesRequest(BOTH_NAMESPACES));
verify(remote1).reenable(any(), any());
verify(remote2, never()).reenable(any(), any());
verify(localUpdater).getNamespacesLockedWithDifferentLockId(any(), any());
verifyNoMoreInteractions(localUpdater);
assertThat(response).isEqualTo(partiallyDisabled(failedNamespaces));
}
use of com.palantir.atlasdb.timelock.api.DisableNamespacesResponse in project atlasdb by palantir.
the class AllNodesDisabledNamespacesUpdaterTest method handlesNodesBecomingUnreachableDuringDisable.
@Test
public void handlesNodesBecomingUnreachableDuringDisable() {
when(remote1.disable(any(), any())).thenReturn(SUCCESSFUL_SINGLE_NODE_UPDATE);
when(remote1.reenable(any(), any())).thenReturn(SUCCESSFUL_SINGLE_NODE_UPDATE);
when(remote2.disable(any(), any())).thenThrow(new SafeRuntimeException("unreachable"));
when(remote2.reenable(any(), any())).thenThrow(new SafeRuntimeException("unreachable"));
when(localUpdater.getNamespacesLockedWithDifferentLockId(any(), any())).thenReturn(ImmutableMap.of());
DisableNamespacesResponse response = updater.disableOnAllNodes(AUTH_HEADER, disableNamespacesRequest(BOTH_NAMESPACES));
// We don't know if the request succeeded or failed on remote2, so we should try our best to roll back
verify(remote2).reenable(any(), any());
verify(remote1).reenable(any(), any());
// No known bad namespaces
assertThat(response).isEqualTo(DISABLE_FAILED_SUCCESSFULLY);
}
use of com.palantir.atlasdb.timelock.api.DisableNamespacesResponse in project atlasdb by palantir.
the class AtlasRestoreServiceTest method restoresToNewAtlasServiceCorrectly.
@Test
public void restoresToNewAtlasServiceCorrectly() {
RestoreRequest restoreRequest = RestoreRequest.builder().oldAtlasService(WITH_BACKUP).newAtlasService(NO_BACKUP).build();
// prepare
DisableNamespacesResponse successfulDisable = DisableNamespacesResponse.successful(SuccessfulDisableNamespacesResponse.of(BACKUP_ID));
DisableNamespacesRequest request = DisableNamespacesRequest.of(ImmutableSet.of(NO_BACKUP_NS), BACKUP_ID);
when(timeLockManagementService.disableTimelock(authHeader, request)).thenReturn(successfulDisable);
Set<AtlasService> disabledAtlasServices = atlasRestoreService.prepareRestore(ImmutableSet.of(restoreRequest), BACKUP_ID);
assertThat(disabledAtlasServices).containsExactly(NO_BACKUP);
// repair
BiConsumer<String, RangesForRepair> doNothingConsumer = (_unused1, _unused2) -> {
};
Set<AtlasService> repairedAtlasServices = atlasRestoreService.repairInternalTables(ImmutableSet.of(restoreRequest), doNothingConsumer);
assertThat(repairedAtlasServices).containsExactly(NO_BACKUP);
verify(cassandraRepairHelper).repairInternalTables(NO_BACKUP, doNothingConsumer);
verify(cassandraRepairHelper).repairTransactionsTables(eq(NO_BACKUP), anyList(), eq(doNothingConsumer));
verify(cassandraRepairHelper).cleanTransactionsTables(eq(NO_BACKUP), eq(BACKUP_START_TIMESTAMP), anyList());
verifyNoMoreInteractions(cassandraRepairHelper);
// complete
CompletedBackup completedBackup = backupPersister.getCompletedBackup(WITH_BACKUP).orElseThrow();
CompleteRestoreRequest completeRestoreRequest = CompleteRestoreRequest.of(ImmutableMap.of(NO_BACKUP_NS, completedBackup));
when(atlasRestoreClient.completeRestore(authHeader, completeRestoreRequest)).thenReturn(CompleteRestoreResponse.of(ImmutableSet.of(NO_BACKUP_NS)));
ReenableNamespacesRequest reenableRequest = ReenableNamespacesRequest.of(ImmutableSet.of(NO_BACKUP_NS), BACKUP_ID);
Set<AtlasService> completedAtlasServices = atlasRestoreService.completeRestore(ImmutableSet.of(restoreRequest), BACKUP_ID);
assertThat(completedAtlasServices).containsExactly(NO_BACKUP);
verify(atlasRestoreClient).completeRestore(authHeader, completeRestoreRequest);
verify(timeLockManagementService).reenableTimelock(authHeader, reenableRequest);
}
use of com.palantir.atlasdb.timelock.api.DisableNamespacesResponse in project atlasdb by palantir.
the class AtlasRestoreServiceTest method prepareRestoreFailsIfDisableFails.
@Test
public void prepareRestoreFailsIfDisableFails() {
DisableNamespacesResponse failedDisable = DisableNamespacesResponse.unsuccessful(UnsuccessfulDisableNamespacesResponse.of(ImmutableSet.of(WITH_BACKUP_NS), ImmutableSet.of()));
DisableNamespacesRequest request = DisableNamespacesRequest.of(ImmutableSet.of(WITH_BACKUP_NS), BACKUP_ID);
when(timeLockManagementService.disableTimelock(authHeader, request)).thenReturn(failedDisable);
Set<AtlasService> disabledAtlasServices = atlasRestoreService.prepareRestore(ImmutableSet.of(restoreRequest(WITH_BACKUP), restoreRequest(NO_BACKUP)), BACKUP_ID);
assertThat(disabledAtlasServices).isEmpty();
}
Aggregations