summaryrefslogtreecommitdiffstats
path: root/config-provisioning
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2020-10-20 11:20:40 +0200
committerJon Bratseth <bratseth@gmail.com>2020-10-22 15:13:13 +0200
commitdd6fde6bfd38f24b6fff64f0eb81bb834f109adb (patch)
tree43984e9e1546e13db2d9aa396bc370034916f214 /config-provisioning
parentaae6832c3aa905f063a9892ba7f799f0e7404d5a (diff)
Store scaling events in ZooKeeper
Diffstat (limited to 'config-provisioning')
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ActivationContext.java20
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationTransaction.java44
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ClusterResources.java1
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Provisioner.java9
4 files changed, 74 insertions, 0 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ActivationContext.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ActivationContext.java
new file mode 100644
index 00000000000..6cc7ec4c5bc
--- /dev/null
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ActivationContext.java
@@ -0,0 +1,20 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.config.provision;
+
+/**
+ * The context passed to the node repo when activating a node.
+ *
+ * @author bratseth
+ */
+public class ActivationContext {
+
+ private final long generation;
+
+ public ActivationContext(long generation) {
+ this.generation = generation;
+ }
+
+ /** Returns the application config generation we are activating */
+ public long generation() { return generation; }
+
+}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationTransaction.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationTransaction.java
new file mode 100644
index 00000000000..d21f7cfe5ae
--- /dev/null
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationTransaction.java
@@ -0,0 +1,44 @@
+// 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 com.yahoo.transaction.NestedTransaction;
+
+import java.io.Closeable;
+import java.util.Objects;
+
+/**
+ * A transaction which exists while holding the application provision lock.
+ *
+ * @author bratseth
+ */
+public class ApplicationTransaction implements Closeable {
+
+ private final ProvisionLock lock;
+ private final NestedTransaction transaction;
+
+ public ApplicationTransaction(ProvisionLock lock, NestedTransaction transaction) {
+ this.lock = Objects.requireNonNull(lock);
+ this.transaction = Objects.requireNonNull(transaction);
+ }
+
+ public ApplicationId application() { return lock.application(); }
+
+ /** Returns the lock held by this */
+ // Usage of this might indicate we are writing changes directly (outside of the transaction) and should probably be avoided
+ public ProvisionLock lock() { return lock; }
+
+ /** Returns the NestedTransaction of this */
+ public NestedTransaction nested() { return transaction; }
+
+ @Override
+ public void close() {
+ try {
+ transaction.commit();
+ }
+ finally {
+ lock.close();
+ }
+ }
+
+}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterResources.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterResources.java
index 9aaf0d365cd..f1c86485a64 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterResources.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterResources.java
@@ -1,6 +1,7 @@
// 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 java.util.List;
import java.util.Objects;
/**
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 1eb2c1e61b2..9e75e9278e8 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
@@ -41,8 +41,12 @@ public interface Provisioner {
* @param hosts a set of {@link HostSpec}.
* @param lock A provision lock for the relevant application. This must be held when calling this.
*/
+ // TODO: Remove after November 2020
void activate(NestedTransaction transaction, Collection<HostSpec> hosts, ProvisionLock lock);
+ /** Activates the allocation of nodes to this application captured in the hosts argument. */
+ void activate(Collection<HostSpec> hosts, ActivationContext context, ApplicationTransaction transaction);
+
/**
* Transactionally remove this application.
*
@@ -58,8 +62,13 @@ public interface Provisioner {
* @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.
*/
+ // TODO: Remove after November 2020
void remove(NestedTransaction transaction, ProvisionLock lock);
+ /** Transactionally remove an application under lock. */
+ // TODO: Remove after November 2020
+ void remove(ApplicationTransaction transaction);
+
/**
* Requests a restart of the services of the given application
*