diff options
2 files changed, 22 insertions, 23 deletions
diff --git a/routing-generator/src/main/java/com/yahoo/vespa/hosted/routing/status/RoutingStatusClient.java b/routing-generator/src/main/java/com/yahoo/vespa/hosted/routing/status/RoutingStatusClient.java index a4a37277f5a..70ed84aa014 100644 --- a/routing-generator/src/main/java/com/yahoo/vespa/hosted/routing/status/RoutingStatusClient.java +++ b/routing-generator/src/main/java/com/yahoo/vespa/hosted/routing/status/RoutingStatusClient.java @@ -5,7 +5,7 @@ import com.google.inject.Inject; import com.yahoo.component.AbstractComponent; import com.yahoo.lang.CachedSupplier; import com.yahoo.routing.config.ZoneConfig; -import com.yahoo.slime.Inspector; +import com.yahoo.slime.Cursor; import com.yahoo.slime.Slime; import com.yahoo.slime.SlimeUtils; import com.yahoo.vespa.athenz.api.AthenzService; @@ -17,6 +17,7 @@ import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.NoopUserTokenHandler; import org.apache.http.util.EntityUtils; import java.io.IOException; @@ -60,6 +61,8 @@ public class RoutingStatusClient extends AbstractComponent implements RoutingSta .build()) .setSSLContext(provider.getIdentitySslContext()) .setSSLHostnameVerifier(createHostnameVerifier(config)) + // Required to enable connection pooling, which is disabled by default when using mTLS + .setUserTokenHandler(NoopUserTokenHandler.INSTANCE) .setUserAgent("hosted-vespa-routing-status-client") .build(), URI.create(config.configserverVipUrl()) @@ -76,7 +79,7 @@ public class RoutingStatusClient extends AbstractComponent implements RoutingSta try { return cache.get().isActive(upstreamName); } catch (Exception e) { - log.log(Level.WARNING, "Failed to get status for '" + upstreamName + "'", e); + log.log(Level.WARNING, "Failed to get status for '" + upstreamName + "': " + Exceptions.toMessageString(e)); return true; // Assume IN if cache update fails } } @@ -91,11 +94,12 @@ public class RoutingStatusClient extends AbstractComponent implements RoutingSta } private Status status() { - Set<String> inactiveDeployments = SlimeUtils.entriesStream(get("/routing/v1/status").get()) - .map(Inspector::asString) + Slime slime = get("/routing/v2/status"); + Cursor root = slime.get(); + Set<String> inactiveDeployments = SlimeUtils.entriesStream(root.field("inactiveDeployments")) + .map(inspector -> inspector.field("upstreamName").asString()) .collect(Collectors.toUnmodifiableSet()); - boolean zoneActive = get("/routing/v1/status/zone").get().field("status").asString() - .equalsIgnoreCase("in"); + boolean zoneActive = root.field("zoneActive").asBool(); return new Status(zoneActive, inactiveDeployments); } diff --git a/routing-generator/src/test/java/com/yahoo/vespa/hosted/routing/status/RoutingStatusClientTest.java b/routing-generator/src/test/java/com/yahoo/vespa/hosted/routing/status/RoutingStatusClientTest.java index d30774a686a..2e923292280 100644 --- a/routing-generator/src/test/java/com/yahoo/vespa/hosted/routing/status/RoutingStatusClientTest.java +++ b/routing-generator/src/test/java/com/yahoo/vespa/hosted/routing/status/RoutingStatusClientTest.java @@ -19,18 +19,16 @@ public class RoutingStatusClientTest { @Test public void client() { - String deploymentUrl = "http://host/routing/v1/status"; - String zoneUrl = "http://host/routing/v1/status/zone"; + String statusUrl = "http://host/routing/v2/status"; HttpClientMock httpClient = new HttpClientMock(); RoutingStatusClient client = new RoutingStatusClient(httpClient, URI.create("http://host")); // Nothing is inactive - httpClient.setResponse("GET", deploymentUrl, inactiveDeployments()) - .setResponse("GET", zoneUrl, zoneActive(true)); + httpClient.setResponse("GET", statusUrl, response(true)); assertTrue(client.isActive("foo")); // Two upstreams are set inactive - httpClient.setResponse("GET", deploymentUrl, inactiveDeployments("bar", "foo")); + httpClient.setResponse("GET", statusUrl, response(true, "bar", "foo")); client.invalidateCache(); assertFalse(client.isActive("foo")); assertFalse(client.isActive("bar")); @@ -38,18 +36,17 @@ public class RoutingStatusClientTest { // Bad response results in active status client.invalidateCache(); - httpClient.setResponse("GET", deploymentUrl, badRequest("something went wrong")); + httpClient.setResponse("GET", statusUrl, badRequest("something went wrong")); assertTrue(client.isActive("foo")); // Inactive zone overrides deployment status client.invalidateCache(); - httpClient.setResponse("GET", deploymentUrl, inactiveDeployments("bar")); - httpClient.setResponse("GET", zoneUrl, zoneActive(false)); + httpClient.setResponse("GET", statusUrl, response(false, "bar")); assertFalse(client.isActive("foo")); assertFalse(client.isActive("bar")); // Zone is active again. Fall back to reading deployment status - httpClient.setResponse("GET", zoneUrl, zoneActive(true)); + httpClient.setResponse("GET", statusUrl, response(true, "bar")); client.invalidateCache(); assertTrue(client.isActive("foo")); assertFalse(client.isActive("bar")); @@ -59,14 +56,12 @@ public class RoutingStatusClientTest { return new JsonResponse("{\"message\":\"" + message + "\"}", 400); } - private static JsonResponse zoneActive(boolean active) { - return new JsonResponse("{\"status\":\"" + (active ? "IN" : "OUT") + "\"}", 200); - } - - private static JsonResponse inactiveDeployments(String... deployments) { - return new JsonResponse("[" + Arrays.stream(deployments) - .map(d -> "\"" + d + "\"") - .collect(Collectors.joining(",")) + "]", 200); + private static JsonResponse response(boolean zoneActive, String... inactiveUpstreams) { + String inactiveDeployments = "[" + Arrays.stream(inactiveUpstreams) + .map(d -> "{\"upstreamName\":\"" + d + "\"}") + .collect(Collectors.joining(",")) + "]"; + String json = "{\"inactiveDeployments\":" + inactiveDeployments + ",\"zoneActive\":" + zoneActive + "}"; + return new JsonResponse(json, 200); } } |