summaryrefslogtreecommitdiffstats
path: root/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-03-01 12:15:45 +0100
committerjonmv <venstad@gmail.com>2023-03-01 12:15:45 +0100
commitda063eeb0f0a63a0973d7f40c5c0a10182d6332d (patch)
treeb52d4e26f363ce8ed6c778a11bb44b6a6a64c318 /controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
parent96c901e335f6d94e4941335fb43c6c9ff18dea28 (diff)
Preserve original exception when deployments fail to read from S3
Diffstat (limited to 'controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java20
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())