private void accumulatorCheckpointHelper(final TransactionStatus start, final long timestamp)
            throws RetryException, InterruptedException {
        for (TransactionStatus status = start; status != null; status = status.getNext()) {
            final long tc = status.getTc();
            if (tc > 0 && tc != UNCOMMITTED && tc < timestamp) {
                for (Delta delta = status.getDelta(); delta != null; delta = delta.getNext()) {
                    final Accumulator accumulator = delta.getAccumulator();
                    long newValue = accumulator.applyValue(accumulator.getCheckpointTemp(), delta.getValue());
                    accumulator.setCheckpointTemp(newValue);
                }
            } else if (tc < 0 && tc != ABORTED && -tc < timestamp) {
                boolean locked = false;
                try {
                    locked = status.wwLock(TransactionIndex.SHORT_TIMEOUT);
                } finally {
                    if (locked) {
                        status.wwUnlock();
                    }
                }
                _transactionIndex.incrementAccumulatorCheckpointRetryCounter();
                throw RetryException.SINGLE;
            }
        }
    }