private boolean pruneLongMvv(final byte[] bytes, final int offset, final int oldSize, final Value value,
            final List<PrunedVersion> prunedVersions, final List<Long> toDeallocate) throws PersistitException {
        assert isLongMVV(bytes, offset, oldSize) : "Not a long MVV";
        long oldLongRecordChain = decodeLongRecordDescriptorPointer(bytes, offset);
        value.changeLongRecordMode(false);
        value.ensureFit(oldSize);
        System.arraycopy(bytes, offset, value.getEncodedBytes(), 0, oldSize);
        value.setEncodedSize(oldSize);
        final LongRecordHelper helper = new LongRecordHelper(_persistit, _vol);
        helper.fetchLongRecord(value, Integer.MAX_VALUE);
        byte[] rawBytes = value.getEncodedBytes();
        int oldLongSize = value.getEncodedSize();
        // TODO - perhaps remove. Done as a precaution for now.
        MVV.verify(rawBytes, 0, oldLongSize);
        List<PrunedVersion> provisionalPrunedVersions = new ArrayList<PrunedVersion>();
        int newLongSize = MVV.prune(rawBytes, 0, oldLongSize, _persistit.getTransactionIndex(), true,
                provisionalPrunedVersions);
        if (newLongSize == oldLongSize) {
            // No pruning done.
            return false;
        }
        value.setEncodedSize(newLongSize);
        if (newLongSize > oldSize) {
            helper.storeLongRecord(value, false);
        }
        if (oldLongRecordChain != 0) {
            toDeallocate.add(oldLongRecordChain);
        }
        prunedVersions.addAll(provisionalPrunedVersions);
        return true;
    }