summaryrefslogtreecommitdiffstats
path: root/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationTransaction.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationTransaction.java')
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationTransaction.java44
1 files changed, 44 insertions, 0 deletions
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();
+ }
+ }
+
+}