use of com.palantir.atlasdb.timelock.api.Namespace in project atlasdb by palantir.
the class AtlasBackupServiceTest method completeBackupReturnsSuccessfulNamespaces.
@Test
public void completeBackupReturnsSuccessfulNamespaces() {
InProgressBackupToken otherInProgress = inProgressBackupToken(OTHER_NAMESPACE);
Set<Namespace> namespaces = ImmutableSet.of(NAMESPACE, OTHER_NAMESPACE);
when(atlasBackupClient.prepareBackup(authHeader, PrepareBackupRequest.of(namespaces))).thenReturn(PrepareBackupResponse.of(ImmutableSet.of(IN_PROGRESS, otherInProgress)));
when(atlasBackupClient.completeBackup(authHeader, CompleteBackupRequest.of(ImmutableSet.of(IN_PROGRESS, otherInProgress)))).thenReturn(CompleteBackupResponse.of(ImmutableSet.of(completedBackup())));
atlasBackupService.prepareBackup(namespaces);
assertThat(atlasBackupService.completeBackup(namespaces)).containsExactly(NAMESPACE);
}
use of com.palantir.atlasdb.timelock.api.Namespace in project atlasdb by palantir.
the class MultiClientTransactionStarterTest method shouldNotFreeResourcesWithinNamespaceIfRequestIsServed.
@Test
public void shouldNotFreeResourcesWithinNamespaceIfRequestIsServed() {
Namespace omega = Namespace.of("omega" + UUID.randomUUID());
BatchElement<NamespaceAndRequestParams, List<StartIdentifiedAtlasDbTransactionResponse>> requestForOmega = batchElementForNamespace(omega, PARTITIONED_TIMESTAMPS_LIMIT_PER_SERVER_CALL - 1);
BatchElement<NamespaceAndRequestParams, List<StartIdentifiedAtlasDbTransactionResponse>> secondRequestForOmega = batchElementForNamespace(omega, 2);
UUID requestorId = UUID.randomUUID();
List<BatchElement<NamespaceAndRequestParams, List<StartIdentifiedAtlasDbTransactionResponse>>> requests = ImmutableList.of(requestForOmega, secondRequestForOmega);
Map<Namespace, ConjureStartTransactionsResponse> responseMap = startTransactionsResponse(requests, requestorId);
when(timelockService.startTransactions(any())).thenReturn(responseMap).thenThrow(EXCEPTION);
assertThatThrownBy(() -> processBatch(timelockService, requestorId, requests)).isEqualTo(EXCEPTION);
// assert the first request made by client omega is served
assertSanityOfRequestBatch(ImmutableList.of(requestForOmega), ImmutableMap.of(omega, ImmutableList.of(responseMap.get(omega))));
@SuppressWarnings({ "unchecked", "rawtypes" }) ArgumentCaptor<Set<LockToken>> refreshArgumentCaptor = (ArgumentCaptor<Set<LockToken>>) ArgumentCaptor.forClass((Class) Set.class);
verify(LOCK_CLEANUP_SERVICE_MAP.get(omega)).refreshLockLeases(refreshArgumentCaptor.capture());
verify(LOCK_CLEANUP_SERVICE_MAP.get(omega)).unlock(eq(Collections.emptySet()));
verify(NAMESPACE_CACHE_MAP.get(omega)).removeTransactionStateFromCache(anyLong());
Set<LockToken> refreshedTokens = refreshArgumentCaptor.getValue();
LockToken tokenShare = Futures.getUnchecked(requestForOmega.result()).get(0).immutableTimestamp().getLock();
assertThat(tokenShare).isInstanceOf(LockTokenShare.class).satisfies(token -> {
LockTokenShare share = ((LockTokenShare) token);
assertThat(share.sharedLockToken()).isIn(refreshedTokens);
});
}
use of com.palantir.atlasdb.timelock.api.Namespace in project atlasdb by palantir.
the class MultiClientTransactionStarterTest method setupServiceAndAssertSanity.
private void setupServiceAndAssertSanity(List<BatchElement<NamespaceAndRequestParams, List<StartIdentifiedAtlasDbTransactionResponse>>> requestsForClients) {
UUID requestorId = UUID.randomUUID();
Map<Namespace, List<ConjureStartTransactionsResponse>> responseMap = new HashMap<>();
when(timelockService.startTransactions(any())).thenAnswer(invocation -> {
Map<Namespace, ConjureStartTransactionsResponse> responses = startTransactions(invocation.getArgument(0), getLowestTs());
responses.forEach((namespace, response) -> responseMap.computeIfAbsent(namespace, _u -> new ArrayList<>()).add(response));
return responses;
});
processBatch(timelockService, requestorId, requestsForClients);
// assertions on responses
assertSanityOfRequestBatch(requestsForClients, responseMap);
}
use of com.palantir.atlasdb.timelock.api.Namespace in project atlasdb by palantir.
the class MultiClientTransactionStarterTest method assertSanityOfRequestBatch.
private void assertSanityOfRequestBatch(List<BatchElement<NamespaceAndRequestParams, List<StartIdentifiedAtlasDbTransactionResponse>>> requestsForClients, Map<Namespace, List<ConjureStartTransactionsResponse>> responseMap) {
assertCompletedWithCorrectNumberOfTransactions(requestsForClients);
Map<Namespace, List<BatchElement<NamespaceAndRequestParams, List<StartIdentifiedAtlasDbTransactionResponse>>>> partitionedResponses = requestsForClients.stream().collect(Collectors.groupingBy(e -> e.argument().namespace()));
responseMap.forEach((namespace, responses) -> {
int startInd = 0;
List<StartIdentifiedAtlasDbTransactionResponse> startedTransactions = partitionedResponses.get(namespace).stream().map(response -> Futures.getUnchecked(response.result())).flatMap(Collection::stream).collect(Collectors.toList());
for (ConjureStartTransactionsResponse conjureResponse : responses) {
int toIndex = Math.min(startInd + conjureResponse.getTimestamps().count(), startedTransactions.size());
List<StartIdentifiedAtlasDbTransactionResponse> responseList = startedTransactions.subList(startInd, toIndex);
startInd = toIndex;
assertThat(responseList).satisfies(StartTransactionsTestUtils::assertThatStartTransactionResponsesAreUnique).allSatisfy(startTxnResponse -> StartTransactionsTestUtils.assertDerivableFromBatchedResponse(startTxnResponse, conjureResponse));
}
});
}
use of com.palantir.atlasdb.timelock.api.Namespace in project atlasdb by palantir.
the class MultiClientTransactionStarterTest method updatesCacheWhileProcessingResponse.
@Test
public void updatesCacheWhileProcessingResponse() {
Namespace namespace = Namespace.of("Test" + UUID.randomUUID());
setupServiceAndAssertSanity(ImmutableList.of(batchElementForNamespace(namespace, PARTITIONED_TIMESTAMPS_LIMIT_PER_SERVER_CALL - 1)));
verify(getCache(namespace)).processStartTransactionsUpdate(any(), any());
}
Aggregations