diff options
author | jonmv <venstad@gmail.com> | 2023-03-01 12:15:45 +0100 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-03-01 12:15:45 +0100 |
commit | da063eeb0f0a63a0973d7f40c5c0a10182d6332d (patch) | |
tree | b52d4e26f363ce8ed6c778a11bb44b6a6a64c318 /controller-server | |
parent | 96c901e335f6d94e4941335fb43c6c9ff18dea28 (diff) |
Preserve original exception when deployments fail to read from S3
Diffstat (limited to 'controller-server')
-rw-r--r-- | controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java | 20 |
1 files changed, 9 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..6ac5fed5116 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,8 @@ 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. + try (var postDeployment = (() -> updateRoutingAndMeta(deployment, applicationPackage))) { Optional<DockerImage> dockerImageRepo = Optional.ofNullable( dockerImageRepoFlag .with(FetchVector.Dimension.ZONE_ID, zone.value()) @@ -669,19 +670,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()) |