summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/config/model/ConfigModelContext.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/main/java/com/yahoo/config/model/ConfigModelContext.java')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/ConfigModelContext.java29
1 files changed, 21 insertions, 8 deletions
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 13d87b852e4..b4b3dccd440 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
@@ -2,16 +2,21 @@
package com.yahoo.config.model;
import com.yahoo.config.application.api.ApplicationPackage;
+import com.yahoo.config.application.api.Bcp.Group;
import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.config.application.api.DeploymentSpec;
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.ClusterInfo;
+import com.yahoo.config.provision.ClusterInfo.Builder;
+import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.vespa.model.VespaModel;
import java.time.Duration;
import java.util.Comparator;
+import java.util.Optional;
import java.util.stream.Stream;
/**
@@ -72,14 +77,22 @@ public final class ConfigModelContext {
/** Returns a cluster info builder pre-populated with info known in this context. */
public ClusterInfo.Builder clusterInfo() {
- var instance = getApplicationPackage().getDeploymentSpec().instance(properties().applicationId().instance());
- if ( ! instance.isPresent()) return new ClusterInfo.Builder();
- var maxDeadline = instance.get().bcp().groups().stream()
- .filter(group -> group.memberRegions().contains(properties().zone().region()))
- .map(group -> group.deadline())
- .min(Comparator.comparing(deadline -> deadline))
- .orElse(Duration.ofMinutes(0));
- return new ClusterInfo.Builder().bcpDeadline(maxDeadline);
+ DeploymentSpec spec = getApplicationPackage().getDeploymentSpec();
+ ClusterInfo.Builder builder = new ClusterInfo.Builder();
+ spec.hostTTL(properties().applicationId().instance(), deployState.zone().environment(), deployState.zone().region())
+ .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");
+ });
+ spec.instance(properties().applicationId().instance())
+ .flatMap(instance -> instance.bcp().groups().stream()
+ .filter(group -> group.memberRegions().contains(properties().zone().region()))
+ .map(Group::deadline)
+ .min(Comparator.naturalOrder()))
+ .ifPresent(builder::bcpDeadline);
+ return builder;
}
/**