diff options
Diffstat (limited to 'config-provisioning/src/main/java')
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 * |