diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-10-07 11:54:27 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2020-10-08 10:29:46 +0200 |
commit | e7e8ba7e6ef246c77c221eb0ef0e6d66ec72e3bb (patch) | |
tree | 20c070e6f1772420b2ad74273f921c147139a6a4 /config-provisioning | |
parent | ced37852666ad480c485cab2e361e093381639df (diff) |
Acquire provision lock for transactional writes
Diffstat (limited to 'config-provisioning')
-rw-r--r-- | config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionLock.java | 32 | ||||
-rw-r--r-- | config-provisioning/src/main/java/com/yahoo/config/provision/Provisioner.java | 22 |
2 files changed, 54 insertions, 0 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionLock.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionLock.java new file mode 100644 index 00000000000..633c8520e72 --- /dev/null +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionLock.java @@ -0,0 +1,32 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.provision; + +import com.yahoo.transaction.Mutex; + +import java.util.Objects; + +/** + * A type-safe wrapper for an application's provision lock. + * + * @author mpolden + */ +public class ProvisionLock implements AutoCloseable { + + private final ApplicationId application; + private final Mutex lock; + + public ProvisionLock(ApplicationId application, Mutex lock) { + this.application = Objects.requireNonNull(application); + this.lock = Objects.requireNonNull(lock); + } + + public ApplicationId application() { + return application; + } + + @Override + public void close() { + lock.close(); + } + +} diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Provisioner.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Provisioner.java index 2a1528f5368..1eb2c1e61b2 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/Provisioner.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Provisioner.java @@ -31,17 +31,36 @@ public interface Provisioner { * @param application The {@link ApplicationId} that was activated. * @param hosts a set of {@link HostSpec}. */ + // TODO(mpolden): Remove void activate(NestedTransaction transaction, ApplicationId application, Collection<HostSpec> hosts); /** + * Activates the allocation of nodes to this application captured in the hosts argument. + * + * @param transaction Transaction with operations to commit together with any operations done within the provisioner. + * @param hosts a set of {@link HostSpec}. + * @param lock A provision lock for the relevant application. This must be held when calling this. + */ + void activate(NestedTransaction transaction, Collection<HostSpec> hosts, ProvisionLock lock); + + /** * Transactionally remove this application. * * @param transaction Transaction with operations to commit together with any operations done within the provisioner. * @param application the application to remove */ + // TODO(mpolden): Remove void remove(NestedTransaction transaction, ApplicationId application); /** + * Transactionally remove application guarded by given lock. + * + * @param transaction Transaction with operations to commit together with any operations done within the provisioner. + * @param lock A provision lock for the relevant application. This must be held when calling this. + */ + void remove(NestedTransaction transaction, ProvisionLock lock); + + /** * Requests a restart of the services of the given application * * @param application the application to restart @@ -49,4 +68,7 @@ public interface Provisioner { */ void restart(ApplicationId application, HostFilter filter); + /** Returns a provision lock for the given application */ + ProvisionLock lock(ApplicationId application); + } |