Madan Jampani
Committed by Gerrit Code Review

New and direct StorageService method for creating an AtomicCounter

Change-Id: I8c189584dde590842075bea7e03c4c8ecf8d72c2
...@@ -39,10 +39,6 @@ public class CounterTestIncrementCommand extends AbstractShellCommand { ...@@ -39,10 +39,6 @@ public class CounterTestIncrementCommand extends AbstractShellCommand {
39 39
40 private final Logger log = getLogger(getClass()); 40 private final Logger log = getLogger(getClass());
41 41
42 - @Option(name = "-i", aliases = "--inMemory", description = "use in memory map?",
43 - required = false, multiValued = false)
44 - private boolean inMemory = false;
45 -
46 @Option(name = "-g", aliases = "--getFirst", description = "get the counter's value before adding", 42 @Option(name = "-g", aliases = "--getFirst", description = "get the counter's value before adding",
47 required = false, multiValued = false) 43 required = false, multiValued = false)
48 private boolean getFirst = false; 44 private boolean getFirst = false;
...@@ -63,16 +59,7 @@ public class CounterTestIncrementCommand extends AbstractShellCommand { ...@@ -63,16 +59,7 @@ public class CounterTestIncrementCommand extends AbstractShellCommand {
63 @Override 59 @Override
64 protected void execute() { 60 protected void execute() {
65 StorageService storageService = get(StorageService.class); 61 StorageService storageService = get(StorageService.class);
66 - if (inMemory) { 62 + atomicCounter = storageService.getAsyncAtomicCounter(counter);
67 - atomicCounter = storageService.atomicCounterBuilder()
68 - .withName(counter)
69 - .withPartitionsDisabled()
70 - .build();
71 - } else {
72 - atomicCounter = storageService.atomicCounterBuilder()
73 - .withName(counter)
74 - .build();
75 - }
76 CompletableFuture<Long> result; 63 CompletableFuture<Long> result;
77 if (delta != null) { 64 if (delta != null) {
78 if (getFirst) { 65 if (getFirst) {
......
...@@ -95,9 +95,8 @@ public class DistributedConsensusLoadTest { ...@@ -95,9 +95,8 @@ public class DistributedConsensusLoadTest {
95 appId = coreService.registerApplication("org.onosproject.loadtest"); 95 appId = coreService.registerApplication("org.onosproject.loadtest");
96 log.info("Started with {}", appId); 96 log.info("Started with {}", appId);
97 for (int i = 0; i < TOTAL_COUNTERS; ++i) { 97 for (int i = 0; i < TOTAL_COUNTERS; ++i) {
98 - AsyncAtomicCounter counter = storageService.atomicCounterBuilder() 98 + AsyncAtomicCounter counter =
99 - .withName(String.format("onos-app-loadtest-counter-%d", i)) 99 + storageService.getAsyncAtomicCounter(String.format("onos-app-loadtest-counter-%d", i));
100 - .build();
101 counters.add(counter); 100 counters.add(counter);
102 } 101 }
103 reporter.scheduleWithFixedDelay(() -> { 102 reporter.scheduleWithFixedDelay(() -> {
......
...@@ -87,4 +87,24 @@ public interface StorageService { ...@@ -87,4 +87,24 @@ public interface StorageService {
87 * @return a builder for a transaction context. 87 * @return a builder for a transaction context.
88 */ 88 */
89 TransactionContextBuilder transactionContextBuilder(); 89 TransactionContextBuilder transactionContextBuilder();
90 +
91 + /**
92 + * Returns an instance of {@code AsyncAtomicCounter} with specified name.
93 + * @param name counter name
94 + *
95 + * @return AsyncAtomicCounter instance
96 + */
97 + default AsyncAtomicCounter getAsyncAtomicCounter(String name) {
98 + return atomicCounterBuilder().withName(name).build();
99 + }
100 +
101 + /**
102 + * Returns an instance of {@code AtomicCounter} with specified name.
103 + * @param name counter name
104 + *
105 + * @return AtomicCounter instance
106 + */
107 + default AtomicCounter getAtomicCounter(String name) {
108 + return getAsyncAtomicCounter(name).asAtomicCounter();
109 + }
90 } 110 }
......
...@@ -67,10 +67,7 @@ public class ConsistentApplicationIdStore implements ApplicationIdStore { ...@@ -67,10 +67,7 @@ public class ConsistentApplicationIdStore implements ApplicationIdStore {
67 67
68 @Activate 68 @Activate
69 public void activate() { 69 public void activate() {
70 - appIdCounter = storageService.atomicCounterBuilder() 70 + appIdCounter = storageService.getAtomicCounter("onos-app-id-counter");
71 - .withName("onos-app-id-counter")
72 - .build()
73 - .asAtomicCounter();
74 71
75 registeredIds = storageService.<String, ApplicationId>consistentMapBuilder() 72 registeredIds = storageService.<String, ApplicationId>consistentMapBuilder()
76 .withName("onos-app-ids") 73 .withName("onos-app-ids")
......
...@@ -23,11 +23,9 @@ import org.apache.felix.scr.annotations.Deactivate; ...@@ -23,11 +23,9 @@ import org.apache.felix.scr.annotations.Deactivate;
23 import org.apache.felix.scr.annotations.Reference; 23 import org.apache.felix.scr.annotations.Reference;
24 import org.apache.felix.scr.annotations.ReferenceCardinality; 24 import org.apache.felix.scr.annotations.ReferenceCardinality;
25 import org.apache.felix.scr.annotations.Service; 25 import org.apache.felix.scr.annotations.Service;
26 -import org.onlab.util.Tools;
27 import org.onosproject.core.IdBlock; 26 import org.onosproject.core.IdBlock;
28 import org.onosproject.core.IdBlockStore; 27 import org.onosproject.core.IdBlockStore;
29 import org.onosproject.store.service.AtomicCounter; 28 import org.onosproject.store.service.AtomicCounter;
30 -import org.onosproject.store.service.StorageException;
31 import org.onosproject.store.service.StorageService; 29 import org.onosproject.store.service.StorageService;
32 import org.slf4j.Logger; 30 import org.slf4j.Logger;
33 31
...@@ -42,9 +40,6 @@ import static org.slf4j.LoggerFactory.getLogger; ...@@ -42,9 +40,6 @@ import static org.slf4j.LoggerFactory.getLogger;
42 @Service 40 @Service
43 public class ConsistentIdBlockStore implements IdBlockStore { 41 public class ConsistentIdBlockStore implements IdBlockStore {
44 42
45 - private static final int MAX_TRIES = 5;
46 - private static final int RETRY_DELAY_MS = 2_000;
47 -
48 private final Logger log = getLogger(getClass()); 43 private final Logger log = getLogger(getClass());
49 private final Map<String, AtomicCounter> topicCounters = Maps.newConcurrentMap(); 44 private final Map<String, AtomicCounter> topicCounters = Maps.newConcurrentMap();
50 45
...@@ -65,16 +60,7 @@ public class ConsistentIdBlockStore implements IdBlockStore { ...@@ -65,16 +60,7 @@ public class ConsistentIdBlockStore implements IdBlockStore {
65 60
66 @Override 61 @Override
67 public IdBlock getIdBlock(String topic) { 62 public IdBlock getIdBlock(String topic) {
68 - AtomicCounter counter = topicCounters 63 + AtomicCounter counter = topicCounters.computeIfAbsent(topic, storageService::getAtomicCounter);
69 - .computeIfAbsent(topic, 64 + return new IdBlock(counter.getAndAdd(DEFAULT_BLOCK_SIZE), DEFAULT_BLOCK_SIZE);
70 - name -> storageService.atomicCounterBuilder()
71 - .withName(name)
72 - .build()
73 - .asAtomicCounter());
74 - Long blockBase = Tools.retryable(counter::getAndAdd,
75 - StorageException.class,
76 - MAX_TRIES,
77 - RETRY_DELAY_MS).apply(DEFAULT_BLOCK_SIZE);
78 - return new IdBlock(blockBase, DEFAULT_BLOCK_SIZE);
79 } 65 }
80 } 66 }
......
...@@ -50,11 +50,7 @@ public class LogicalClockManager implements LogicalClockService { ...@@ -50,11 +50,7 @@ public class LogicalClockManager implements LogicalClockService {
50 50
51 @Activate 51 @Activate
52 public void activate() { 52 public void activate() {
53 - atomicCounter = storageService.atomicCounterBuilder() 53 + atomicCounter = storageService.getAtomicCounter(SYSTEM_LOGICAL_CLOCK_COUNTER_NAME);
54 - .withName(SYSTEM_LOGICAL_CLOCK_COUNTER_NAME)
55 - .withPartitionsDisabled()
56 - .build()
57 - .asAtomicCounter();
58 log.info("Started"); 54 log.info("Started");
59 } 55 }
60 56
......
...@@ -69,11 +69,7 @@ public class DistributedFlowObjectiveStore ...@@ -69,11 +69,7 @@ public class DistributedFlowObjectiveStore
69 .build())) 69 .build()))
70 .build(); 70 .build();
71 71
72 - nextIds = storageService.atomicCounterBuilder() 72 + nextIds = storageService.getAtomicCounter("next-objective-counter");
73 - .withName("next-objective-counter")
74 - .build()
75 - .asAtomicCounter();
76 -
77 log.info("Started"); 73 log.info("Started");
78 } 74 }
79 75
......
...@@ -132,10 +132,7 @@ public class Ofdpa2GroupHandler { ...@@ -132,10 +132,7 @@ public class Ofdpa2GroupHandler {
132 this.serviceDirectory = context.directory(); 132 this.serviceDirectory = context.directory();
133 this.groupService = serviceDirectory.get(GroupService.class); 133 this.groupService = serviceDirectory.get(GroupService.class);
134 this.storageService = serviceDirectory.get(StorageService.class); 134 this.storageService = serviceDirectory.get(StorageService.class);
135 - this.nextIndex = storageService.atomicCounterBuilder() 135 + this.nextIndex = storageService.getAtomicCounter("group-id-index-counter");
136 - .withName("group-id-index-counter")
137 - .build()
138 - .asAtomicCounter();
139 136
140 pendingNextObjectives = CacheBuilder.newBuilder() 137 pendingNextObjectives = CacheBuilder.newBuilder()
141 .expireAfterWrite(20, TimeUnit.SECONDS) 138 .expireAfterWrite(20, TimeUnit.SECONDS)
......
...@@ -182,10 +182,7 @@ public class MeterManager extends AbstractListenerProviderRegistry<MeterEvent, M ...@@ -182,10 +182,7 @@ public class MeterManager extends AbstractListenerProviderRegistry<MeterEvent, M
182 } 182 }
183 183
184 private AtomicCounter allocateCounter(DeviceId deviceId) { 184 private AtomicCounter allocateCounter(DeviceId deviceId) {
185 - return storageService.atomicCounterBuilder() 185 + return storageService.getAtomicCounter(String.format(METERCOUNTERIDENTIFIER, deviceId));
186 - .withName(String.format(METERCOUNTERIDENTIFIER, deviceId))
187 - .build()
188 - .asAtomicCounter();
189 } 186 }
190 187
191 private class InternalMeterProviderService 188 private class InternalMeterProviderService
......