diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2018-04-23 18:07:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-23 18:07:24 +0200 |
commit | 0cbf66a3e9c024df5e53a1ca14056dfd43c68a74 (patch) | |
tree | 7c93ee88f45efba0537bebba2ca3b9e89cb76d8c | |
parent | fa552877d7ebbb24e9b683378da7f4148d7b3360 (diff) | |
parent | ba8c5547fa595cab0dc46072441dfde598072801 (diff) |
Merge pull request #5682 from vespa-engine/revert-5655-hmusum/use-config-server-vip-for-aws-zones
Revert "Use config server VIP for zone v2 requests against AWS zones"
-rw-r--r-- | controller-server/src/main/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImpl.java | 64 |
1 files changed, 32 insertions, 32 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImpl.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImpl.java index 091dfb67918..06dc29b3b70 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImpl.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/proxy/ConfigServerRestExecutorImpl.java @@ -65,7 +65,8 @@ public class ConfigServerRestExecutorImpl implements ConfigServerRestExecutor { private final AthenzSslContextProvider sslContextProvider; @Inject - public ConfigServerRestExecutorImpl(ZoneRegistry zoneRegistry, AthenzSslContextProvider sslContextProvider) { + public ConfigServerRestExecutorImpl(ZoneRegistry zoneRegistry, + AthenzSslContextProvider sslContextProvider) { this.zoneRegistry = zoneRegistry; this.sslContextProvider = sslContextProvider; } @@ -77,38 +78,27 @@ public class ConfigServerRestExecutorImpl implements ConfigServerRestExecutor { } ZoneId zoneId = ZoneId.from(proxyRequest.getEnvironment(), proxyRequest.getRegion()); + + // Make a local copy of the list as we want to manipulate it in case of ping problems. + List<URI> allServers = new ArrayList<>(zoneRegistry.getConfigServerUris(zoneId)); + StringBuilder errorBuilder = new StringBuilder(); - // TODO: Use config server VIP for all zones that have one - if (zoneId.region().value().startsWith("aws-") - || zoneId.region().value().startsWith("cd-aws-") - || zoneId.region().value().equals("cd-us-east-1a")) { - URI uri = zoneRegistry.getConfigServerVipUri(zoneId) - .orElseThrow(() -> new RuntimeException("Could not find a config server VIP for " + zoneId)); + if (queueFirstServerIfDown(allServers, proxyRequest)) { + errorBuilder.append("Change ordering due to failed ping."); + } + for (URI uri : allServers) { Optional<ProxyResponse> proxyResponse = proxyCall(uri, proxyRequest, errorBuilder); if (proxyResponse.isPresent()) { return proxyResponse.get(); } - } else { - // Make a local copy of the list as we want to manipulate it in case of ping problems. - List<URI> allServers = new ArrayList<>(zoneRegistry.getConfigServerUris(zoneId)); - - if (queueFirstServerIfDown(allServers, proxyRequest)) { - errorBuilder.append("Change ordering due to failed ping."); - } - for (URI uri : allServers) { - Optional<ProxyResponse> proxyResponse = proxyCall(uri, proxyRequest, errorBuilder); - if (proxyResponse.isPresent()) { - return proxyResponse.get(); - } - } } // TODO Add logging, for now, experimental and we want to not add more noise. throw new ProxyException(ErrorResponse.internalServerError("Failed talking to config servers: " - + errorBuilder.toString())); + + errorBuilder.toString())); } private static class DiscoveryResponseStructure { - List<String> uris = new ArrayList<>(); + public List<String> uris = new ArrayList<>(); } private ProxyResponse createDiscoveryResponse(ProxyRequest proxyRequest) { @@ -138,7 +128,8 @@ public class ConfigServerRestExecutorImpl implements ConfigServerRestExecutor { private Optional<ProxyResponse> proxyCall(URI uri, ProxyRequest proxyRequest, StringBuilder errorBuilder) throws ProxyException { String fullUri = uri.toString() + removeFirstSlashIfAny(proxyRequest.getConfigServerRequest()); - final HttpRequestBase requestBase = createHttpBaseRequest(proxyRequest.getMethod(), fullUri, proxyRequest.getData()); + final HttpRequestBase requestBase = createHttpBaseRequest( + proxyRequest.getMethod(), fullUri, proxyRequest.getData()); // Empty list of headers to copy for now, add headers when needed, or rewrite logic. copyHeaders(proxyRequest.getHeaders(), requestBase); @@ -146,13 +137,16 @@ public class ConfigServerRestExecutorImpl implements ConfigServerRestExecutor { .setConnectTimeout((int) PROXY_REQUEST_TIMEOUT.toMillis()) .setConnectionRequestTimeout((int) PROXY_REQUEST_TIMEOUT.toMillis()) .setSocketTimeout((int) PROXY_REQUEST_TIMEOUT.toMillis()).build(); - try (CloseableHttpClient client = createHttpClient(config, sslContextProvider, zoneRegistry, proxyRequest); - CloseableHttpResponse response = client.execute(requestBase)) { + try ( + CloseableHttpClient client = createHttpClient(config, sslContextProvider, zoneRegistry, proxyRequest); + CloseableHttpResponse response = client.execute(requestBase); + ) { String content = getContent(response); int status = response.getStatusLine().getStatusCode(); if (status / 100 == 5) { - errorBuilder.append("Talking to server ").append(uri.getHost()) - .append(", got ").append(status).append(" ").append(content).append("\n"); + errorBuilder.append("Talking to server ").append(uri.getHost()); + errorBuilder.append(", got ").append(status).append(" ") + .append(content).append("\n"); log.log(LogLevel.DEBUG, () -> String.format("Got response from %s with status code %d and content:\n %s", uri.getHost(), status, content)); return Optional.empty(); @@ -167,7 +161,8 @@ public class ConfigServerRestExecutorImpl implements ConfigServerRestExecutor { // Send response back return Optional.of(new ProxyResponse(proxyRequest, content, status, Optional.of(uri), contentType)); } catch (Exception e) { - errorBuilder.append("Talking to server ").append(uri.getHost()).append(" got exception ").append(e.getMessage()); + errorBuilder.append("Talking to server ").append(uri.getHost()); + errorBuilder.append(" got exception ").append(e.getMessage()); log.log(LogLevel.DEBUG, e, () -> "Got exception while sending request to " + uri.getHost()); return Optional.empty(); } @@ -232,8 +227,9 @@ public class ConfigServerRestExecutorImpl implements ConfigServerRestExecutor { * but will increase latency to some extent. */ private boolean queueFirstServerIfDown(List<URI> allServers, ProxyRequest proxyRequest) { - if (allServers.size() < 2) { return false; } - + if (allServers.size() < 2) { + return false; + } URI uri = allServers.get(0); HttpGet httpget = new HttpGet(uri); @@ -242,11 +238,15 @@ public class ConfigServerRestExecutorImpl implements ConfigServerRestExecutor { .setConnectTimeout(timeout) .setConnectionRequestTimeout(timeout) .setSocketTimeout(timeout).build(); - try (CloseableHttpClient client = createHttpClient(config, sslContextProvider, zoneRegistry, proxyRequest); - CloseableHttpResponse response = client.execute(httpget)) { + try ( + CloseableHttpClient client = createHttpClient(config, sslContextProvider, zoneRegistry, proxyRequest); + CloseableHttpResponse response = client.execute(httpget); + + ) { if (response.getStatusLine().getStatusCode() == 200) { return false; } + } catch (IOException e) { // We ignore this, if server is restarting this might happen. } |