in ratis-logservice/src/main/java/org/apache/ratis/logservice/server/LogStateMachine.java [443:474]
private CompletableFuture<Message> processAppendRequest(TransactionContext trx,
LogServiceRequestProto logProto) {
final LogEntryProto entry = trx.getLogEntry();
AppendLogEntryRequestProto proto = logProto.getAppendRequest();
final long index = entry.getIndex();
long newSize = 0;
Throwable t = verifyState(State.OPEN);
final List<Long> ids = new ArrayList<Long>();
if (t == null) {
try (AutoCloseableLock writeLock = writeLock()) {
List<byte[]> entries = LogServiceProtoUtil.toListByteArray(proto.getDataList());
for (byte[] bb : entries) {
ids.add(this.length);
newSize += bb.length;
this.length++;
}
this.dataRecordsSize += newSize;
// TODO do we need this for other write request (close, sync)
updateLastAppliedTermIndex(entry.getTerm(), index);
}
}
final CompletableFuture<Message> f =
CompletableFuture.completedFuture(
Message.valueOf(LogServiceProtoUtil.toAppendLogReplyProto(ids, t).toByteString()));
final RaftProtos.RaftPeerRole role = trx.getServerRole();
if (LOG.isTraceEnabled()) {
LOG.trace("{}:{}-{}: {} new length {}", role, getId(), index,
TextFormat.shortDebugString(proto), dataRecordsSize);
}
return f;
}