diff options
Diffstat (limited to 'configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelGenerationCounter.java')
-rw-r--r-- | configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelGenerationCounter.java | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelGenerationCounter.java b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelGenerationCounter.java index 589363467b0..0527fc288f6 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelGenerationCounter.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelGenerationCounter.java @@ -2,10 +2,14 @@ package com.yahoo.vespa.config.server; import com.yahoo.path.Path; +import com.yahoo.transaction.AbstractTransaction; +import com.yahoo.transaction.Transaction; import com.yahoo.vespa.config.GenerationCounter; import com.yahoo.vespa.curator.recipes.CuratorCounter; import com.yahoo.vespa.curator.Curator; +import java.util.logging.Logger; + /** * Distributed global generation counter for the super model. * @@ -37,4 +41,55 @@ public class SuperModelGenerationCounter implements GenerationCounter { public synchronized long get() { return counter.get(); } + + /** Returns a transaction which increments this */ + public IncrementTransaction incrementTransaction() { + return new IncrementTransaction(counter); + } + + /** An increment transaction */ + public static class IncrementTransaction extends AbstractTransaction { + + /** Creates a counting curator transaction containing a single increment operation */ + public IncrementTransaction(CuratorCounter counter) { + add(new IncrementOperation(counter)); + } + + @Override + public void prepare() { } + + @Override + public void commit() { + for (Operation operation : operations()) + ((IncrementOperation)operation).commit(); + } + + @Override + public void rollbackOrLog() { + for (Operation operation : operations()) + ((IncrementOperation)operation).rollback(); + } + + public static class IncrementOperation implements Transaction.Operation { + + private static final Logger log = Logger.getLogger(IncrementOperation.class.getName()); + private final CuratorCounter counter; + + public IncrementOperation(CuratorCounter counter) { + this.counter = counter; + } + + public void commit() { + counter.next(); + } + + public void rollback() { + // ok; we're just losing a generation number + } + + public String toString() { return "increment " + counterPath + " operation"; } + + } + + } } |