public void updateActionReplayState(final long offset, final RangeAckAction action) { actionCheckpointGuard.lock(); try { final String subject = action.subject(); final String group = action.group(); final String consumerId = action.consumerId(); final long maxSequence = getConsumerMaxAckedPullLogSequence(subject, group, consumerId); if (maxSequence + 1 < action.getFirstSequence()) { LOG.warn("Maybe lost ack. Last acked sequence: {}. Current start acked sequence {} {}:{}:{}", maxSequence, action.getFirstSequence(), subject, group, consumerId); } final long lastSequence = action.getLastSequence(); if (maxSequence < lastSequence) { updateConsumerMaxAckedPullLogSequence(subject, group, consumerId, lastSequence); } actionCheckpoint.setOffset(offset); } finally { actionCheckpointGuard.unlock(); } }