diff options
author | jonmv <venstad@gmail.com> | 2023-01-20 18:36:57 +0100 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-01-20 18:36:57 +0100 |
commit | 9aaafe0c24e5eb961e644b886be364bbd2ec966d (patch) | |
tree | d38ae71cf0ac87ab18bff4f74b487fa385af44b0 | |
parent | 1408cb83b6b65bfbe17cf0a3d5b619635e15463e (diff) |
Hold deployment lock while deactivating (also held when deploying)
-rw-r--r-- | controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java | 9 |
1 files changed, 5 insertions, 4 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 2693fdcbd7c..d053106fcee 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 @@ -504,7 +504,6 @@ public class ApplicationController { instance = application.get().require(job.application().instance()); containerEndpoints = controller.routing().of(deployment).prepare(application); - } // Release application lock while doing the deployment, which is a lengthy task. Supplier<Optional<EndpointCertificateMetadata>> endpointCertificateMetadata = () -> { @@ -867,9 +866,11 @@ public class ApplicationController { /** Deactivate application in the given zone. Even if the application itself does not exist, deactivation of the deployment will still be attempted */ public void deactivate(ApplicationId instanceId, ZoneId zone) { TenantAndApplicationId applicationId = TenantAndApplicationId.from(instanceId); - try (Mutex lock = lock(applicationId)) { - Optional<LockedApplication> application = getApplication(applicationId).map(app -> new LockedApplication(app, lock)); - deactivate(instanceId, zone, application).ifPresent(this::store); + try (Mutex deploymentLock = lockForDeployment(instanceId, zone)) { + try (Mutex lock = lock(applicationId)) { + Optional<LockedApplication> application = getApplication(applicationId).map(app -> new LockedApplication(app, lock)); + deactivate(instanceId, zone, application).ifPresent(this::store); + } } } |