Committed by
Madan Jampani
[Falcon][ONOS-2696] support method "replace" in ConsistentMap and method "notNull" in Match
Change-Id: I7c7d4644f963e52297785c2f9a5f21eff8723e61
Showing
6 changed files
with
49 additions
and
0 deletions
| ... | @@ -245,6 +245,16 @@ public interface AsyncConsistentMap<K, V> { | ... | @@ -245,6 +245,16 @@ public interface AsyncConsistentMap<K, V> { |
| 245 | CompletableFuture<Boolean> remove(K key, long version); | 245 | CompletableFuture<Boolean> remove(K key, long version); |
| 246 | 246 | ||
| 247 | /** | 247 | /** |
| 248 | + * Replaces the entry for the specified key only if there is any value | ||
| 249 | + * which associated with specified key. | ||
| 250 | + * | ||
| 251 | + * @param key key with which the specified value is associated | ||
| 252 | + * @param value value expected to be associated with the specified key | ||
| 253 | + * @return the previous value associated with the specified key or null | ||
| 254 | + */ | ||
| 255 | + CompletableFuture<Versioned<V>> replace(K key, V value); | ||
| 256 | + | ||
| 257 | + /** | ||
| 248 | * Replaces the entry for the specified key only if currently mapped | 258 | * Replaces the entry for the specified key only if currently mapped |
| 249 | * to the specified value. | 259 | * to the specified value. |
| 250 | * | 260 | * | ... | ... |
| ... | @@ -247,6 +247,16 @@ public interface ConsistentMap<K, V> { | ... | @@ -247,6 +247,16 @@ public interface ConsistentMap<K, V> { |
| 247 | boolean remove(K key, long version); | 247 | boolean remove(K key, long version); |
| 248 | 248 | ||
| 249 | /** | 249 | /** |
| 250 | + * Replaces the entry for the specified key only if there is any value | ||
| 251 | + * which associated with specified key. | ||
| 252 | + * | ||
| 253 | + * @param key key with which the specified value is associated | ||
| 254 | + * @param value value expected to be associated with the specified key | ||
| 255 | + * @return the previous value associated with the specified key or null | ||
| 256 | + */ | ||
| 257 | + Versioned<V> replace(K key, V value); | ||
| 258 | + | ||
| 259 | + /** | ||
| 250 | * Replaces the entry for the specified key only if currently mapped | 260 | * Replaces the entry for the specified key only if currently mapped |
| 251 | * to the specified value. | 261 | * to the specified value. |
| 252 | * | 262 | * | ... | ... |
| ... | @@ -123,6 +123,11 @@ public class ConsistentMapAdapter<K, V> implements ConsistentMap<K, V> { | ... | @@ -123,6 +123,11 @@ public class ConsistentMapAdapter<K, V> implements ConsistentMap<K, V> { |
| 123 | } | 123 | } |
| 124 | 124 | ||
| 125 | @Override | 125 | @Override |
| 126 | + public Versioned<V> replace(K key, V value) { | ||
| 127 | + return null; | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + @Override | ||
| 126 | public boolean replace(K key, V oldValue, V newValue) { | 131 | public boolean replace(K key, V oldValue, V newValue) { |
| 127 | return false; | 132 | return false; |
| 128 | } | 133 | } | ... | ... |
| ... | @@ -198,6 +198,15 @@ public final class TestConsistentMap<K, V> extends ConsistentMapAdapter<K, V> { | ... | @@ -198,6 +198,15 @@ public final class TestConsistentMap<K, V> extends ConsistentMapAdapter<K, V> { |
| 198 | } | 198 | } |
| 199 | 199 | ||
| 200 | @Override | 200 | @Override |
| 201 | + public Versioned<V> replace(K key, V value) { | ||
| 202 | + Versioned<V> result = version(map.replace(key, value)); | ||
| 203 | + if (map.get(key).equals(value)) { | ||
| 204 | + notifyListeners(mapName, UPDATE, key, result); | ||
| 205 | + } | ||
| 206 | + return result; | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | + @Override | ||
| 201 | public boolean replace(K key, V oldValue, V newValue) { | 210 | public boolean replace(K key, V oldValue, V newValue) { |
| 202 | boolean replaced = map.replace(key, oldValue, newValue); | 211 | boolean replaced = map.replace(key, oldValue, newValue); |
| 203 | if (replaced) { | 212 | if (replaced) { | ... | ... |
| ... | @@ -392,6 +392,16 @@ public class DefaultAsyncConsistentMap<K, V> implements AsyncConsistentMap<K, V | ... | @@ -392,6 +392,16 @@ public class DefaultAsyncConsistentMap<K, V> implements AsyncConsistentMap<K, V |
| 392 | } | 392 | } |
| 393 | 393 | ||
| 394 | @Override | 394 | @Override |
| 395 | + public CompletableFuture<Versioned<V>> replace(K key, V value) { | ||
| 396 | + checkNotNull(key, ERROR_NULL_KEY); | ||
| 397 | + checkNotNull(value, ERROR_NULL_VALUE); | ||
| 398 | + final MeteringAgent.Context timer = monitor.startTimer(REPLACE); | ||
| 399 | + return updateAndGet(key, Match.ifNotNull(), Match.any(), value) | ||
| 400 | + .whenComplete((r, e) -> timer.stop(e)) | ||
| 401 | + .thenApply(v -> v.oldValue()); | ||
| 402 | + } | ||
| 403 | + | ||
| 404 | + @Override | ||
| 395 | public CompletableFuture<Boolean> replace(K key, V oldValue, V newValue) { | 405 | public CompletableFuture<Boolean> replace(K key, V oldValue, V newValue) { |
| 396 | checkNotNull(key, ERROR_NULL_KEY); | 406 | checkNotNull(key, ERROR_NULL_KEY); |
| 397 | checkNotNull(oldValue, ERROR_NULL_VALUE); | 407 | checkNotNull(oldValue, ERROR_NULL_VALUE); | ... | ... |
| ... | @@ -156,6 +156,11 @@ public class DefaultConsistentMap<K, V> implements ConsistentMap<K, V> { | ... | @@ -156,6 +156,11 @@ public class DefaultConsistentMap<K, V> implements ConsistentMap<K, V> { |
| 156 | } | 156 | } |
| 157 | 157 | ||
| 158 | @Override | 158 | @Override |
| 159 | + public Versioned<V> replace(K key, V value) { | ||
| 160 | + return complete(asyncMap.replace(key, value)); | ||
| 161 | + } | ||
| 162 | + | ||
| 163 | + @Override | ||
| 159 | public boolean replace(K key, V oldValue, V newValue) { | 164 | public boolean replace(K key, V oldValue, V newValue) { |
| 160 | return complete(asyncMap.replace(key, oldValue, newValue)); | 165 | return complete(asyncMap.replace(key, oldValue, newValue)); |
| 161 | } | 166 | } | ... | ... |
-
Please register or login to post a comment