public FilterRoutingInfo getFilterRoutingInfoPart1(CacheEvent event, Profile[] peerProfiles,
      Set cacheOpRecipients) {
    // early out if there are no cache servers in the system
    boolean anyServers = false;
    for (final Profile peerProfile : peerProfiles) {
      if (((CacheProfile) peerProfile).hasCacheServer) {
        anyServers = true;
        break;
      }
    }
    if (!anyServers && !localProfile.hasCacheServer) {
      return null;
    }

    FilterRoutingInfo frInfo = null;
    // bug #50809 - local routing for transactional ops must be done here
    // because the event isn't available later and we lose the old value for the entry

    boolean processLocalProfile =
        event.getOperation().isEntry() && ((EntryEvent) event).getTransactionId() != null;

    CqService cqService = getCqService(event.getRegion());
    if (cqService.isRunning()) {
      frInfo = new FilterRoutingInfo();
      fillInCQRoutingInfo(event, processLocalProfile, peerProfiles, frInfo);
    }

    Profile[] tempProfiles = peerProfiles;

    if (processLocalProfile) {
      tempProfiles = new Profile[peerProfiles.length + 1];
      for (int i = 0; i < peerProfiles.length; i++) {
        tempProfiles[i] = peerProfiles[i];
      }
      tempProfiles[peerProfiles.length] = localProfile;
    }

    // Process InterestList.
    // return fillInInterestRoutingInfo(event, peerProfiles, frInfo, cacheOpRecipients);
    frInfo = fillInInterestRoutingInfo(event, tempProfiles, frInfo, cacheOpRecipients);
    if (frInfo == null || (!frInfo.hasMemberWithFilterInfo() && !processLocalProfile)) {
      return null;
    } else {
      return frInfo;
    }
  }
Compute the full routing information for the given set of peers. This will not include local
routing information from interest processing. That is done by getFilterRoutingInfoPart2
geode-core/src/main/java/org/apache/geode/internal/cache/FilterProfile.java