Support for a distributed counter
Change-Id: I346e9baa28556fac13e53771021f5f6fbcd75ac9
diff --git a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/PartitionedDatabase.java b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/PartitionedDatabase.java
index 178f49f..bbbd9b6 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/PartitionedDatabase.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/PartitionedDatabase.java
@@ -90,6 +90,21 @@
}
@Override
+ public CompletableFuture<Map<String, Long>> counters() {
+ checkState(isOpen.get(), DB_NOT_OPEN);
+ Map<String, Long> counters = Maps.newConcurrentMap();
+ return CompletableFuture.allOf(partitions
+ .stream()
+ .map(db -> db.counters()
+ .thenApply(m -> {
+ counters.putAll(m);
+ return null;
+ }))
+ .toArray(CompletableFuture[]::new))
+ .thenApply(v -> counters);
+ }
+
+ @Override
public CompletableFuture<Integer> size(String tableName) {
checkState(isOpen.get(), DB_NOT_OPEN);
AtomicInteger totalSize = new AtomicInteger(0);
@@ -219,6 +234,18 @@
}
@Override
+ public CompletableFuture<Long> nextValue(String counterName) {
+ checkState(isOpen.get(), DB_NOT_OPEN);
+ return partitioner.getPartition(counterName, counterName).nextValue(counterName);
+ }
+
+ @Override
+ public CompletableFuture<Long> currentValue(String counterName) {
+ checkState(isOpen.get(), DB_NOT_OPEN);
+ return partitioner.getPartition(counterName, counterName).currentValue(counterName);
+ }
+
+ @Override
public CompletableFuture<Boolean> prepareAndCommit(Transaction transaction) {
Map<Database, Transaction> subTransactions = createSubTransactions(transaction);
if (subTransactions.isEmpty()) {