@Override
  public ServerLocation findReplacementServer(ServerLocation currentServer,
      Set<ServerLocation> excludedServers) {
    if (PoolImpl.TEST_DURABLE_IS_NET_DOWN) {
      return null;
    }
    ClientReplacementRequest request =
        new ClientReplacementRequest(currentServer, excludedServers, serverGroup);
    ClientConnectionResponse response = (ClientConnectionResponse) queryLocators(request);
    if (response == null) {
      throw new NoAvailableLocatorsException(
          "Unable to connect to any locators in the list " + locators);
    }
    if (!response.hasResult()) {
      throw new NoAvailableServersException("No servers found");
    }
    return response.getServer();
  }
key is the InetSocketAddress of the locator. value will be an exception if we have already
found the locator to be dead. value will be null if we last saw it alive.
geode-core/src/main/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImpl.java