Search in sources :

Example 16 with RaftClient

use of org.apache.ratis.client.RaftClient in project incubator-ratis by apache.

the class ServerInformationBaseTest method sendMessages.

RaftClientReply sendMessages(int n, MiniRaftCluster cluster) throws Exception {
    LOG.info("sendMessages: " + n);
    final RaftPeerId leader = RaftTestUtil.waitForLeader(cluster).getId();
    RaftClientReply reply = null;
    try (final RaftClient client = cluster.createClient(leader)) {
        for (int i = 0; i < n; i++) {
            reply = client.send(Message.valueOf("m" + i));
        }
    }
    return reply;
}
Also used : RaftClient(org.apache.ratis.client.RaftClient)

Example 17 with RaftClient

use of org.apache.ratis.client.RaftClient in project incubator-ratis by apache.

the class TestStateMachine method testTransactionContextIsPassedBack.

@Test
public void testTransactionContextIsPassedBack() throws Throwable {
    // tests that the TrxContext set by the StateMachine in Leader is passed back to the SM
    properties.setClass(MiniRaftCluster.STATEMACHINE_CLASS_KEY, SMTransactionContext.class, StateMachine.class);
    startCluster();
    int numTrx = 100;
    final RaftTestUtil.SimpleMessage[] messages = RaftTestUtil.SimpleMessage.create(numTrx);
    try (final RaftClient client = cluster.createClient()) {
        for (RaftTestUtil.SimpleMessage message : messages) {
            client.send(message);
        }
    }
    // TODO: there eshould be a better way to ensure all data is replicated and applied
    Thread.sleep(cluster.getMaxTimeout() + 100);
    for (RaftServerProxy raftServer : cluster.getServers()) {
        final SMTransactionContext sm = SMTransactionContext.get(raftServer);
        sm.rethrowIfException();
        assertEquals(numTrx, sm.numApplied.get());
    }
    // check leader
    RaftServerImpl raftServer = cluster.getLeader();
    // assert every transaction has obtained context in leader
    final SMTransactionContext sm = SMTransactionContext.get(raftServer.getProxy());
    List<Long> ll = sm.applied.stream().collect(Collectors.toList());
    Collections.sort(ll);
    assertEquals(ll.toString(), ll.size(), numTrx);
    for (int i = 0; i < numTrx; i++) {
        assertEquals(ll.toString(), Long.valueOf(i + 1), ll.get(i));
    }
}
Also used : RaftServerImpl(org.apache.ratis.server.impl.RaftServerImpl) RaftTestUtil(org.apache.ratis.RaftTestUtil) AtomicLong(java.util.concurrent.atomic.AtomicLong) RaftServerProxy(org.apache.ratis.server.impl.RaftServerProxy) RaftClient(org.apache.ratis.client.RaftClient) BaseTest(org.apache.ratis.BaseTest)

Example 18 with RaftClient

use of org.apache.ratis.client.RaftClient in project alluxio by Alluxio.

the class RaftJournalSystem method resetPriorities.

/**
 * Resets RaftPeer priorities.
 *
 * @throws IOException
 */
public synchronized void resetPriorities() throws IOException {
    List<RaftPeer> resetPeers = new ArrayList<>();
    final int NEUTRAL_PRIORITY = 1;
    for (RaftPeer peer : mRaftGroup.getPeers()) {
        resetPeers.add(RaftPeer.newBuilder(peer).setPriority(NEUTRAL_PRIORITY).build());
    }
    LOG.info("Resetting RaftPeer priorities");
    try (RaftClient client = createClient()) {
        RaftClientReply reply = client.admin().setConfiguration(resetPeers);
        processReply(reply, "failed to reset master priorities to 1");
    }
}
Also used : RaftClientReply(org.apache.ratis.protocol.RaftClientReply) ArrayList(java.util.ArrayList) RaftPeer(org.apache.ratis.protocol.RaftPeer) RaftClient(org.apache.ratis.client.RaftClient)

