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);
}
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());
}
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);
}
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));
}
Aggregations