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