Example 19 with RaftClient

use of org.apache.ratis.client.RaftClient in project alluxio by Alluxio.

the class RaftJournalSystem method removeQuorumServer.

/**
 * Removes from RAFT quorum, a server with given address.
 * For server to be removed, it should be in unavailable state in quorum.
 *
 * @param serverNetAddress address of the server to remove from the quorum
 * @throws IOException
 */
public synchronized void removeQuorumServer(NetAddress serverNetAddress) throws IOException {
    InetSocketAddress serverAddress = InetSocketAddress.createUnresolved(serverNetAddress.getHost(), serverNetAddress.getRpcPort());
    RaftPeerId peerId = RaftJournalUtils.getPeerId(serverAddress);
    try (RaftClient client = createClient()) {
        Collection<RaftPeer> peers = mServer.getGroups().iterator().next().getPeers();
        RaftClientReply reply = client.admin().setConfiguration(peers.stream().filter(peer -> !peer.getId().equals(peerId)).collect(Collectors.toList()));
        if (reply.getException() != null) {
            throw reply.getException();
        }
    }
}
Also used : RaftClientReply(org.apache.ratis.protocol.RaftClientReply) InetSocketAddress(java.net.InetSocketAddress) RaftPeerId(org.apache.ratis.protocol.RaftPeerId) RaftPeer(org.apache.ratis.protocol.RaftPeer) RaftClient(org.apache.ratis.client.RaftClient)

Example 20 with RaftClient

use of org.apache.ratis.client.RaftClient in project alluxio by Alluxio.

the class RaftJournalSystem method sendMessageAsync.

/**
 * Sends a message to a raft server asynchronously.
 *
 * @param server the raft peer id of the target server
 * @param message the message to send
 * @return a future to be completed with the client reply
 */
public synchronized CompletableFuture<RaftClientReply> sendMessageAsync(RaftPeerId server, Message message) {
    RaftClient client = createClient();
    RaftClientRequest request = RaftClientRequest.newBuilder().setClientId(mRawClientId).setServerId(server).setGroupId(RAFT_GROUP_ID).setCallId(nextCallId()).setMessage(message).setType(RaftClientRequest.staleReadRequestType(0)).setSlidingWindowEntry(null).build();
    return client.getClientRpc().sendRequestAsync(request).whenComplete((reply, t) -> {
        try {
            client.close();
        } catch (IOException e) {
            throw new CompletionException(e);
        }
    });
}
Also used : RaftClientRequest(org.apache.ratis.protocol.RaftClientRequest) CompletionException(java.util.concurrent.CompletionException) IOException(java.io.IOException) RaftClient(org.apache.ratis.client.RaftClient)

Aggregations

RaftClient (org.apache.ratis.client.RaftClient)134 RaftClientReply (org.apache.ratis.protocol.RaftClientReply)66 RaftPeerId (org.apache.ratis.protocol.RaftPeerId)54 SimpleMessage (org.apache.ratis.RaftTestUtil.SimpleMessage)46 RaftServer (org.apache.ratis.server.RaftServer)46 Test (org.junit.Test)44 IOException (java.io.IOException)41 RaftPeer (org.apache.ratis.protocol.RaftPeer)33 BaseTest (org.apache.ratis.BaseTest)27 RaftTestUtil (org.apache.ratis.RaftTestUtil)22 ArrayList (java.util.ArrayList)20 RaftClientRpc (org.apache.ratis.client.RaftClientRpc)20 RaftGroup (org.apache.ratis.protocol.RaftGroup)16 CompletableFuture (java.util.concurrent.CompletableFuture)14 RaftProperties (org.apache.ratis.conf.RaftProperties)14 File (java.io.File)13 SimpleStateMachine4Testing (org.apache.ratis.statemachine.SimpleStateMachine4Testing)13 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)11 RaftClientRequest (org.apache.ratis.protocol.RaftClientRequest)11 MiniRaftCluster (org.apache.ratis.server.impl.MiniRaftCluster)11