summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@yahooinc.com>2023-03-30 05:25:54 -0700
committerØyvind Grønnesby <oyving@yahooinc.com>2023-03-30 05:25:54 -0700
commitf86324ef8662bda7bf11bacbcc2c84e07e1b813e (patch)
treeb82c492a292376b65cd0251badda7a5afba74c35 /controller-server
parent1e8cf546bfa39d23c672350cf44b75b2ea4f23ee (diff)
parent3fb3c3898e8234d2e2fd8a086b4b341b27977cbf (diff)
Merge remote-tracking branch 'origin/master' into ogronnesby/gpu-billing
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java10
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ZoneApiMock.java15
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ZoneRegistryMock.java15
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java6
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-cloud.json3
5 files changed, 41 insertions, 8 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index 6c614738ddf..8a0e2d01d8c 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -27,6 +27,7 @@ import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.ZoneEndpoint.AllowedUrn;
import com.yahoo.config.provision.zone.RoutingMethod;
+import com.yahoo.config.provision.zone.ZoneApi;
import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.container.handler.metrics.JsonResponse;
import com.yahoo.container.jdisc.EmptyResponse;
@@ -1659,6 +1660,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
else {
deploymentObject.setString("environment", deployment.zone().environment().value());
deploymentObject.setString("region", deployment.zone().region().value());
+ addAvailabilityZone(deploymentObject, deployment.zone());
deploymentObject.setString("url", withPath(request.getUri().getPath() +
"/instance/" + instance.name().value() +
"/environment/" + deployment.zone().environment().value() +
@@ -1755,6 +1757,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
deploymentObject.setString("environment", deployment.zone().environment().value());
deploymentObject.setString("region", deployment.zone().region().value());
deploymentObject.setString("instance", instance.id().instance().value()); // pointless
+ addAvailabilityZone(deploymentObject, deployment.zone());
deploymentObject.setString("url", withPath(request.getUri().getPath() +
"/environment/" + deployment.zone().environment().value() +
"/region/" + deployment.zone().region().value(),
@@ -1837,6 +1840,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
response.setString("instance", deploymentId.applicationId().instance().value()); // pointless
response.setString("environment", deploymentId.zoneId().environment().value());
response.setString("region", deploymentId.zoneId().region().value());
+ addAvailabilityZone(response, deployment.zone());
var application = controller.applications().requireApplication(TenantAndApplicationId.from(deploymentId.applicationId()));
// Add zone endpoints
@@ -3020,6 +3024,12 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
return new MessageResponse("All deployments removed");
}
+ private void addAvailabilityZone(Cursor object, ZoneId zoneId) {
+ ZoneApi zone = controller.zoneRegistry().get(zoneId);
+ if (!zone.getCloudName().equals(CloudName.AWS)) return;
+ object.setString("availabilityZone", zone.getCloudNativeAvailabilityZone());
+ }
+
private ZoneId requireZone(String environment, String region) {
return requireZone(ZoneId.from(environment, region));
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ZoneApiMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ZoneApiMock.java
index 528ef6d6192..6fd44e09d8d 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ZoneApiMock.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ZoneApiMock.java
@@ -20,15 +20,17 @@ public class ZoneApiMock implements ZoneApi {
private final ZoneId virtualId;
private final CloudName cloudName;
private final String cloudNativeRegionName;
+ private final String cloudNativeAvailabilityZone;
public static Builder newBuilder() { return new Builder(); }
- private ZoneApiMock(SystemName systemName, ZoneId id, ZoneId virtualId, CloudName cloudName, String cloudNativeRegionName) {
+ private ZoneApiMock(SystemName systemName, ZoneId id, ZoneId virtualId, CloudName cloudName, String cloudNativeRegionName, String cloudNativeAvailabilityZone) {
this.systemName = systemName;
this.id = id;
this.virtualId = virtualId;
this.cloudName = cloudName;
this.cloudNativeRegionName = cloudNativeRegionName;
+ this.cloudNativeAvailabilityZone = cloudNativeAvailabilityZone;
if (virtualId != null && virtualId.equals(id)) {
throw new IllegalArgumentException("Virtual ID cannot be equal to zone ID: " + id);
}
@@ -64,6 +66,9 @@ public class ZoneApiMock implements ZoneApi {
public String getCloudNativeRegionName() { return cloudNativeRegionName; }
@Override
+ public String getCloudNativeAvailabilityZone() { return cloudNativeAvailabilityZone; }
+
+ @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
@@ -88,6 +93,7 @@ public class ZoneApiMock implements ZoneApi {
private ZoneId virtualId = null;
private CloudName cloudName = CloudName.DEFAULT;
private String cloudNativeRegionName = id.region().value();
+ private String cloudNativeAvailabilityZone = "az1";
public Builder with(ZoneId id) {
this.id = id;
@@ -124,8 +130,13 @@ public class ZoneApiMock implements ZoneApi {
return this;
}
+ public Builder withCloudNativeAvailabilityZone(String cloudAvailabilityZone) {
+ this.cloudNativeAvailabilityZone = cloudAvailabilityZone;
+ return this;
+ }
+
public ZoneApiMock build() {
- return new ZoneApiMock(systemName, id, virtualId, cloudName, cloudNativeRegionName);
+ return new ZoneApiMock(systemName, id, virtualId, cloudName, cloudNativeRegionName, cloudNativeAvailabilityZone);
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ZoneRegistryMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ZoneRegistryMock.java
index e59c677d0fa..611f0bab904 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ZoneRegistryMock.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ZoneRegistryMock.java
@@ -32,6 +32,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
@@ -62,9 +63,9 @@ public class ZoneRegistryMock extends AbstractComponent implements ZoneRegistry
if (system.isPublic()) {
this.zones = List.of(ZoneApiMock.fromId("test.us-east-1"),
ZoneApiMock.fromId("staging.us-east-3"),
- ZoneApiMock.fromId("prod.aws-us-east-1c"),
- ZoneApiMock.fromId("prod.aws-eu-west-1a"),
- ZoneApiMock.fromId("dev.aws-us-east-1c"));
+ ZoneApiMock.newBuilder().withId("prod.aws-us-east-1c").withCloud("aws").withCloudNativeAvailabilityZone("use1-az2").build(),
+ ZoneApiMock.newBuilder().withId("prod.aws-eu-west-1a").withCloud("aws").withCloudNativeAvailabilityZone("euw1-az3").build(),
+ ZoneApiMock.newBuilder().withId("dev.aws-us-east-1c").withCloud("aws").withCloudNativeAvailabilityZone("use1-az2").build());
setRoutingMethod(this.zones, RoutingMethod.exclusive);
} else {
this.zones = List.of(ZoneApiMock.fromId("test.us-east-1"),
@@ -299,6 +300,14 @@ public class ZoneRegistryMock extends AbstractComponent implements ZoneRegistry
}
@Override
+ public ZoneApi get(ZoneId zoneId) {
+ return zones.stream()
+ .filter(zone -> zone.getId().equals(zoneId))
+ .findFirst()
+ .orElseThrow(() -> new NoSuchElementException("No zone with id '" + zoneId + "'"));
+ }
+
+ @Override
public URI getMonitoringSystemUri(DeploymentId deploymentId) {
return URI.create("http://monitoring-system.test/?environment=" + deploymentId.zoneId().environment().value() + "&region="
+ deploymentId.zoneId().region().value() + "&application=" + deploymentId.applicationId().toShortString());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java
index 0490a9bdcc5..fe14d696011 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java
@@ -43,10 +43,12 @@ public class ArchiveAccessMaintainerTest {
assertEquals(new ArchiveAccess().withAWSRole(tenant1role), archiveService.authorizeAccessByTenantName.get(tenant1));
assertEquals(new ArchiveAccess().withAWSRole(tenant2role), archiveService.authorizeAccessByTenantName.get(tenant2));
+ var zoneRegistry = tester.controller().zoneRegistry();
var expected = Map.of("archive.bucketCount",
- tester.controller().zoneRegistry().zonesIncludingSystem().all().ids().stream()
+ zoneRegistry.zonesIncludingSystem().all().ids().stream()
.collect(Collectors.toMap(
- zone -> Map.of("zone", zone.value(), "cloud", "default"),
+ zone -> Map.of("zone", zone.value(), "cloud",
+ zoneRegistry.hasZone(zone) ? zoneRegistry.get(zone).getCloudName().value() : "default"),
zone -> zone.equals(testZone) ? 1d : 0d)));
assertEquals(expected, metric.metrics());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-cloud.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-cloud.json
index 4d0f1259c07..bb4136ed0ba 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-cloud.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-cloud.json
@@ -4,6 +4,7 @@
"instance": "default",
"environment": "prod",
"region": "aws-us-east-1c",
+ "availabilityZone": "use1-az2",
"endpoints": [
{
"cluster": "default",
@@ -30,7 +31,7 @@
},
"status": "complete",
"quota": 1.304,
- "activity": { },
+ "activity": {},
"metrics": {
"queriesPerSecond": 0.0,
"writesPerSecond": 0.0,