Search in sources :

Example 61 with PeerId

use of io.dingodb.raft.entity.PeerId in project dingo by dingodb.

the class NodeImpl method fillLogEntryPeers.

private void fillLogEntryPeers(final RaftOutter.EntryMeta entry, final LogEntry logEntry) {
    // TODO refactor
    if (entry.getPeersCount() > 0) {
        final List<PeerId> peers = new ArrayList<>(entry.getPeersCount());
        for (final String peerStr : entry.getPeersList()) {
            final PeerId peer = new PeerId();
            peer.parse(peerStr);
            peers.add(peer);
        }
        logEntry.setPeers(peers);
    }
    if (entry.getOldPeersCount() > 0) {
        final List<PeerId> oldPeers = new ArrayList<>(entry.getOldPeersCount());
        for (final String peerStr : entry.getOldPeersList()) {
            final PeerId peer = new PeerId();
            peer.parse(peerStr);
            oldPeers.add(peer);
        }
        logEntry.setOldPeers(oldPeers);
    }
    if (entry.getLearnersCount() > 0) {
        final List<PeerId> peers = new ArrayList<>(entry.getLearnersCount());
        for (final String peerStr : entry.getLearnersList()) {
            final PeerId peer = new PeerId();
            peer.parse(peerStr);
            peers.add(peer);
        }
        logEntry.setLearners(peers);
    }
    if (entry.getOldLearnersCount() > 0) {
        final List<PeerId> peers = new ArrayList<>(entry.getOldLearnersCount());
        for (final String peerStr : entry.getOldLearnersList()) {
            final PeerId peer = new PeerId();
            peer.parse(peerStr);
            peers.add(peer);
        }
        logEntry.setOldLearners(peers);
    }
}
Also used : CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) ArrayList(java.util.ArrayList) PeerId(io.dingodb.raft.entity.PeerId)

Example 62 with PeerId

use of io.dingodb.raft.entity.PeerId in project dingo by dingodb.

the class Configuration method toString.

@Override
public String toString() {
    final StringBuilder sb = new StringBuilder();
    final List<PeerId> peers = listPeers();
    int i = 0;
    int size = peers.size();
    for (final PeerId peer : peers) {
        sb.append(peer);
        if (i < size - 1 || !this.learners.isEmpty()) {
            sb.append(",");
        }
        i++;
    }
    size = this.learners.size();
    i = 0;
    for (final PeerId peer : this.learners) {
        sb.append(peer).append(LEARNER_POSTFIX);
        if (i < size - 1) {
            sb.append(",");
        }
        i++;
    }
    return sb.toString();
}
Also used : PeerId(io.dingodb.raft.entity.PeerId)

Example 63 with PeerId

use of io.dingodb.raft.entity.PeerId in project dingo by dingodb.

the class CliServiceImpl method removePeer.

@Override
public Status removePeer(final String groupId, final Configuration conf, final PeerId peer) {
    Requires.requireTrue(!StringUtils.isBlank(groupId), "Blank group id");
    Requires.requireNonNull(conf, "Null configuration");
    Requires.requireNonNull(peer, "Null peer");
    Requires.requireTrue(!peer.isEmpty(), "Removing peer is blank");
    final PeerId leaderId = new PeerId();
    final Status st = checkLeaderAndConnect(groupId, conf, leaderId);
    if (!st.isOk()) {
        return st;
    }
    final CliRequests.RemovePeerRequest.Builder rb = // 
    CliRequests.RemovePeerRequest.newBuilder().setGroupId(// 
    groupId).setLeaderId(// 
    leaderId.toString()).setPeerId(peer.toString());
    try {
        final Message result = this.cliClientService.removePeer(leaderId.getEndpoint(), rb.build(), null).get();
        if (result instanceof CliRequests.RemovePeerResponse) {
            final CliRequests.RemovePeerResponse resp = (CliRequests.RemovePeerResponse) result;
            recordConfigurationChange(groupId, resp.getOldPeersList(), resp.getNewPeersList());
            return Status.OK();
        } else {
            return statusFromResponse(result);
        }
    } catch (final Exception e) {
        return new Status(-1, e.getMessage());
    }
}
Also used : Status(io.dingodb.raft.Status) Message(com.google.protobuf.Message) CliRequests(io.dingodb.raft.rpc.CliRequests) JRaftException(io.dingodb.raft.error.JRaftException) PeerId(io.dingodb.raft.entity.PeerId)

