@Override
  public RecordIdIterator createRecordIdIterator() throws IOException {
    final BitSet extraRecordsIds = buildIdSetOfExtraRecords();
    final RecordIdIterator iterator = super.createRecordIdIterator();

    return new RecordIdIterator() {
      int nextId = scanToNextId();

      private int scanToNextId() {
        while (iterator.hasNextId()) {
          int next = iterator.nextId();
          if (!extraRecordsIds.get(next)) return next;
        }
        return -1;
      }

      @Override
      public boolean hasNextId() {
        return nextId != -1;
      }

      @Override
      public int nextId() {
        assert hasNextId();
        int result = nextId;
        nextId = scanToNextId();
        return result;
      }

      @TestOnly
      @Override
      public boolean validId() throws IOException {
        assert hasNextId();
        return isSizeOfLiveRecord(getSize(nextId));
      }
    };
  }
@Override
  public RecordIdIterator createRecordIdIterator()