@Override
  public boolean waitForNewMember(ID remoteId) {
    boolean foundRemoteId = false;
    CountDownLatch currentLatch = null;
    // latestViewWriteLock protects memberLatch from modification while processView is in progress
    latestViewWriteLock.lock();
    try {
      if (latestView != null) {
        if (latestView.contains(remoteId)) {
          // check if remoteId is already in membership view.
          // If not, then create a latch if needed and wait for the latch to open.
          foundRemoteId = true;
        } else if ((currentLatch = memberLatch.get(remoteId)) == null) {
          currentLatch = new CountDownLatch(1);
          memberLatch.put(remoteId, currentLatch);
        }
      }
    } finally {
      latestViewWriteLock.unlock();
    }

    if (!foundRemoteId) {
      try {
        if (currentLatch != null
            && currentLatch.await(membershipCheckTimeout, TimeUnit.MILLISECONDS)) {
          foundRemoteId = true;
        }
      } catch (InterruptedException ex) {
        // latch attempt was interrupted.
        Thread.currentThread().interrupt();
        logger.warn("The membership check was terminated with an exception.");
      }
    }
    return foundRemoteId;
  }
returns the surpriseMemberTimeout interval, in milliseconds
geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java