private void logRangesNotCovered(Map<Long, Long> coveredRanges, long indexEndOffset) {
    Iterator<Map.Entry<Long, Long>> iterator = coveredRanges.entrySet().iterator();
    Map.Entry<Long, Long> prevEntry = iterator.next();
    logger.trace("Record startOffset {} , endOffset {} ", prevEntry.getKey(), prevEntry.getValue());
    while (iterator.hasNext()) {
      Map.Entry<Long, Long> curEntry = iterator.next();
      logger.trace("Record startOffset {} , endOffset {} ", curEntry.getKey(), curEntry.getValue());
      if (prevEntry.getValue().compareTo(curEntry.getKey()) != 0) {
        metrics.logRangeNotFoundInIndexError.inc();
        logger.error("Cannot find entries in Index ranging from {} to {} with a hole of size {} in the Log",
            prevEntry.getValue(), curEntry.getKey(), curEntry.getKey() - prevEntry.getValue());
      }
      prevEntry = curEntry;
    }
    if (prevEntry.getValue().compareTo(indexEndOffset) != 0) {
      logger.error("End offset mismatch. FileEndPointer from the index segment {}, end offset as per records {}",
          indexEndOffset, prevEntry.getValue());
    }
  }
Log ranges not covered by the index in the log
@param coveredRanges {@link Map} of startOffsets to endOffsets of ranges covered by records in the log
@param indexEndOffset the end offset in the log that this index segment covers
ambry-tools/src/main/java/com/github/ambry/store/DumpDataTool.java