private void validateAppend(Append append, Session session) { if (session == null || !session.id.equals(append.getWriterId())) { throw new InvalidMessageException("Sending appends without setting up the append."); } if (append.getEventNumber() <= session.lastEventNumber) { throw new InvalidMessageException("Events written out of order. Received: " + append.getEventNumber() + " following: " + session.lastEventNumber); } if (append.isConditional()) { throw new IllegalArgumentException("Conditional appends should be written via a ConditionalAppend object."); } Preconditions.checkState(bytesLeftInBlock == 0 || bytesLeftInBlock > TYPE_PLUS_LENGTH_SIZE, "Bug in CommandEncoder.encode, block is too small."); }
if (appends.get(0).isConditional()) { outstandingAppend = appends.remove(0); } else { for (Iterator<Append> iterator = appends.iterator(); iterator.hasNext(); ) { Append a = iterator.next(); if (a.isConditional()) { break;
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); } }