protected void releaseViewVersions() {
    RuntimeException rte = null;
    for (final Map.Entry<DistributedRegion, Long> e : viewVersions.entrySet()) {
      final DistributedRegion dr = e.getKey();
      final Long viewVersion = e.getValue();
      // need to continue the iteration if one of the regions is destroyed
      // since others may still be okay
      try {
        dr.getDistributionAdvisor().endOperation(viewVersion);
      } catch (RuntimeException ex) {
        rte = ex;
      }
    }
    if (rte != null) {
      throw rte;
    }
  }
record CacheDistributionAdvisor.startOperation versions for later cleanup
geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java