private void addBitSetExceptions(long newVersion) {
    if (newVersion <= bitSetVersion) {
      return;
    }

    // Add all of the exceptions that should be flushed from the bitset as real exceptions
    Iterator<RVVException> exceptionIterator =
        new BitSetExceptionIterator(bitSet, bitSetVersion, newVersion);
    while (exceptionIterator.hasNext()) {
      addException(exceptionIterator.next());
    }

    // Move the data in the bitset forward to reflect the new version
    if (newVersion > bitSetVersion + bitSet.size()) {
      // Optimization - if the new version is past the end of the bitset, just clear the bitset
      bitSet.clear();
    } else {
      // Otherwise slide the bitset over to the new offset
      int offsetIncrease = (int) (newVersion - bitSetVersion);
      bitSet = bitSet.get(offsetIncrease, bitSet.size());
    }

    // Move the bitset version
    bitSetVersion = newVersion;
  }
Add exceptions from the BitSet array to the exceptions list. Assumes that the BitSet[0]
corresponds to this.bitSetVersion. This scans the bitset looking for gaps that are recorded as
RVV exceptions. The scan terminates at numBits or when the last set bit is found. The bitSet is
adjusted and a new bitSetVersion is established.

@param newVersion the desired new bitSetVersion, which may be > the max representable in the
       bitset. This should *always* be a version that has been received, because this
       method may need to create an exception up to this version, and the existance of an
       exception implies that the final version was received.
geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionHolder.java