protected boolean trySkipToNextColumn(ExtendedCell cell) throws IOException {
    ExtendedCell nextCell = null;
    // used to guard against a changed next indexed key by doing a identity comparison
    // when the identity changes we need to compare the bytes again
    ExtendedCell previousIndexedKey = null;
    do {
      ExtendedCell nextIndexedKey = getNextIndexedKey();
      if (
        nextIndexedKey != null && nextIndexedKey != KeyValueScanner.NO_NEXT_INDEXED_KEY
          && (nextIndexedKey == previousIndexedKey
            || matcher.compareKeyForNextColumn(nextIndexedKey, cell) >= 0)
      ) {
        this.heap.next();
        ++kvsScanned;
        previousIndexedKey = nextIndexedKey;
      } else {
        return false;
      }
    } while ((nextCell = this.heap.peek()) != null && CellUtil.matchingRowColumn(cell, nextCell));
    // We need this check because it may happen that the new scanner that we get
    // during heap.next() is requiring reseek due of fake KV previously generated for
    // ROWCOL bloom filter optimization. See HBASE-19863 for more details
    if (
      useRowColBloom && nextCell != null && cell.getTimestamp() == PrivateConstants.OLDEST_TIMESTAMP
    ) {
      return false;
    }
    return true;
  }
See {@link #trySkipToNextRow(ExtendedCell)}
@param cell current cell
@return true means skip to next column, false means not
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java