@Override
  public void add(ExtendedCell cell) {
    prepare(cell);
    byte type = cell.getTypeByte();
    switch (KeyValue.Type.codeToType(type)) {
      // By the order of seen. We put null cq at first.
      case DeleteFamily: // Delete all versions of all columns of the specified family
        delFamMap.put(cell.getSequenceId(), new VisibilityDeleteVersionsNode(cell.getTimestamp(),
          cell.getSequenceId(), new TagInfo(cell)));
        break;
      case DeleteFamilyVersion: // Delete all columns of the specified family and specified version
        delFamMap.ceilingEntry(cell.getSequenceId()).getValue().addVersionDelete(cell);
        break;

      // These two kinds of markers are mix with Puts.
      case DeleteColumn: // Delete all versions of the specified column
        delColMap.put(cell.getSequenceId(), new VisibilityDeleteVersionsNode(cell.getTimestamp(),
          cell.getSequenceId(), new TagInfo(cell)));
        break;
      case Delete: // Delete the specified version of the specified column.
        delColMap.ceilingEntry(cell.getSequenceId()).getValue().addVersionDelete(cell);
        break;
      default:
        throw new AssertionError("Unknown delete marker type for " + cell);
    }
  }
Similar to MvccSensitiveTracker but tracks the visibility expression also before deciding if a
Cell can be considered deleted
hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityNewVersionBehaivorTracker.java