Java源码示例:io.atomix.protocols.raft.protocol.ReconfigureRequest
示例1
@Override
public CompletableFuture<ReconfigureResponse> onReconfigure(ReconfigureRequest request) {
raft.checkThread();
logRequest(request);
if (raft.getLeader() == null) {
return CompletableFuture.completedFuture(logResponse(ReconfigureResponse.builder()
.withStatus(RaftResponse.Status.ERROR)
.withError(RaftError.Type.NO_LEADER)
.build()));
} else {
return forward(request, raft.getProtocol()::reconfigure)
.exceptionally(error -> ReconfigureResponse.builder()
.withStatus(RaftResponse.Status.ERROR)
.withError(RaftError.Type.NO_LEADER)
.build())
.thenApply(this::logResponse);
}
}
示例2
/**
* Recursively reconfigures the cluster.
*/
private void configure(RaftMember.Type type, CompletableFuture<Void> future) {
// Set a timer to retry the attempt to leave the cluster.
configureTimeout = cluster.getContext().getThreadContext().schedule(cluster.getContext().getElectionTimeout(), () -> {
configure(type, future);
});
// Attempt to leave the cluster by submitting a LeaveRequest directly to the server state.
// Non-leader states should forward the request to the leader if there is one. Leader states
// will log, replicate, and commit the reconfiguration.
cluster.getContext().getRaftRole().onReconfigure(ReconfigureRequest.builder()
.withIndex(cluster.getConfiguration().index())
.withTerm(cluster.getConfiguration().term())
.withMember(new DefaultRaftMember(id, type, updated))
.build()).whenComplete((response, error) -> {
if (error == null) {
if (response.status() == RaftResponse.Status.OK) {
cancelConfigureTimer();
cluster.configure(new Configuration(response.index(), response.term(), response.timestamp(), response.members()));
future.complete(null);
} else if (response.error() == null
|| response.error().type() == RaftError.Type.UNAVAILABLE
|| response.error().type() == RaftError.Type.PROTOCOL_ERROR
|| response.error().type() == RaftError.Type.NO_LEADER) {
cancelConfigureTimer();
configureTimeout = cluster.getContext().getThreadContext().schedule(cluster.getContext().getElectionTimeout().multipliedBy(2), () -> configure(type, future));
} else {
cancelConfigureTimer();
future.completeExceptionally(response.error().createException());
}
} else {
future.completeExceptionally(error);
}
});
}
示例3
@Override
public CompletableFuture<ReconfigureResponse> onReconfigure(ReconfigureRequest request) {
logRequest(request);
return Futures.completedFuture(logResponse(ReconfigureResponse.builder()
.withStatus(Status.ERROR)
.withError(RaftError.Type.UNAVAILABLE)
.build()));
}
示例4
@Override
public CompletableFuture<ReconfigureResponse> reconfigure(MemberId memberId,
ReconfigureRequest request) {
return sendAndReceive(memberId, "reconfigure", request);
}
示例5
@Override
public void registerReconfigureHandler(Function<ReconfigureRequest,
CompletableFuture<ReconfigureResponse>> handler) {
registerHandler("reconfigure", handler);
}
示例6
@Override
public CompletableFuture<ReconfigureResponse> reconfigure(MemberId memberId,
ReconfigureRequest request) {
return getServer(memberId).thenCompose(listener ->
listener.reconfigure(encode(request))).thenApply(this::decode);
}
示例7
@Override
public void registerReconfigureHandler(Function<ReconfigureRequest,
CompletableFuture<ReconfigureResponse>> handler) {
this.reconfigureHandler = handler;
}
示例8
@Override
public CompletableFuture<ReconfigureResponse> reconfigure(MemberId memberId,
ReconfigureRequest request) {
return sendAndReceive(memberId, "reconfigure", request);
}
示例9
@Override
public void registerReconfigureHandler(Function<ReconfigureRequest,
CompletableFuture<ReconfigureResponse>> handler) {
registerHandler("reconfigure", handler);
}
示例10
@Override
public CompletableFuture<ReconfigureResponse> reconfigure(MemberId memberId,
ReconfigureRequest request) {
return getServer(memberId).thenCompose(listener ->
listener.reconfigure(encode(request))).thenApply(this::decode);
}
示例11
@Override
public void registerReconfigureHandler(Function<ReconfigureRequest,
CompletableFuture<ReconfigureResponse>> handler) {
this.reconfigureHandler = handler;
}
示例12
@Override
public CompletableFuture<ReconfigureResponse> reconfigure(MemberId memberId, ReconfigureRequest request) {
return sendAndReceive(context.reconfigureSubject, request, memberId);
}
示例13
@Override
public void registerReconfigureHandler(Function<ReconfigureRequest, CompletableFuture<ReconfigureResponse>> handler) {
clusterCommunicator.subscribe(context.reconfigureSubject, serializer::decode, handler, serializer::encode);
}
示例14
@Override
public CompletableFuture<ReconfigureResponse> reconfigure(MemberId memberId, ReconfigureRequest request) {
return sendAndReceive(memberId, "reconfigure", request);
}
示例15
@Override
public void registerReconfigureHandler(Function<ReconfigureRequest, CompletableFuture<ReconfigureResponse>> handler) {
registerHandler("reconfigure", handler);
}
示例16
@Override
public CompletableFuture<ReconfigureResponse> reconfigure(MemberId memberId, ReconfigureRequest request) {
return getServer(memberId).thenCompose(listener -> listener.reconfigure(encode(request))).thenApply(this::decode);
}
示例17
@Override
public void registerReconfigureHandler(Function<ReconfigureRequest, CompletableFuture<ReconfigureResponse>> handler) {
this.reconfigureHandler = handler;
}
示例18
/**
* Handles a configure request.
*
* @param request The request to handle.
* @return A completable future to be completed with the request response.
*/
CompletableFuture<ReconfigureResponse> onReconfigure(ReconfigureRequest request);