diff options
-rw-r--r-- | controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java | 21 |
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()) |