use of org.apache.ignite.raft.jraft.rpc.Message in project ignite-3 by apache.
the class CliServiceImpl method removeLearners.
@Override
public Status removeLearners(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);
}
RemoveLearnersRequest req = cliOptions.getRaftMessagesFactory().removeLearnersRequest().groupId(groupId).leaderId(leaderId.toString()).learnersList(learners.stream().map(Object::toString).collect(toList())).build();
try {
final Message result = this.cliClientService.removeLearners(leaderId.getEndpoint(), req, null).get();
return processLearnersOpResponse(groupId, result, "removing learners: %s", learners);
} catch (final Exception e) {
return new Status(-1, e.getMessage());
}
}
use of org.apache.ignite.raft.jraft.rpc.Message in project ignite-3 by apache.
the class CliServiceImpl method transferLeader.
@Override
public Status transferLeader(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");
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);
}
TransferLeaderRequest rb = cliOptions.getRaftMessagesFactory().transferLeaderRequest().groupId(groupId).leaderId(leaderId.toString()).peerId(peer.isEmpty() ? null : peer.toString()).build();
try {
final Message result = this.cliClientService.transferLeader(leaderId.getEndpoint(), rb, null).get();
return statusFromResponse(result);
} catch (final Exception e) {
return new Status(-1, e.getMessage());
}
}
use of org.apache.ignite.raft.jraft.rpc.Message in project ignite-3 by apache.
the class CliServiceImpl method getPeers.
private List<PeerId> getPeers(final String groupId, final Configuration conf, final boolean returnLearners, final boolean onlyGetAlive) {
Requires.requireTrue(!StringUtils.isBlank(groupId), "Blank group id");
Requires.requireNonNull(conf, "Null conf");
final PeerId leaderId = new PeerId();
final Status st = getLeader(groupId, conf, leaderId);
if (!st.isOk()) {
throw new IllegalStateException(st.getErrorMsg());
}
if (!this.cliClientService.connect(leaderId.getEndpoint())) {
throw new IllegalStateException("Fail to init channel to leader " + leaderId);
}
GetPeersRequest req = cliOptions.getRaftMessagesFactory().getPeersRequest().groupId(groupId).leaderId(leaderId.toString()).onlyAlive(onlyGetAlive).build();
try {
final Message result = this.cliClientService.getPeers(leaderId.getEndpoint(), req, null).get(this.cliOptions.getTimeoutMs() <= 0 ? this.cliOptions.getRpcDefaultTimeout() : this.cliOptions.getTimeoutMs(), TimeUnit.MILLISECONDS);
if (result instanceof GetPeersResponse) {
final GetPeersResponse resp = (GetPeersResponse) result;
final List<PeerId> peerIdList = new ArrayList<>();
final Collection<String> responsePeers = returnLearners ? resp.learnersList() : resp.peersList();
for (final String peerIdStr : responsePeers) {
final PeerId newPeer = new PeerId();
newPeer.parse(peerIdStr);
peerIdList.add(newPeer);
}
return peerIdList;
} else {
final ErrorResponse resp = (ErrorResponse) result;
throw new JRaftException(resp.errorMsg());
}
} catch (final JRaftException e) {
throw e;
} catch (final Exception e) {
throw new JRaftException(e);
}
}
use of org.apache.ignite.raft.jraft.rpc.Message in project ignite-3 by apache.
the class CliServiceImpl method addLearners.
@Override
public Status addLearners(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);
}
AddLearnersRequest rb = cliOptions.getRaftMessagesFactory().addLearnersRequest().groupId(groupId).leaderId(leaderId.toString()).learnersList(learners.stream().map(Object::toString).collect(toList())).build();
try {
final Message result = this.cliClientService.addLearners(leaderId.getEndpoint(), rb, null).get();
return processLearnersOpResponse(groupId, result, "adding learners: %s", learners);
} catch (final Exception e) {
return new Status(-1, e.getMessage());
}
}
use of org.apache.ignite.raft.jraft.rpc.Message in project ignite-3 by apache.
the class FileServiceTest method testGetFileNotFound.
@Test
public void testGetFileNotFound() {
long readerId = FileService.getInstance().addReader(this.fileReader);
RpcRequests.GetFileRequest request = msgFactory.getFileRequest().count(Integer.MAX_VALUE).filename("data").offset(0).readerId(readerId).build();
RpcContext asyncContext = Mockito.mock(RpcContext.class);
Message msg = FileService.getInstance().handleGetFile(request, new RpcRequestClosure(asyncContext, msgFactory));
assertTrue(msg instanceof RpcRequests.ErrorResponse);
RpcRequests.ErrorResponse response = (RpcRequests.ErrorResponse) msg;
assertEquals(RaftError.EIO.getNumber(), response.errorCode());
assertEquals(String.format("Fail to read from path=%s filename=data", this.path), response.errorMsg());
}
Aggregations