diff options
author | Harald Musum <musum@verizonmedia.com> | 2023-03-01 22:05:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-01 22:05:11 +0100 |
commit | 33dad721013674e998b146e5920cd0d0697557ea (patch) | |
tree | 73e87fa8bcd899c73d7cfcfe2288782c0b725208 | |
parent | 19e21dea23b2e9964f2168d3b9041fbc206958c2 (diff) | |
parent | 1ab7c2bcb61c734521068d6539f93e0f2d45751c (diff) |
Merge pull request #26247 from vespa-engine/jonmv/preserve-original-exception
Preserve original exception when deployments fail to read from S3
-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()) |