diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-07-05 16:06:56 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-07-05 16:06:56 +0200 |
commit | 0409e74ad21d1fccf3909f96bda64bacd54b102d (patch) | |
tree | 6c53453bbecc0965004cfac45b8870519c4b98e7 /node-repository | |
parent | c84211d12966c9a3a7c62a1f0440064f52921d94 (diff) |
Towards transactional application delete
Diffstat (limited to 'node-repository')
4 files changed, 48 insertions, 55 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CountingCuratorTransaction.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CountingCuratorTransaction.java deleted file mode 100644 index de7513de242..00000000000 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CountingCuratorTransaction.java +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.provision.persistence; - -import com.yahoo.transaction.Transaction; -import com.yahoo.vespa.curator.Curator; -import com.yahoo.vespa.curator.recipes.CuratorCounter; -import com.yahoo.vespa.curator.transaction.CuratorTransaction; - -import java.util.Collections; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * A curator transaction which increases a change counter on commit. - * As this only ever does a single thing it needs no operations. - */ -class CountingCuratorTransaction implements Transaction { - - private final CuratorCounter counter; - - public CountingCuratorTransaction(CuratorCounter counter) { - this.counter = counter; - } - - @Override - public Transaction add(Operation operation) { return this; } - - @Override - public Transaction add(List<Operation> operation) { return this; } - - @Override - public List<Operation> operations() { return Collections.emptyList(); } - - @Override - public void prepare() { - // Increase the counter also if there are prepare errors to throw away the cached state - // in case that state leads to the rollback - counter.next(); - } - - @Override - public void rollbackOrLog() { } - - @Override - public void close() { } - - @Override - public void commit() { } - -} diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java index c7134de5ae6..b1fb7f53616 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java @@ -73,7 +73,7 @@ public class CuratorDatabase { */ public CuratorTransaction newCuratorTransactionIn(NestedTransaction transaction) { // Add a counting transaction first, to make sure we always invalidate the current state on any transaction commit - transaction.add(new CountingCuratorTransaction(changeGenerationCounter), CuratorTransaction.class); + transaction.add(new EagerCountingCuratorTransaction(changeGenerationCounter), CuratorTransaction.class); CuratorTransaction curatorTransaction = new CuratorTransaction(curator); transaction.add(curatorTransaction); return curatorTransaction; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java index 3152db59427..2ac7358a05c 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabaseClient.java @@ -7,7 +7,6 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.log.LogLevel; import com.yahoo.path.Path; import com.yahoo.transaction.NestedTransaction; -import com.yahoo.transaction.Transaction; import com.yahoo.vespa.curator.Curator; import com.yahoo.vespa.curator.transaction.CuratorTransaction; import com.yahoo.vespa.hosted.provision.Node; @@ -101,7 +100,7 @@ public class CuratorDatabaseClient { Path path = toPath(state, hostName); NestedTransaction transaction = new NestedTransaction(); CuratorTransaction curatorTransaction = curatorDatabase.newCuratorTransactionIn(transaction); - curatorTransaction.add(CuratorOperations.delete(path.getAbsolute())); + curatorTransaction.add(CuratorOperations.deleteOrThrow(path.getAbsolute())); transaction.commit(); log.log(LogLevel.INFO, "Removed: " + state + " node " + hostName); return true; @@ -148,7 +147,7 @@ public class CuratorDatabaseClient { toState.isAllocated() ? node.allocation() : Optional.empty(), newNodeHistory(node, toState), node.type()); - curatorTransaction.add(CuratorOperations.delete(toPath(node).getAbsolute())) + curatorTransaction.add(CuratorOperations.deleteOrThrow(toPath(node).getAbsolute())) .add(CuratorOperations.create(toPath(toState, newNode.hostname()).getAbsolute(), nodeSerializer.toJson(newNode))); writtenNodes.add(newNode); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/EagerCountingCuratorTransaction.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/EagerCountingCuratorTransaction.java new file mode 100644 index 00000000000..6e940763449 --- /dev/null +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/EagerCountingCuratorTransaction.java @@ -0,0 +1,45 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.provision.persistence; + +import com.yahoo.transaction.AbstractTransaction; +import com.yahoo.transaction.Transaction; +import com.yahoo.vespa.curator.recipes.CuratorCounter; + +/** + * A curator transaction of curator counting operations which increments during prepare + * such that the counter is also increased if there is a commit error. + */ +class EagerCountingCuratorTransaction extends AbstractTransaction<EagerCountingCuratorTransaction.CountingCuratorOperation> { + + /** Creates a counting curator transaction containing a single increment operation */ + public EagerCountingCuratorTransaction(CuratorCounter counter) { + add(new CountingCuratorOperation(counter)); + } + + @Override + public void prepare() { + for (CountingCuratorOperation operation : operations()) + operation.next(); + } + + @Override + public void commit() { } + + @Override + public void rollbackOrLog() { } + + static class CountingCuratorOperation implements Transaction.Operation { + + private final CuratorCounter counter; + + public CountingCuratorOperation(CuratorCounter counter) { + this.counter = counter; + } + + public void next() { + counter.next(); + } + + } + +} |