@Override public ServerInformationReply getInfo(ServerInformationRequest request) throws IOException { return RaftServerImpl.waitForReply(getId(), request, getInfoAsync(request), r -> null); }
@Override public RaftClientReply setConfiguration(SetConfigurationRequest request) throws IOException { return waitForReply(getId(), request, setConfigurationAsync(request)); }
@Override public RaftClientReply setConfiguration(SetConfigurationRequest request) throws IOException { return waitForReply(getId(), request, setConfigurationAsync(request)); }
@Override public RaftClientReply submitClientRequest(RaftClientRequest request) throws IOException { return waitForReply(getId(), request, submitClientRequestAsync(request)); }
@Override public RaftClientReply submitClientRequest(RaftClientRequest request) throws IOException { return waitForReply(getId(), request, submitClientRequestAsync(request)); }
@Override public GroupInfoReply getGroupInfo(GroupInfoRequest request) throws IOException { return RaftServerImpl.waitForReply(getId(), request, getGroupInfoAsync(request), r -> null); }
static <REPLY extends RaftClientReply> REPLY waitForReply( RaftPeerId id, RaftClientRequest request, CompletableFuture<REPLY> future, Function<RaftException, REPLY> exceptionReply) throws IOException { try { return future.get(); } catch (InterruptedException e) { final String s = id + ": Interrupted when waiting for reply, request=" + request; LOG.info(s, e); throw IOUtils.toInterruptedIOException(s, e); } catch (ExecutionException e) { final Throwable cause = e.getCause(); if (cause == null) { throw new IOException(e); } if (cause instanceof NotLeaderException || cause instanceof StateMachineException) { final REPLY reply = exceptionReply.apply((RaftException) cause); if (reply != null) { return reply; } } throw IOUtils.asIOException(cause); } }
static <REPLY extends RaftClientReply> REPLY waitForReply( RaftPeerId id, RaftClientRequest request, CompletableFuture<REPLY> future, Function<RaftException, REPLY> exceptionReply) throws IOException { try { return future.get(); } catch (InterruptedException e) { final String s = id + ": Interrupted when waiting for reply, request=" + request; LOG.info(s, e); throw IOUtils.toInterruptedIOException(s, e); } catch (ExecutionException e) { final Throwable cause = e.getCause(); if (cause == null) { throw new IOException(e); } if (cause instanceof NotLeaderException || cause instanceof StateMachineException) { final REPLY reply = exceptionReply.apply((RaftException) cause); if (reply != null) { return reply; } } throw IOUtils.asIOException(cause); } }
@Override public RaftClientReply reinitialize(ReinitializeRequest request) throws IOException { return RaftServerImpl.waitForReply(getId(), request, reinitializeAsync(request), e -> new RaftClientReply(request, e, null)); }
@Override public RaftClientReply groupManagement(GroupManagementRequest request) throws IOException { return RaftServerImpl.waitForReply(getId(), request, groupManagementAsync(request), e -> new RaftClientReply(request, e, null)); }