summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java18
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/ValidationOverrideTest.java20
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/ConfigModelContext.java10
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/ClusterInfoTest.java8
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgrader.java9
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java3
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/Vespa9DefaultMetricSet.java2
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/Vespa9VespaMetricSet.java2
11 files changed, 53 insertions, 29 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java b/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java
index a07ef4b313a..f69cfa6d4c5 100644
--- a/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java
+++ b/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java
@@ -104,7 +104,7 @@ public class ValidationOverrides {
try {
return fromXml(IOUtils.readAll(reader));
} catch (IOException e) {
- throw new IllegalArgumentException("Could not read deployment spec", e);
+ throw new IllegalArgumentException("Could not read validation-overrides", e);
}
}
@@ -123,12 +123,16 @@ public class ValidationOverrides {
Element root = XML.getDocument(xmlForm).getDocumentElement();
List<ValidationOverrides.Allow> overrides = new ArrayList<>();
for (Element allow : XML.getChildren(root, "allow")) {
- Instant until = LocalDate.parse(allow.getAttribute("until"), DateTimeFormatter.ISO_DATE)
- .atStartOfDay().atZone(ZoneOffset.UTC).toInstant()
- .plus(Duration.ofDays(1)); // Make the override valid *on* the "until" date
- Optional<ValidationId> validationId = ValidationId.from(XML.getValue(allow));
- // skip unknown ids as they may be valid for other model versions
- validationId.ifPresent(id -> overrides.add(new Allow(id, until)));
+ try {
+ Instant until = LocalDate.parse(allow.getAttribute("until"), DateTimeFormatter.ISO_DATE)
+ .atStartOfDay().atZone(ZoneOffset.UTC).toInstant()
+ .plus(Duration.ofDays(1)); // Make the override valid *on* the "until" date
+ Optional<ValidationId> validationId = ValidationId.from(XML.getValue(allow));
+ // skip unknown ids as they may be valid for other model versions
+ validationId.ifPresent(id -> overrides.add(new Allow(id, until)));
+ } catch (RuntimeException e) {
+ throw new IllegalArgumentException(e);
+ }
}
return new ValidationOverrides(overrides, xmlForm);
}
diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/ValidationOverrideTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/ValidationOverrideTest.java
index bf71947a983..57f306bf989 100644
--- a/config-model-api/src/test/java/com/yahoo/config/application/api/ValidationOverrideTest.java
+++ b/config-model-api/src/test/java/com/yahoo/config/application/api/ValidationOverrideTest.java
@@ -69,6 +69,26 @@ public class ValidationOverrideTest {
e.getMessage());
}
}
+
+ @Test
+ public void testInvalidDate() {
+ String validationOverrides =
+ "<validation-overrides>" +
+ " <allow until='2000-02-31'>indexing-change</allow>" +
+ "</validation-overrides>";
+
+ try {
+ ValidationOverrides overrides = ValidationOverrides.fromXml(new StringReader(validationOverrides));
+ Instant now = ManualClock.at("2000-01-01T23:59:00");
+ overrides.allows("indexing-change", now);
+ overrides.validate(now);
+ Assert.fail("Expected validation interval override validation validation failure");
+ }
+ catch (IllegalArgumentException e) {
+ Assert.assertEquals("java.time.format.DateTimeParseException: Text '2000-02-31' could not be parsed: Invalid date 'FEBRUARY 31'",
+ e.getMessage());
+ }
+ }
@Test
public void testEmpty() {
diff --git a/config-model/src/main/java/com/yahoo/config/model/ConfigModelContext.java b/config-model/src/main/java/com/yahoo/config/model/ConfigModelContext.java
index abd803dcebb..ad50ad02171 100644
--- a/config-model/src/main/java/com/yahoo/config/model/ConfigModelContext.java
+++ b/config-model/src/main/java/com/yahoo/config/model/ConfigModelContext.java
@@ -9,6 +9,7 @@ import com.yahoo.config.model.api.ModelContext;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.producer.AnyConfigProducer;
import com.yahoo.config.model.producer.TreeConfigProducer;
+import com.yahoo.config.provision.CloudAccount;
import com.yahoo.config.provision.ClusterInfo;
import com.yahoo.config.provision.ClusterInfo.Builder;
import com.yahoo.config.provision.zone.ZoneId;
@@ -81,13 +82,8 @@ public final class ConfigModelContext {
ClusterInfo.Builder builder = new ClusterInfo.Builder();
spec.hostTTL(properties().applicationId().instance(), deployState.zone().environment(), deployState.zone().region())
.filter(ttl -> ! ttl.isZero())
- .ifPresent(ttl -> {
- ZoneId zoneId = ZoneId.from(deployState.zone().environment(), deployState.zone().region());
- if (spec.cloudAccount(deployState.zone().cloud().name(), properties().applicationId().instance(), zoneId).isUnspecified())
- throw new IllegalArgumentException("deployment spec specifies host TTL for " + zoneId +
- " but no cloud account is specified for this zone");
- builder.hostTTL(ttl);
- });
+ .filter(__ -> deployState.getProperties().cloudAccount().map(account -> ! account.isUnspecified()).orElse(false))
+ .ifPresent(builder::hostTTL);
spec.instance(properties().applicationId().instance())
.flatMap(instance -> instance.bcp().groups().stream()
.filter(group -> group.memberRegions().contains(properties().zone().region()))
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/ClusterInfoTest.java b/config-model/src/test/java/com/yahoo/vespa/model/ClusterInfoTest.java
index 1734e9f074f..16e13a66a44 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/ClusterInfoTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/ClusterInfoTest.java
@@ -12,6 +12,7 @@ import com.yahoo.config.provision.Cloud;
import com.yahoo.config.provision.CloudAccount;
import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.ClusterSpec.Id;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.RegionName;
@@ -216,7 +217,7 @@ public class ClusterInfoTest {
<deployment version='1.0' empty-host-ttl='1d'>
<instance id='default'>
<prod>
- <region cloud-account='gcp:foobar'>us-east-1</region>
+ <region>us-east-1</region>
<region empty-host-ttl='0m'>us-north-1</region>
<region>us-west-1</region>
</prod>
@@ -228,10 +229,7 @@ public class ClusterInfoTest {
CloudAccount account = CloudAccount.from("gcp:foobar");
assertEquals(Duration.ofHours(24), requestedCapacityIn(account, gcp, "default", "us-east-1", servicesXml, deploymentXml).get(new ClusterSpec.Id("testcontainer")).clusterInfo().hostTTL());
assertEquals(Duration.ZERO, requestedCapacityIn(account, gcp, "default", "us-north-1", servicesXml, deploymentXml).get(new ClusterSpec.Id("testcontainer")).clusterInfo().hostTTL());
- assertEquals("In container cluster 'testcontainer': deployment spec specifies host TTL for prod.us-west-1 but no cloud account is specified for this zone",
- Exceptions.toMessageString(assertThrows(IllegalArgumentException.class,
- () -> requestedCapacityIn(account, gcp, "default", "us-west-1", servicesXml, deploymentXml))));
-
+ assertEquals(Duration.ZERO, requestedCapacityIn(CloudAccount.empty, gcp, "default", "us-west-1", servicesXml, deploymentXml).get(new Id("testcontainer")).clusterInfo().hostTTL());
}
private Map<ClusterSpec.Id, Capacity> requestedCapacityIn(String instance, String region, String servicesXml, String deploymentXml) throws Exception {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
index bac2c0ab9d7..6d746c85d72 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
@@ -682,7 +682,9 @@ public class ApplicationController {
if (testerCertificate.isPresent()) {
operatorCertificates = Stream.concat(operatorCertificates.stream(), testerCertificate.stream()).toList();
}
- Supplier<Optional<CloudAccount>> cloudAccount = () -> decideCloudAccountOf(deployment, applicationPackage.truncatedPackage().deploymentSpec());
+ Supplier<Optional<CloudAccount>> cloudAccount = () -> decideCloudAccountOf(deployment,
+ zone.environment().isTest() ? requireApplication(TenantAndApplicationId.from(application)).deploymentSpec()
+ : applicationPackage.truncatedPackage().deploymentSpec());
List<DataplaneTokenVersions> dataplaneTokenVersions = controller.dataplaneTokenService().listTokens(application.tenant());
Supplier<Optional<EndpointCertificate>> endpointCertificateWrapper = () -> {
Optional<EndpointCertificate> data = endpointCertificate.get();
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
index 07695c17042..0ce3a3d75d4 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
@@ -131,15 +131,15 @@ public class InternalStepRunner implements StepRunner {
try {
return switch (step.get()) {
case deployTester -> deployTester(id, logger);
+ case installTester -> installTester(id, logger);
case deployInitialReal -> deployInitialReal(id, logger);
case installInitialReal -> installInitialReal(id, logger);
case deployReal -> deployReal(id, logger);
- case installTester -> installTester(id, logger);
case installReal -> installReal(id, logger);
case startStagingSetup -> startTests(id, true, logger);
case endStagingSetup -> endTests(id, true, logger);
- case endTests -> endTests(id, false, logger);
case startTests -> startTests(id, false, logger);
+ case endTests -> endTests(id, false, logger);
case copyVespaLogs -> copyVespaLogs(id, logger);
case deactivateReal -> deactivateReal(id, logger);
case deactivateTester -> deactivateTester(id, logger);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgrader.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgrader.java
index effcc4dd4df..40b51e692f3 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgrader.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgrader.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.controller.maintenance;
import com.yahoo.component.Version;
+import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.zone.NodeSlice;
import com.yahoo.config.provision.zone.ZoneApi;
import com.yahoo.text.Text;
@@ -50,7 +51,7 @@ public class SystemUpgrader extends InfrastructureUpgrader<VespaVersionTarget> {
@Override
protected boolean expectUpgradeOf(Node node, SystemApplication application, ZoneApi zone) {
- return eligibleForUpgrade(node);
+ return eligibleForUpgrade(node, zone);
}
@Override
@@ -90,7 +91,11 @@ public class SystemUpgrader extends InfrastructureUpgrader<VespaVersionTarget> {
}
/** Returns whether node in application should be upgraded by this */
- public static boolean eligibleForUpgrade(Node node) {
+ public static boolean eligibleForUpgrade(Node node, ZoneApi zone) {
+ // Temporary hack until GCP enclave works again
+ if (zone.getCloudName().equals(CloudName.GCP) && node.hostname().value().startsWith("e"))
+ return false;
+
return upgradableNodeStates.contains(node.state());
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java
index 9fb87735b42..a93c0dfda76 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java
@@ -185,7 +185,7 @@ public record VersionStatus(List<VespaVersion> versions, int currentMajor) {
for (var application : SystemApplication.notController()) {
var nodes = controller.serviceRegistry().configServer().nodeRepository()
.list(zone.getId(), NodeFilter.all().applications(application.id())).stream()
- .filter(SystemUpgrader::eligibleForUpgrade)
+ .filter(node -> SystemUpgrader.eligibleForUpgrade(node, zone))
.toList();
if (nodes.isEmpty()) continue;
boolean configConverged = application.configConvergedIn(zone.getId(), controller, Optional.empty());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java
index d3d66715202..a3595ca587c 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java
@@ -16,7 +16,6 @@ import org.junit.jupiter.api.Test;
import java.time.Duration;
import java.util.List;
import java.util.function.Function;
-import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -463,7 +462,7 @@ public class SystemUpgraderTest {
private List<Node> listNodes(ZoneApi zone, SystemApplication application) {
return nodeRepository().list(zone.getId(), NodeFilter.all().applications(application.id())).stream()
- .filter(SystemUpgrader::eligibleForUpgrade)
+ .filter(node -> SystemUpgrader.eligibleForUpgrade(node, zone))
.toList();
}
diff --git a/metrics/src/main/java/ai/vespa/metrics/set/Vespa9DefaultMetricSet.java b/metrics/src/main/java/ai/vespa/metrics/set/Vespa9DefaultMetricSet.java
index 0c7f8deccbb..1ca1d5d28d5 100644
--- a/metrics/src/main/java/ai/vespa/metrics/set/Vespa9DefaultMetricSet.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/Vespa9DefaultMetricSet.java
@@ -73,7 +73,7 @@ public class Vespa9DefaultMetricSet {
.metric(ContainerMetrics.JDISC_HTTP_SSL_HANDSHAKE_FAILURE_INCOMPATIBLE_CHIFERS.rate())
.metric(ContainerMetrics.JDISC_HTTP_SSL_HANDSHAKE_FAILURE_UNKNOWN.rate())
.metric(ContainerMetrics.JDISC_APPLICATION_FAILED_COMPONENT_GRAPHS.rate())
- .metric(ContainerMetrics.ATHENZ_TENANT_CERT_EXPIRY_SECONDS, EnumSet.of(max, last)) // TODO: Vespa 9: Remove last
+ .metric(ContainerMetrics.ATHENZ_TENANT_CERT_EXPIRY_SECONDS, EnumSet.of(min, max, last)) // TODO: Vespa 9: Remove max, last
.build();
}
diff --git a/metrics/src/main/java/ai/vespa/metrics/set/Vespa9VespaMetricSet.java b/metrics/src/main/java/ai/vespa/metrics/set/Vespa9VespaMetricSet.java
index 5a495878bb6..702390c9c07 100644
--- a/metrics/src/main/java/ai/vespa/metrics/set/Vespa9VespaMetricSet.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/Vespa9VespaMetricSet.java
@@ -192,7 +192,7 @@ public class Vespa9VespaMetricSet {
addMetric(metrics, ContainerMetrics.JDISC_SINGLETON_DEACTIVATION_FAILURE_COUNT.last());
addMetric(metrics, ContainerMetrics.JDISC_SINGLETON_DEACTIVATION_MILLIS.last());
- addMetric(metrics, ContainerMetrics.ATHENZ_TENANT_CERT_EXPIRY_SECONDS, EnumSet.of(max, last)); // TODO: Vespa 9: Remove last
+ addMetric(metrics, ContainerMetrics.ATHENZ_TENANT_CERT_EXPIRY_SECONDS, EnumSet.of(min, max, last)); // TODO: Vespa 9: Remove max, last
addMetric(metrics, ContainerMetrics.CONTAINER_IAM_ROLE_EXPIRY_SECONDS.baseName());
addMetric(metrics, ContainerMetrics.JDISC_HTTP_REQUEST_PREMATURELY_CLOSED.rate());