From da063eeb0f0a63a0973d7f40c5c0a10182d6332d Mon Sep 17 00:00:00 2001 From: jonmv Date: Wed, 1 Mar 2023 12:15:45 +0100 Subject: Preserve original exception when deployments fail to read from S3 --- .../hosted/controller/ApplicationController.java | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'controller-server') 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> endpointCertificateMetadata, boolean dryRun, Optional 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 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 decideCloudAccountOf(DeploymentId deployment, DeploymentSpec spec) { ZoneId zoneId = deployment.zoneId(); Optional requestedAccount = spec.instance(deployment.applicationId().instance()) -- cgit v1.2.3 From 1ab7c2bcb61c734521068d6539f93e0f2d45751c Mon Sep 17 00:00:00 2001 From: jonmv Date: Wed, 1 Mar 2023 21:17:03 +0100 Subject: Use explicit interface for autocloseable --- .../java/com/yahoo/vespa/hosted/controller/ApplicationController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'controller-server') 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 6ac5fed5116..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 @@ -635,7 +635,8 @@ public class ApplicationController { boolean dryRun, Optional testerCertificate) { DeploymentId deployment = new DeploymentId(application, zone); // Routing and metadata may have changed, so we need to refresh state after deployment, even if deployment fails. - try (var postDeployment = (() -> updateRoutingAndMeta(deployment, applicationPackage))) { + interface CleanCloseable extends AutoCloseable { void close(); } + try (CleanCloseable postDeployment = () -> updateRoutingAndMeta(deployment, applicationPackage)) { Optional dockerImageRepo = Optional.ofNullable( dockerImageRepoFlag .with(FetchVector.Dimension.ZONE_ID, zone.value()) -- cgit v1.2.3