package org.robotninjas.barge;
import com.google.protobuf.RpcCallback;
import com.google.protobuf.RpcController;
import org.robotninjas.barge.proto.RaftProto;
import org.robotninjas.barge.state.Raft;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nonnull;
import static com.google.common.base.Strings.nullToEmpty;
import static org.robotninjas.barge.proto.RaftProto.*;
class RaftServiceEndpoint implements RaftProto.RaftService.Interface {
private static final Logger LOGGER = LoggerFactory.getLogger(RaftServiceEndpoint.class);
private final Raft ctx;
public RaftServiceEndpoint(Raft ctx) {
this.ctx = ctx;
}
@Override
public void requestVote(@Nonnull final RpcController controller, @Nonnull final RequestVote request, @Nonnull final RpcCallback<RequestVoteResponse> done) {
try {
done.run(ProtoUtils.convert(ctx.requestVote(ProtoUtils.convert(request))));
} catch (Exception e) {
LOGGER.debug("Exception caught servicing RequestVote", e);
controller.setFailed(nullToEmpty(e.getMessage()));
done.run(null);
}
}
@Override
public void appendEntries(@Nonnull final RpcController controller, @Nonnull final AppendEntries request, @Nonnull final RpcCallback<AppendEntriesResponse> done) {
try {
done.run(ProtoUtils.convert(ctx.appendEntries(ProtoUtils.convert(request))));
} catch (Exception e) {
LOGGER.debug("Exception caught servicing AppendEntries", e);
controller.setFailed(nullToEmpty(e.getMessage()));
done.run(null);
}
}
}