Search in sources :

Example 16 with Client

use of com.palantir.paxos.Client in project atlasdb by palantir.

the class PaxosTimestampBoundStoreTest method setUp.

@Before
public void setUp() {
    List<PaxosAcceptor> acceptors = new ArrayList<>();
    List<BatchPaxosAcceptor> batchPaxosAcceptors = new ArrayList<>();
    List<BatchPaxosLearner> batchPaxosLearners = new ArrayList<>();
    for (int i = 0; i < NUM_NODES; i++) {
        String root = temporaryFolder.getRoot().getAbsolutePath();
        LocalPaxosComponents components = LocalPaxosComponents.createWithAsyncMigration(TimelockPaxosMetrics.of(PaxosUseCase.TIMESTAMP, MetricsManagers.createForTests()), PaxosUseCase.TIMESTAMP, Paths.get(root, i + "legacy"), SqliteConnections.getDefaultConfiguredPooledDataSource(Paths.get(root, i + "sqlite")), UUID.randomUUID(), true, OrderableSlsVersion.valueOf("0.0.0"), false);
        AtomicBoolean failureController = new AtomicBoolean(false);
        failureToggles.add(failureController);
        learners.add(ToggleableExceptionProxy.newProxyInstance(PaxosLearner.class, components.learner(CLIENT), failureController, EXCEPTION));
        acceptors.add(ToggleableExceptionProxy.newProxyInstance(PaxosAcceptor.class, components.acceptor(CLIENT), failureController, EXCEPTION));
        BatchPaxosAcceptor batchAcceptor = new LocalBatchPaxosAcceptor(components, new AcceptorCacheImpl());
        batchPaxosAcceptors.add(ToggleableExceptionProxy.newProxyInstance(BatchPaxosAcceptor.class, batchAcceptor, failureController, EXCEPTION));
        BatchPaxosLearner batchLearner = new LocalBatchPaxosLearner(components);
        batchPaxosLearners.add(ToggleableExceptionProxy.newProxyInstance(BatchPaxosLearner.class, batchLearner, failureController, EXCEPTION));
    }
    if (useBatch) {
        AutobatchingPaxosAcceptorNetworkClientFactory acceptorNetworkClientFactory = AutobatchingPaxosAcceptorNetworkClientFactory.create(batchPaxosAcceptors, KeyedStream.of(batchPaxosAcceptors.stream()).map($ -> new CheckedRejectionExecutorService(executor)).collectToMap(), QUORUM_SIZE);
        acceptorClient = acceptorNetworkClientFactory.paxosAcceptorForClient(CLIENT);
        List<AutobatchingPaxosLearnerNetworkClientFactory> learnerNetworkClientFactories = batchPaxosLearners.stream().map(localLearner -> LocalAndRemotes.of(localLearner, batchPaxosLearners.stream().filter(remoteLearners -> remoteLearners != localLearner).collect(toList()))).map(localAndRemotes -> AutobatchingPaxosLearnerNetworkClientFactory.createForTests(localAndRemotes, executor, QUORUM_SIZE)).collect(toList());
        learnerClientsByNode = learnerNetworkClientFactories.stream().map(factory -> factory.paxosLearnerForClient(CLIENT)).collect(toList());
        closer.register(acceptorNetworkClientFactory);
        learnerNetworkClientFactories.forEach(closer::register);
    } else {
        acceptorClient = SingleLeaderAcceptorNetworkClient.createLegacy(acceptors, QUORUM_SIZE, Maps.toMap(acceptors, $ -> executor), PaxosConstants.CANCEL_REMAINING_CALLS);
        learnerClientsByNode = learners.stream().map(learner -> SingleLeaderLearnerNetworkClient.createLegacy(learner, learners.stream().filter(otherLearners -> otherLearners != learner).collect(toList()), QUORUM_SIZE, Maps.toMap(learners, $ -> executor), PaxosConstants.CANCEL_REMAINING_CALLS)).collect(toList());
    }
    store = createPaxosTimestampBoundStore(0);
}
Also used : ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) ArgumentMatchers.anyLong(org.mockito.ArgumentMatchers.anyLong) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) ToggleableExceptionProxy(com.palantir.leader.proxy.ToggleableExceptionProxy) RunWith(org.junit.runner.RunWith) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) PaxosLearner(com.palantir.paxos.PaxosLearner) Mockito.spy(org.mockito.Mockito.spy) PaxosLearnerNetworkClient(com.palantir.paxos.PaxosLearnerNetworkClient) ArrayList(java.util.ArrayList) Assertions.assertThatThrownBy(org.assertj.core.api.Assertions.assertThatThrownBy) ImmutableList(com.google.common.collect.ImmutableList) PTExecutors(com.palantir.common.concurrent.PTExecutors) Closer(com.google.common.io.Closer) After(org.junit.After) PaxosAcceptor(com.palantir.paxos.PaxosAcceptor) ServiceNotAvailableException(com.palantir.common.remoting.ServiceNotAvailableException) SqliteConnections(com.palantir.paxos.SqliteConnections) SingleLeaderLearnerNetworkClient(com.palantir.paxos.SingleLeaderLearnerNetworkClient) PaxosProposerImpl(com.palantir.paxos.PaxosProposerImpl) ExecutorService(java.util.concurrent.ExecutorService) Nullable(javax.annotation.Nullable) Parameterized(org.junit.runners.Parameterized) NotCurrentLeaderException(com.palantir.leader.NotCurrentLeaderException) PaxosRoundFailureException(com.palantir.paxos.PaxosRoundFailureException) Before(org.junit.Before) OrderableSlsVersion(com.palantir.sls.versions.OrderableSlsVersion) KeyedStream(com.palantir.common.streams.KeyedStream) CheckedRejectionExecutorService(com.palantir.common.concurrent.CheckedRejectionExecutorService) Mockito.times(org.mockito.Mockito.times) IOException(java.io.IOException) Test(org.junit.Test) UUID(java.util.UUID) Maps(com.google.common.collect.Maps) SingleLeaderAcceptorNetworkClient(com.palantir.paxos.SingleLeaderAcceptorNetworkClient) Mockito.verify(org.mockito.Mockito.verify) MetricsManagers(com.palantir.atlasdb.util.MetricsManagers) TimeUnit(java.util.concurrent.TimeUnit) Collectors.toList(java.util.stream.Collectors.toList) PaxosProposer(com.palantir.paxos.PaxosProposer) List(java.util.List) Rule(org.junit.Rule) PaxosAcceptorNetworkClient(com.palantir.paxos.PaxosAcceptorNetworkClient) Paths(java.nio.file.Paths) Client(com.palantir.paxos.Client) PaxosConstants(com.palantir.paxos.PaxosConstants) TemporaryFolder(org.junit.rules.TemporaryFolder) PaxosAcceptor(com.palantir.paxos.PaxosAcceptor) CheckedRejectionExecutorService(com.palantir.common.concurrent.CheckedRejectionExecutorService) ArrayList(java.util.ArrayList) PaxosLearner(com.palantir.paxos.PaxosLearner) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Before(org.junit.Before)

