private int readSyncMarker()

in cassandra-four-zero/src/main/java/org/apache/cassandra/db/commitlog/SeekableCommitLogSegmentReader.java [141:178]


    private int readSyncMarker(CommitLogDescriptor descriptor, int offset, RandomAccessReader reader) throws IOException
    {
        if (offset > reader.length() - CommitLogSegment.SYNC_MARKER_SIZE)
        {
            // There was no room in the segment to write a final header. No data could be present here.
            return -1;
        }
        long current = reader.getFilePointer();
        if (offset != current)
        {
            long timeNanos = System.nanoTime();
            reader.seek(offset);
            logger.info("Seek to position", "from", current, "to", offset, "timeNanos", System.nanoTime() - timeNanos);
        }
        CRC32 crc = new CRC32();
        FBUtilities.updateChecksumInt(crc, (int) (descriptor.id & 0xFFFFFFFFL));
        FBUtilities.updateChecksumInt(crc, (int) (descriptor.id >>> 32));
        FBUtilities.updateChecksumInt(crc, (int) reader.getPosition());
        int end = reader.readInt();
        long fileCRC = reader.readInt() & 0xFFFFFFFFL;
        if (crc.getValue() != fileCRC)
        {
            if (end != 0 || fileCRC != 0)
            {
                String message = String.format("Encountered bad header at position %d of commit log %s, with invalid CRC. "
                                             + "The end of segment marker should be zero.", offset, reader.getPath());
                throw new CommitLogSegmentReader.SegmentReadException(message, true);
            }
            return -1;
        }
        else if (end < offset || reader.length() < end)
        {
            String message = String.format("Encountered bad header at position %d of commit log %s, with bad position but valid CRC",
                                           offset, reader.getPath());
            throw new CommitLogSegmentReader.SegmentReadException(message, false);
        }
        return end;
    }