summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2023-03-01 22:05:11 +0100
committerGitHub <noreply@github.com>2023-03-01 22:05:11 +0100
commit33dad721013674e998b146e5920cd0d0697557ea (patch)
tree73e87fa8bcd899c73d7cfcfe2288782c0b725208
parent19e21dea23b2e9964f2168d3b9041fbc206958c2 (diff)
parent1ab7c2bcb61c734521068d6539f93e0f2d45751c (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.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())