Example 17 with Client

use of com.palantir.paxos.Client in project atlasdb by palantir.

the class AcceptCoalescingFunctionTests method canProcessBatch.

@Test
public void canProcessBatch() {
    PaxosProposal client1seq1Proposal = proposal(1);
    PaxosProposal client1seq2Proposal = proposal(2);
    PaxosProposal client2seq1Proposal = proposal(1);
    SetMultimap<Client, PaxosProposal> requests = ImmutableSetMultimap.<Client, PaxosProposal>builder().put(CLIENT_1, client1seq1Proposal).put(CLIENT_1, client1seq2Proposal).put(CLIENT_2, client2seq1Proposal).build();
    SetMultimap<Client, WithSeq<BooleanPaxosResponse>> remoteResponse = ImmutableSetMultimap.<Client, WithSeq<BooleanPaxosResponse>>builder().put(CLIENT_1, success(client1seq1Proposal)).put(CLIENT_1, failure(client1seq2Proposal)).put(CLIENT_2, success(client2seq1Proposal)).build();
    when(remote.accept(requests)).thenReturn(remoteResponse);
    AcceptCoalescingFunction function = new AcceptCoalescingFunction(remote);
    Map<Map.Entry<Client, PaxosProposal>, BooleanPaxosResponse> result = ImmutableMap.copyOf(function.apply(requests.entries()));
    assertContains(result, CLIENT_1, client1seq1Proposal, success(client1seq1Proposal).value());
    assertContains(result, CLIENT_1, client1seq2Proposal, failure(client1seq2Proposal).value());
    assertContains(result, CLIENT_2, client2seq1Proposal, success(client2seq1Proposal).value());
}
Also used : PaxosProposal(com.palantir.paxos.PaxosProposal) BooleanPaxosResponse(com.palantir.paxos.BooleanPaxosResponse) Client(com.palantir.paxos.Client) Test(org.junit.Test)

