private void sendSuspectRequest(final List<SuspectRequest<ID>> requests) {
    logger.debug("Sending suspect request for members {}", requests);
    List<ID> recipients;
    if (currentView.size() > MembershipConfig.SMALL_CLUSTER_SIZE) {
      HashSet<ID> filter = new HashSet<>();
      for (Enumeration<ID> e = suspectedMemberIds.keys(); e
          .hasMoreElements();) {
        filter.add(e.nextElement());
      }
      filter.addAll(
          requests.stream().map(SuspectRequest::getSuspectMember)
              .collect(Collectors.toList()));
      recipients =
          currentView.getPreferredCoordinators(filter, services.getJoinLeave().getMemberID(),
              MembershipConfig.SMALL_CLUSTER_SIZE + 1);
    } else {
      recipients = currentView.getMembers();
    }

    logger.trace("Sending suspect messages to {}", recipients);
    SuspectMembersMessage<ID> smm = new SuspectMembersMessage<>(recipients, requests);
    smm.setSender(localAddress);
    Set<ID> failedRecipients;
    try {
      failedRecipients = services.getMessenger().send(smm);
      stats.incSuspectsSent();
    } catch (MembershipClosedException e) {
      return;
    }

    if (failedRecipients != null && failedRecipients.size() > 0) {
      logger.trace("Unable to send suspect message to {}", failedRecipients);
    }
    logger.trace("Processing suspect message locally");
    processMessage(smm);
  }
Check to see if a member is available

@param initiator member who initiated this check
@param cv the view we're basing the check upon
@param isFinalCheck whether the member should be kicked out if it fails the check
@param mbr the member to check
@param reason why we're doing this check
@return true if the check passes
geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java