blob: 97361db2f1af986995ebd3fb448019f0b0b94ff0 [file] [log] [blame]
Madan Jampanib5d72d52015-04-03 16:53:50 -07001package org.onosproject.store.consistent.impl;
2
Madan Jampanif4d58f32015-06-05 17:38:22 -07003import java.util.concurrent.ScheduledExecutorService;
4
Madan Jampanib5d72d52015-04-03 16:53:50 -07005import org.onosproject.store.service.AsyncAtomicCounter;
6import org.onosproject.store.service.AtomicCounter;
7import org.onosproject.store.service.AtomicCounterBuilder;
8
9import static com.google.common.base.Preconditions.checkArgument;
10
11/**
12 * Default implementation of AtomicCounterBuilder.
13 */
14public class DefaultAtomicCounterBuilder implements AtomicCounterBuilder {
15
16 private String name;
17 private boolean partitionsEnabled = true;
18 private final Database partitionedDatabase;
19 private final Database inMemoryDatabase;
Madan Jampanif4d58f32015-06-05 17:38:22 -070020 private boolean retryOnFailure = false;
21 private ScheduledExecutorService retryExecutor = null;
Madan Jampanib5d72d52015-04-03 16:53:50 -070022
23 public DefaultAtomicCounterBuilder(Database inMemoryDatabase, Database partitionedDatabase) {
24 this.inMemoryDatabase = inMemoryDatabase;
25 this.partitionedDatabase = partitionedDatabase;
26 }
27
28 @Override
29 public AtomicCounterBuilder withName(String name) {
30 checkArgument(name != null && !name.isEmpty());
31 this.name = name;
32 return this;
33 }
34
35 @Override
36 public AtomicCounterBuilder withPartitionsDisabled() {
37 partitionsEnabled = false;
38 return this;
39 }
40
41 @Override
42 public AtomicCounter build() {
Madan Jampanif4d58f32015-06-05 17:38:22 -070043 validateInputs();
Madan Jampanib5d72d52015-04-03 16:53:50 -070044 Database database = partitionsEnabled ? partitionedDatabase : inMemoryDatabase;
Madan Jampanif4d58f32015-06-05 17:38:22 -070045 return new DefaultAtomicCounter(name, database, retryOnFailure, retryExecutor);
Madan Jampanib5d72d52015-04-03 16:53:50 -070046 }
47
48 @Override
49 public AsyncAtomicCounter buildAsyncCounter() {
Madan Jampanif4d58f32015-06-05 17:38:22 -070050 validateInputs();
Madan Jampanib5d72d52015-04-03 16:53:50 -070051 Database database = partitionsEnabled ? partitionedDatabase : inMemoryDatabase;
Madan Jampanif4d58f32015-06-05 17:38:22 -070052 return new DefaultAsyncAtomicCounter(name, database, retryOnFailure, retryExecutor);
53 }
54
55 @Override
56 public AtomicCounterBuilder withRetryOnFailure() {
57 retryOnFailure = true;
58 return this;
59 }
60
61 @Override
62 public AtomicCounterBuilder withRetryExecutor(ScheduledExecutorService executor) {
63 this.retryExecutor = executor;
64 return this;
65 }
66
67 private void validateInputs() {
68 if (retryOnFailure) {
69 if (retryExecutor == null) {
70 throw new IllegalArgumentException("RetryExecutor must be specified when retries are enabled");
71 }
72 }
Madan Jampanib5d72d52015-04-03 16:53:50 -070073 }
74}