private CompletableFuture<Void> storeAppend(Append append) {
long lastEventNumber;
synchronized (lock) {
lastEventNumber = latestEventNumbers.get(Pair.of(append.getSegment(), append.getWriterId()));
}
List<AttributeUpdate> attributes = Arrays.asList(
new AttributeUpdate(append.getWriterId(), AttributeUpdateType.ReplaceIfEquals, append.getEventNumber(), lastEventNumber),
new AttributeUpdate(EVENT_COUNT, AttributeUpdateType.Accumulate, append.getEventCount()));
ByteBuf buf = append.getData().asReadOnly();
byte[] bytes = new byte[buf.readableBytes()];
buf.readBytes(bytes);
if (append.isConditional()) {
return store.append(append.getSegment(), append.getExpectedLength(), bytes, attributes, TIMEOUT);
} else {
return store.append(append.getSegment(), bytes, attributes, TIMEOUT);
}
}