summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-01-20 18:36:57 +0100
committerjonmv <venstad@gmail.com>2023-01-20 18:36:57 +0100
commit9aaafe0c24e5eb961e644b886be364bbd2ec966d (patch)
treed38ae71cf0ac87ab18bff4f74b487fa385af44b0 /controller-server
parent1408cb83b6b65bfbe17cf0a3d5b619635e15463e (diff)
Hold deployment lock while deactivating (also held when deploying)
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java9
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);
+ }
}
}