Example 64 with PeerId

use of io.dingodb.raft.entity.PeerId in project dingo by dingodb.

the class CliServiceImpl method resetLearners.

@Override
public Status resetLearners(final String groupId, final Configuration conf, final List<PeerId> learners) {
    checkLearnersOpParams(groupId, conf, learners);
    final PeerId leaderId = new PeerId();
    final Status st = getLeader(groupId, conf, leaderId);
    if (!st.isOk()) {
        return st;
    }
    if (!this.cliClientService.connect(leaderId.getEndpoint())) {
        return new Status(-1, "Fail to init channel to leader %s", leaderId);
    }
    final CliRequests.ResetLearnersRequest.Builder rb = // 
    CliRequests.ResetLearnersRequest.newBuilder().setGroupId(// 
    groupId).setLeaderId(leaderId.toString());
    for (final PeerId peer : learners) {
        rb.addLearners(peer.toString());
    }
    try {
        final Message result = this.cliClientService.resetLearners(leaderId.getEndpoint(), rb.build(), null).get();
        return processLearnersOpResponse(groupId, result, "resetting learners: %s", learners);
    } catch (final Exception e) {
        return new Status(-1, e.getMessage());
    }
}
Also used : Status(io.dingodb.raft.Status) Message(com.google.protobuf.Message) JRaftException(io.dingodb.raft.error.JRaftException) PeerId(io.dingodb.raft.entity.PeerId)

Example 65 with PeerId

use of io.dingodb.raft.entity.PeerId in project dingo by dingodb.

the class CliServiceImpl method processLearnersOpResponse.

private Status processLearnersOpResponse(final String groupId, final Message result, final String fmt, final Object... formatArgs) {
    if (result instanceof CliRequests.LearnersOpResponse) {
        final CliRequests.LearnersOpResponse resp = (CliRequests.LearnersOpResponse) result;
        final Configuration oldConf = new Configuration();
        for (final String peerIdStr : resp.getOldLearnersList()) {
            final PeerId oldPeer = new PeerId();
            oldPeer.parse(peerIdStr);
            oldConf.addLearner(oldPeer);
        }
        final Configuration newConf = new Configuration();
        for (final String peerIdStr : resp.getNewLearnersList()) {
            final PeerId newPeer = new PeerId();
            newPeer.parse(peerIdStr);
            newConf.addLearner(newPeer);
        }
        LOG.info("Learners of replication group {} changed from {} to {} after {}.", groupId, oldConf, newConf, String.format(fmt, formatArgs));
        return Status.OK();
    } else {
        return statusFromResponse(result);
    }
}
Also used : Configuration(io.dingodb.raft.conf.Configuration) CliRequests(io.dingodb.raft.rpc.CliRequests) PeerId(io.dingodb.raft.entity.PeerId)

Aggregations

PeerId (io.dingodb.raft.entity.PeerId)72 Status (io.dingodb.raft.Status)27 Configuration (io.dingodb.raft.conf.Configuration)15 Message (com.google.protobuf.Message)12 ArrayList (java.util.ArrayList)12 JRaftException (io.dingodb.raft.error.JRaftException)10 LogId (io.dingodb.raft.entity.LogId)9 CliRequests (io.dingodb.raft.rpc.CliRequests)8 Node (io.dingodb.raft.Node)6 RpcRequests (io.dingodb.raft.rpc.RpcRequests)4 Endpoint (io.dingodb.raft.util.Endpoint)4 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)4 LogEntry (io.dingodb.raft.entity.LogEntry)3 NodeOptions (io.dingodb.raft.option.NodeOptions)3 ByteBuffer (java.nio.ByteBuffer)3 TimeoutException (java.util.concurrent.TimeoutException)3 RaftOutter (io.dingodb.raft.entity.RaftOutter)2 RaftException (io.dingodb.raft.error.RaftException)2 ThreadId (io.dingodb.raft.util.ThreadId)2 ExecutionException (java.util.concurrent.ExecutionException)2