summaryrefslogtreecommitdiffstats
path: root/config-provisioning
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-10-07 11:54:27 +0200
committerMartin Polden <mpolden@mpolden.no>2020-10-08 10:29:46 +0200
commite7e8ba7e6ef246c77c221eb0ef0e6d66ec72e3bb (patch)
tree20c070e6f1772420b2ad74273f921c147139a6a4 /config-provisioning
parentced37852666ad480c485cab2e361e093381639df (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.java32
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Provisioner.java22
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);
+
}