@Override
  public boolean checkMyStateOnMembers(Set<InternalDistributedMember> replicates)
      throws ReplyException {
    PersistentStateQueryResults remoteStates = getMyStateOnMembers(replicates);
    Set<InternalDistributedMember> copyOfReplicates = null;

    persistenceAdvisorObserver.observe(regionPath);

    boolean equal = false;
    PersistentMemberID myId = getPersistentID();
    for (Map.Entry<InternalDistributedMember, PersistentMemberState> entry : remoteStates
        .getStateOnPeers().entrySet()) {
      InternalDistributedMember member = entry.getKey();
      PersistentMemberID remoteId = remoteStates.getPersistentIds().get(member);

      PersistentMemberState stateOnPeer = entry.getValue();
      if (PersistentMemberState.REVOKED.equals(stateOnPeer)) {
        throw new RevokedPersistentDataException(
            String.format(
                "The persistent member id %s has been revoked in this distributed system. You cannot recover from disk files which have been revoked.",
                myId));
      }

      if (myId != null && stateOnPeer == null) {
        String message = String.format(
            "Region %s remote member %s with persistent data %s was not part of the same distributed system as the local data from %s",
            regionPath, member, remoteId, myId);
        // Conceptually the removed member due to not knowing current member, should be equal to
        // existing replicates.
        // It can still be used as GII provider candidate. Use a copyOfReplicates to avoid modifying
        // the replicates.
        if (copyOfReplicates == null) {
          copyOfReplicates = new HashSet<>(replicates);
        }

        boolean gwRegion = false;

        if (cacheDistributionAdvisor instanceof BucketAdvisor) {
          BucketAdvisor ba = (BucketAdvisor) cacheDistributionAdvisor;
          if (ba.getAdvisee() instanceof ProxyBucketRegion) {
            ProxyBucketRegion pbr = (ProxyBucketRegion) ba.getAdvisee();
            PartitionedRegion pr = pbr.getPartitionedRegion();
            if (pr != null) {
              gwRegion = pr.isShadowPR();
            }
          }
        }

        copyOfReplicates.remove(member);
        if (copyOfReplicates.isEmpty() && !gwRegion) {
          throw new ConflictingPersistentDataException(message);
        } else {
          logger.info(message);
        }
      }

      if (myId != null && stateOnPeer == PersistentMemberState.EQUAL) {
        equal = true;
      }

      // The other member changes its ID when it comes back online.
      if (remoteId != null) {
        PersistentMemberState remoteState = getPersistedStateOfMember(remoteId);
        if (remoteState == PersistentMemberState.OFFLINE) {
          String message =
              String.format(
                  "Region %s refusing to initialize from member %s with persistent data %s which was offline when the local data from %s was last online",
                  regionPath, member, remoteId, myId);
          throw new ConflictingPersistentDataException(message);
        }
      }
    }
    return equal;
  }
Start listening for persistent view updates and apply any updates that have already happened.

<p>
This method should be called after we have decided that there is no conflicting persistent
exception.
geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistenceAdvisorImpl.java