sangyun-han
Committed by Gerrit Code Review

Add constructor for configuration of CacheSize

Change-Id: Ifdac489d87ad1b1ab23e43f05980f9cf0e5b834e
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -
17 package org.onosproject.store.primitives.impl; 16 package org.onosproject.store.primitives.impl;
18 17
19 import java.util.concurrent.CompletableFuture; 18 import java.util.concurrent.CompletableFuture;
...@@ -40,25 +39,43 @@ import com.google.common.cache.LoadingCache; ...@@ -40,25 +39,43 @@ import com.google.common.cache.LoadingCache;
40 * @param <V> value type 39 * @param <V> value type
41 */ 40 */
42 public class CachingAsyncConsistentMap<K, V> extends DelegatingAsyncConsistentMap<K, V> { 41 public class CachingAsyncConsistentMap<K, V> extends DelegatingAsyncConsistentMap<K, V> {
42 + private int maxCacheSize = 10000;
43 43
44 private final LoadingCache<K, CompletableFuture<Versioned<V>>> cache = 44 private final LoadingCache<K, CompletableFuture<Versioned<V>>> cache =
45 CacheBuilder.newBuilder() 45 CacheBuilder.newBuilder()
46 - .maximumSize(10000) // TODO: make configurable 46 + .maximumSize(maxCacheSize)
47 - .build(new CacheLoader<K, CompletableFuture<Versioned<V>>>() { 47 + .build(new CacheLoader<K, CompletableFuture<Versioned<V>>>() {
48 - @Override 48 + @Override
49 - public CompletableFuture<Versioned<V>> load(K key) 49 + public CompletableFuture<Versioned<V>> load(K key)
50 - throws Exception { 50 + throws Exception {
51 - return CachingAsyncConsistentMap.super.get(key); 51 + return CachingAsyncConsistentMap.super.get(key);
52 - } 52 + }
53 - }); 53 + });
54 54
55 private final MapEventListener<K, V> cacheInvalidator = event -> cache.invalidate(event.key()); 55 private final MapEventListener<K, V> cacheInvalidator = event -> cache.invalidate(event.key());
56 56
57 + /**
58 + * Default constructor.
59 + *
60 + * @param backingMap a distributed, strongly consistent map for backing
61 + */
57 public CachingAsyncConsistentMap(AsyncConsistentMap<K, V> backingMap) { 62 public CachingAsyncConsistentMap(AsyncConsistentMap<K, V> backingMap) {
58 super(backingMap); 63 super(backingMap);
59 super.addListener(cacheInvalidator); 64 super.addListener(cacheInvalidator);
60 } 65 }
61 66
67 + /**
68 + * Constructor to configure cache size of LoadingCache.
69 + *
70 + * @param backingMap a distributed, strongly consistent map for backing
71 + * @param cacheSize the maximum size of the cache
72 + */
73 + public CachingAsyncConsistentMap(AsyncConsistentMap<K, V> backingMap, int cacheSize) {
74 + super(backingMap);
75 + super.addListener(cacheInvalidator);
76 + maxCacheSize = cacheSize;
77 + }
78 +
62 @Override 79 @Override
63 public CompletableFuture<Void> destroy() { 80 public CompletableFuture<Void> destroy() {
64 return super.destroy().thenCompose(v -> removeListener(cacheInvalidator)); 81 return super.destroy().thenCompose(v -> removeListener(cacheInvalidator));
...@@ -74,31 +91,31 @@ public class CachingAsyncConsistentMap<K, V> extends DelegatingAsyncConsistentMa ...@@ -74,31 +91,31 @@ public class CachingAsyncConsistentMap<K, V> extends DelegatingAsyncConsistentMa
74 Predicate<? super V> condition, 91 Predicate<? super V> condition,
75 BiFunction<? super K, ? super V, ? extends V> remappingFunction) { 92 BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
76 return super.computeIf(key, condition, remappingFunction) 93 return super.computeIf(key, condition, remappingFunction)
77 - .whenComplete((r, e) -> cache.invalidate(key)); 94 + .whenComplete((r, e) -> cache.invalidate(key));
78 } 95 }
79 96
80 @Override 97 @Override
81 public CompletableFuture<Versioned<V>> put(K key, V value) { 98 public CompletableFuture<Versioned<V>> put(K key, V value) {
82 return super.put(key, value) 99 return super.put(key, value)
83 - .whenComplete((r, e) -> cache.invalidate(key)); 100 + .whenComplete((r, e) -> cache.invalidate(key));
84 } 101 }
85 102
86 @Override 103 @Override
87 public CompletableFuture<Versioned<V>> putAndGet(K key, V value) { 104 public CompletableFuture<Versioned<V>> putAndGet(K key, V value) {
88 return super.putAndGet(key, value) 105 return super.putAndGet(key, value)
89 - .whenComplete((r, e) -> cache.invalidate(key)); 106 + .whenComplete((r, e) -> cache.invalidate(key));
90 } 107 }
91 108
92 @Override 109 @Override
93 public CompletableFuture<Versioned<V>> remove(K key) { 110 public CompletableFuture<Versioned<V>> remove(K key) {
94 return super.remove(key) 111 return super.remove(key)
95 - .whenComplete((r, e) -> cache.invalidate(key)); 112 + .whenComplete((r, e) -> cache.invalidate(key));
96 } 113 }
97 114
98 @Override 115 @Override
99 public CompletableFuture<Void> clear() { 116 public CompletableFuture<Void> clear() {
100 return super.clear() 117 return super.clear()
101 - .whenComplete((r, e) -> cache.invalidateAll()); 118 + .whenComplete((r, e) -> cache.invalidateAll());
102 } 119 }
103 120
104 @Override 121 @Override
......