protected long prepare(ExtendedCell cell) {
    if (isColumnQualifierChanged(cell)) {
      // The last cell is family-level delete and this is not, or the cq is changed,
      // we should construct delColMap as a deep copy of delFamMap.
      delColMap.clear();
      for (Map.Entry<Long, DeleteVersionsNode> e : delFamMap.entrySet()) {
        delColMap.put(e.getKey(), e.getValue().getDeepCopy());
      }
      countCurrentCol = 0;
    } else if (
      !PrivateCellUtil.isDelete(lastCqType) && lastCqType == cell.getTypeByte()
        && lastCqTs == cell.getTimestamp()
    ) {
      // Put with duplicate timestamp, ignore.
      return lastCqMvcc;
    }
    lastCqArray = cell.getQualifierArray();
    lastCqOffset = cell.getQualifierOffset();
    lastCqLength = cell.getQualifierLength();
    lastCqTs = cell.getTimestamp();
    lastCqMvcc = cell.getSequenceId();
    lastCqType = cell.getTypeByte();
    return Long.MAX_VALUE;
  }
Reset the map if it is different with the last Cell. Save the cq array/offset/length for next
Cell.
@return If this put has duplicate ts with last cell, return the mvcc of last cell. Else return
        MAX_VALUE.
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/NewVersionBehaviorTracker.java