Example 18 with Client

use of com.palantir.paxos.Client in project atlasdb by palantir.

the class BatchPingableLeaderResourceTests method pingFiltersOutNonLeaders.

@Test
public void pingFiltersOutNonLeaders() {
    Client clientLedByAnotherServer = Client.of("client-led-by-another-server");
    when(components.learner(CLIENT_1).getGreatestLearnedValue()).thenReturn(paxosValue(LEADER_UUID));
    when(components.learner(clientLedByAnotherServer).getGreatestLearnedValue()).thenReturn(paxosValue(UUID.randomUUID()));
    assertThat(resource.ping(ImmutableSet.of(CLIENT_1, clientLedByAnotherServer))).containsOnly(CLIENT_1);
}
Also used : Client(com.palantir.paxos.Client) Test(org.junit.Test)

Example 19 with Client

use of com.palantir.paxos.Client in project atlasdb by palantir.

the class LearnCoalescingConsumerTests method canProcessBatch.

@Test
public void canProcessBatch() {
    PaxosValue paxosValue1 = paxosValue(10);
    PaxosValue paxosValue2 = paxosValue(14);
    LearnCoalescingConsumer consumer = new LearnCoalescingConsumer(WithDedicatedExecutor.of(local, executor), ImmutableList.of(WithDedicatedExecutor.of(remote, executor)));
    consumer.apply(ImmutableSet.of(entry(CLIENT_1, paxosValue1), entry(CLIENT_1, paxosValue2), entry(CLIENT_2, paxosValue1)));
    SetMultimap<Client, PaxosValue> remoteRequest = ImmutableSetMultimap.<Client, PaxosValue>builder().putAll(CLIENT_1, paxosValue1, paxosValue2).put(CLIENT_2, paxosValue1).build();
    verify(local).learn(remoteRequest);
    // since remote requests are fired off and we don't wait for responses, we have to verify that they're called,
    // *eventually*
    await().atMost(Duration.ofSeconds(5)).untilAsserted(() -> verify(remote).learn(remoteRequest));
}
Also used : Client(com.palantir.paxos.Client) PaxosValue(com.palantir.paxos.PaxosValue) Test(org.junit.Test)

Aggregations

Client (com.palantir.paxos.Client)19 Test (org.junit.Test)14 PaxosValue (com.palantir.paxos.PaxosValue)8 PaxosLearner (com.palantir.paxos.PaxosLearner)2 PaxosProposal (com.palantir.paxos.PaxosProposal)2 PaxosProposer (com.palantir.paxos.PaxosProposer)2 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)2 ImmutableList (com.google.common.collect.ImmutableList)1 Maps (com.google.common.collect.Maps)1 Closer (com.google.common.io.Closer)1 ImmutableLeaderConfig (com.palantir.atlasdb.config.ImmutableLeaderConfig)1 LeaderConfig (com.palantir.atlasdb.config.LeaderConfig)1 DiskNamespaceLoader (com.palantir.atlasdb.timelock.management.DiskNamespaceLoader)1 PersistentNamespaceLoader (com.palantir.atlasdb.timelock.management.PersistentNamespaceLoader)1 PaxosContainer (com.palantir.atlasdb.timelock.paxos.PaxosQuorumCheckingCoalescingFunction.PaxosContainer)1 MetricsManagers (com.palantir.atlasdb.util.MetricsManagers)1 CheckedRejectionExecutorService (com.palantir.common.concurrent.CheckedRejectionExecutorService)1 PTExecutors (com.palantir.common.concurrent.PTExecutors)1 ServiceNotAvailableException (com.palantir.common.remoting.ServiceNotAvailableException)1 KeyedStream (com.palantir.common.streams.KeyedStream)1