summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java21
1 files changed, 10 insertions, 11 deletions
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 a4bded314d9..f6ac4626196 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
@@ -634,7 +634,9 @@ public class ApplicationController {
Supplier<Optional<EndpointCertificateMetadata>> endpointCertificateMetadata,
boolean dryRun, Optional<X509Certificate> testerCertificate) {
DeploymentId deployment = new DeploymentId(application, zone);
- try {
+ // Routing and metadata may have changed, so we need to refresh state after deployment, even if deployment fails.
+ interface CleanCloseable extends AutoCloseable { void close(); }
+ try (CleanCloseable postDeployment = () -> updateRoutingAndMeta(deployment, applicationPackage)) {
Optional<DockerImage> dockerImageRepo = Optional.ofNullable(
dockerImageRepoFlag
.with(FetchVector.Dimension.ZONE_ID, zone.value())
@@ -669,19 +671,16 @@ public class ApplicationController {
cloudAccount, dryRun));
return preparedApplication.deploymentResult();
- } finally {
- // Even if prepare fails, routing configuration may need to be updated
- if ( ! application.instance().isTester()) {
- controller.routing().of(deployment).configure(applicationPackage.truncatedPackage().deploymentSpec());
- if (zone.environment().isManuallyDeployed())
- controller.applications().applicationStore().putMeta(deployment,
- clock.instant(),
- applicationPackage.truncatedPackage().metaDataZip());
-
- }
}
}
+ private void updateRoutingAndMeta(DeploymentId id, ApplicationPackageStream data) {
+ if (id.applicationId().instance().isTester()) return;
+ controller.routing().of(id).configure(data.truncatedPackage().deploymentSpec());
+ if ( ! id.zoneId().environment().isManuallyDeployed()) return;
+ controller.applications().applicationStore().putMeta(id, clock.instant(), data.truncatedPackage().metaDataZip());
+ }
+
public Optional<CloudAccount> decideCloudAccountOf(DeploymentId deployment, DeploymentSpec spec) {
ZoneId zoneId = deployment.zoneId();
Optional<CloudAccount> requestedAccount = spec.instance(deployment.applicationId().instance())