class ConfigServerRestExecutorImpl extends AbstractComponent implements ConfigServerRestExecutor {

    @Override
    public ProxyResponse handle(ProxyRequest request) {
        List<URI> targets = new ArrayList<>(request.getTargets());

        StringBuilder errorBuilder = new StringBuilder();
        boolean singleTarget = targets.size() == 1;
        if (singleTarget) {
            for (int i = 0; i < SINGLE_TARGET_RETRIES - 1; i++) {
                targets.add(targets.get(0));
            }
        } else if (queueFirstServerIfDown(targets)) {
            errorBuilder.append("Change ordering due to failed ping.");
        }

        for (URI url : targets) {
            Optional<ProxyResponse> proxyResponse = proxy(request, url, errorBuilder);
            if (proxyResponse.isPresent()) {
                return proxyResponse.get();
            }
            if (singleTarget) {
                sleeper.sleep(SINGLE_TARGET_WAIT);
            }
        }

        throw new RuntimeException("Failed talking to config servers: " + errorBuilder.toString());
    }

    @Inject public  ConfigServerRestExecutorImpl(ZoneRegistry zoneRegistry, ServiceIdentityProvider sslContextProvider);
      ConfigServerRestExecutorImpl(ZoneRegistry zoneRegistry, SSLContext sslContext,
                                 Sleeper sleeper, ConnectionReuseStrategy connectionReuseStrategy);

}