Committed by
Gerrit Code Review
Misc improvements. Primarily Javadoc.
Change-Id: I083bbf559d53fa25f79d4e1e53eb15c6b96290f2
Showing
10 changed files
with
62 additions
and
46 deletions
... | @@ -16,7 +16,7 @@ | ... | @@ -16,7 +16,7 @@ |
16 | package org.onosproject.store.service; | 16 | package org.onosproject.store.service; |
17 | 17 | ||
18 | /** | 18 | /** |
19 | - * An atomic counter dispenses monotonically increasing values. | 19 | + * Distributed version of java.util.concurrent.atomic.AtomicLong. |
20 | */ | 20 | */ |
21 | public interface AtomicCounter { | 21 | public interface AtomicCounter { |
22 | 22 | ... | ... |
... | @@ -20,15 +20,23 @@ import com.google.common.base.MoreObjects; | ... | @@ -20,15 +20,23 @@ import com.google.common.base.MoreObjects; |
20 | import java.util.Objects; | 20 | import java.util.Objects; |
21 | 21 | ||
22 | /** | 22 | /** |
23 | - * Event object signalling that the map was modified. | 23 | + * Representation of a EventuallyConsistentMap update notification. |
24 | */ | 24 | */ |
25 | public class EventuallyConsistentMapEvent<K, V> { | 25 | public class EventuallyConsistentMapEvent<K, V> { |
26 | 26 | ||
27 | public enum Type { | 27 | public enum Type { |
28 | + /** | ||
29 | + * Entry added to map or existing entry updated. | ||
30 | + */ | ||
28 | PUT, | 31 | PUT, |
32 | + | ||
33 | + /** | ||
34 | + * Entry removed from map. | ||
35 | + */ | ||
29 | REMOVE | 36 | REMOVE |
30 | } | 37 | } |
31 | 38 | ||
39 | + private final String name; | ||
32 | private final Type type; | 40 | private final Type type; |
33 | private final K key; | 41 | private final K key; |
34 | private final V value; | 42 | private final V value; |
... | @@ -36,17 +44,28 @@ public class EventuallyConsistentMapEvent<K, V> { | ... | @@ -36,17 +44,28 @@ public class EventuallyConsistentMapEvent<K, V> { |
36 | /** | 44 | /** |
37 | * Creates a new event object. | 45 | * Creates a new event object. |
38 | * | 46 | * |
47 | + * @param name map name | ||
39 | * @param type the type of the event | 48 | * @param type the type of the event |
40 | * @param key the key the event concerns | 49 | * @param key the key the event concerns |
41 | - * @param value the value related to the key, or null for remove events | 50 | + * @param value the value mapped to the key |
42 | */ | 51 | */ |
43 | - public EventuallyConsistentMapEvent(Type type, K key, V value) { | 52 | + public EventuallyConsistentMapEvent(String name, Type type, K key, V value) { |
53 | + this.name = name; | ||
44 | this.type = type; | 54 | this.type = type; |
45 | this.key = key; | 55 | this.key = key; |
46 | this.value = value; | 56 | this.value = value; |
47 | } | 57 | } |
48 | 58 | ||
49 | /** | 59 | /** |
60 | + * Returns the map name. | ||
61 | + * | ||
62 | + * @return name of map | ||
63 | + */ | ||
64 | + public String name() { | ||
65 | + return name; | ||
66 | + } | ||
67 | + | ||
68 | + /** | ||
50 | * Returns the type of the event. | 69 | * Returns the type of the event. |
51 | * | 70 | * |
52 | * @return the type of the event | 71 | * @return the type of the event |
... | @@ -65,9 +84,11 @@ public class EventuallyConsistentMapEvent<K, V> { | ... | @@ -65,9 +84,11 @@ public class EventuallyConsistentMapEvent<K, V> { |
65 | } | 84 | } |
66 | 85 | ||
67 | /** | 86 | /** |
68 | - * Returns the value associated with this event. | 87 | + * Returns the value associated with this event. If type is REMOVE, |
88 | + * this is the value that was removed. If type is PUT, this is | ||
89 | + * the new value. | ||
69 | * | 90 | * |
70 | - * @return the value, or null if the event was REMOVE | 91 | + * @return the value |
71 | */ | 92 | */ |
72 | public V value() { | 93 | public V value() { |
73 | return value; | 94 | return value; | ... | ... |
... | @@ -16,8 +16,7 @@ | ... | @@ -16,8 +16,7 @@ |
16 | package org.onosproject.store.service; | 16 | package org.onosproject.store.service; |
17 | 17 | ||
18 | /** | 18 | /** |
19 | - * Listener interested in receiving modification events for an | 19 | + * Listener to be notified about updates to a EventuallyConsistentMap. |
20 | - * EventuallyConsistentMap. | ||
21 | */ | 20 | */ |
22 | public interface EventuallyConsistentMapListener<K, V> { | 21 | public interface EventuallyConsistentMapListener<K, V> { |
23 | 22 | ... | ... |
... | @@ -20,7 +20,7 @@ import org.onosproject.store.Timestamp; | ... | @@ -20,7 +20,7 @@ import org.onosproject.store.Timestamp; |
20 | /** | 20 | /** |
21 | * Service that issues logical timestamps. | 21 | * Service that issues logical timestamps. |
22 | * <p> | 22 | * <p> |
23 | - * The logical timestamps are useful for establishing a total ordering of | 23 | + * Logical timestamps are useful for establishing a total ordering of |
24 | * arbitrary cluster wide events without relying on a fully synchronized | 24 | * arbitrary cluster wide events without relying on a fully synchronized |
25 | * system clock (wall clock) | 25 | * system clock (wall clock) |
26 | */ | 26 | */ | ... | ... |
... | @@ -56,9 +56,9 @@ public class MapEvent<K, V> { | ... | @@ -56,9 +56,9 @@ public class MapEvent<K, V> { |
56 | * Creates a new event object. | 56 | * Creates a new event object. |
57 | * | 57 | * |
58 | * @param name map name | 58 | * @param name map name |
59 | - * @param type the type of the event | 59 | + * @param type type of event |
60 | - * @param key the key the event concerns | 60 | + * @param key key the event concerns |
61 | - * @param value the value related to the key, or null for remove events | 61 | + * @param value value key is mapped to |
62 | */ | 62 | */ |
63 | public MapEvent(String name, Type type, K key, Versioned<V> value) { | 63 | public MapEvent(String name, Type type, K key, Versioned<V> value) { |
64 | this.name = name; | 64 | this.name = name; |
... | @@ -79,7 +79,7 @@ public class MapEvent<K, V> { | ... | @@ -79,7 +79,7 @@ public class MapEvent<K, V> { |
79 | /** | 79 | /** |
80 | * Returns the type of the event. | 80 | * Returns the type of the event. |
81 | * | 81 | * |
82 | - * @return the type of the event | 82 | + * @return the type of event |
83 | */ | 83 | */ |
84 | public Type type() { | 84 | public Type type() { |
85 | return type; | 85 | return type; |
... | @@ -120,7 +120,7 @@ public class MapEvent<K, V> { | ... | @@ -120,7 +120,7 @@ public class MapEvent<K, V> { |
120 | 120 | ||
121 | @Override | 121 | @Override |
122 | public int hashCode() { | 122 | public int hashCode() { |
123 | - return Objects.hash(type, key, value); | 123 | + return Objects.hash(name, type, key, value); |
124 | } | 124 | } |
125 | 125 | ||
126 | @Override | 126 | @Override | ... | ... |
... | @@ -16,7 +16,7 @@ | ... | @@ -16,7 +16,7 @@ |
16 | package org.onosproject.store.service; | 16 | package org.onosproject.store.service; |
17 | 17 | ||
18 | /** | 18 | /** |
19 | - * Listener to be notified about updates to a ConsitentMap. | 19 | + * Listener to be notified about updates to a ConsistentMap. |
20 | */ | 20 | */ |
21 | public interface MapEventListener<K, V> { | 21 | public interface MapEventListener<K, V> { |
22 | /** | 22 | /** | ... | ... |
... | @@ -22,7 +22,7 @@ import com.google.common.base.MoreObjects; | ... | @@ -22,7 +22,7 @@ import com.google.common.base.MoreObjects; |
22 | /** | 22 | /** |
23 | * Representation of a DistributedSet update notification. | 23 | * Representation of a DistributedSet update notification. |
24 | * | 24 | * |
25 | - * @param <E> element type | 25 | + * @param <E> set element type |
26 | */ | 26 | */ |
27 | public class SetEvent<E> { | 27 | public class SetEvent<E> { |
28 | 28 | ||
... | @@ -49,8 +49,8 @@ public class SetEvent<E> { | ... | @@ -49,8 +49,8 @@ public class SetEvent<E> { |
49 | * Creates a new event object. | 49 | * Creates a new event object. |
50 | * | 50 | * |
51 | * @param name set name | 51 | * @param name set name |
52 | - * @param type the type of the event | 52 | + * @param type type of the event |
53 | - * @param entry the entry the event concerns | 53 | + * @param entry entry the event concerns |
54 | */ | 54 | */ |
55 | public SetEvent(String name, Type type, E entry) { | 55 | public SetEvent(String name, Type type, E entry) { |
56 | this.name = name; | 56 | this.name = name; |
... | @@ -70,7 +70,7 @@ public class SetEvent<E> { | ... | @@ -70,7 +70,7 @@ public class SetEvent<E> { |
70 | /** | 70 | /** |
71 | * Returns the type of the event. | 71 | * Returns the type of the event. |
72 | * | 72 | * |
73 | - * @return the type of the event | 73 | + * @return type of the event |
74 | */ | 74 | */ |
75 | public Type type() { | 75 | public Type type() { |
76 | return type; | 76 | return type; | ... | ... |
... | @@ -13,19 +13,15 @@ | ... | @@ -13,19 +13,15 @@ |
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.service; | 16 | package org.onosproject.store.service; |
18 | 17 | ||
19 | - | ||
20 | /** | 18 | /** |
21 | * Storage service. | 19 | * Storage service. |
22 | * <p> | 20 | * <p> |
23 | - * This service provides operations for creating key-value stores. | 21 | + * This service provides builders for various distributed primitives. |
24 | - * One can chose to create key-value stores with varying properties such | ||
25 | - * as strongly consistent vs eventually consistent, durable vs volatile. | ||
26 | * <p> | 22 | * <p> |
27 | - * Various store implementations should leverage the data structures provided | 23 | + * It is expected that services and applications will leverage the primitives indirectly provided by |
28 | - * by this service | 24 | + * this service for their distributed state management and coordination. |
29 | */ | 25 | */ |
30 | public interface StorageService { | 26 | public interface StorageService { |
31 | 27 | ||
... | @@ -48,7 +44,7 @@ public interface StorageService { | ... | @@ -48,7 +44,7 @@ public interface StorageService { |
48 | <K, V> ConsistentMapBuilder<K, V> consistentMapBuilder(); | 44 | <K, V> ConsistentMapBuilder<K, V> consistentMapBuilder(); |
49 | 45 | ||
50 | /** | 46 | /** |
51 | - * Creates a new distributed set builder. | 47 | + * Creates a new DistributedSetBuilder. |
52 | * | 48 | * |
53 | * @param <E> set element type | 49 | * @param <E> set element type |
54 | * @return builder for an distributed set | 50 | * @return builder for an distributed set |
... | @@ -56,7 +52,7 @@ public interface StorageService { | ... | @@ -56,7 +52,7 @@ public interface StorageService { |
56 | <E> DistributedSetBuilder<E> setBuilder(); | 52 | <E> DistributedSetBuilder<E> setBuilder(); |
57 | 53 | ||
58 | /** | 54 | /** |
59 | - * Creates a new distributed queue builder. | 55 | + * Creates a new DistributedQueueBuilder. |
60 | * | 56 | * |
61 | * @param <E> queue entry type | 57 | * @param <E> queue entry type |
62 | * @return builder for an distributed queue | 58 | * @return builder for an distributed queue | ... | ... |
... | @@ -310,7 +310,7 @@ public class EventuallyConsistentMapImpl<K, V> | ... | @@ -310,7 +310,7 @@ public class EventuallyConsistentMapImpl<K, V> |
310 | MapValue<V> newValue = new MapValue<>(value, timestampProvider.apply(key, value)); | 310 | MapValue<V> newValue = new MapValue<>(value, timestampProvider.apply(key, value)); |
311 | if (putInternal(key, newValue)) { | 311 | if (putInternal(key, newValue)) { |
312 | notifyPeers(new UpdateEntry<>(key, newValue), peerUpdateFunction.apply(key, value)); | 312 | notifyPeers(new UpdateEntry<>(key, newValue), peerUpdateFunction.apply(key, value)); |
313 | - notifyListeners(new EventuallyConsistentMapEvent<>(PUT, key, value)); | 313 | + notifyListeners(new EventuallyConsistentMapEvent<>(mapName, PUT, key, value)); |
314 | } | 314 | } |
315 | } | 315 | } |
316 | 316 | ||
... | @@ -335,7 +335,7 @@ public class EventuallyConsistentMapImpl<K, V> | ... | @@ -335,7 +335,7 @@ public class EventuallyConsistentMapImpl<K, V> |
335 | if (previousValue != null) { | 335 | if (previousValue != null) { |
336 | notifyPeers(new UpdateEntry<>(key, tombstone), peerUpdateFunction.apply(key, previousValue.get())); | 336 | notifyPeers(new UpdateEntry<>(key, tombstone), peerUpdateFunction.apply(key, previousValue.get())); |
337 | if (previousValue.isAlive()) { | 337 | if (previousValue.isAlive()) { |
338 | - notifyListeners(new EventuallyConsistentMapEvent<>(REMOVE, key, previousValue.get())); | 338 | + notifyListeners(new EventuallyConsistentMapEvent<>(mapName, REMOVE, key, previousValue.get())); |
339 | } | 339 | } |
340 | } | 340 | } |
341 | return previousValue != null ? previousValue.get() : null; | 341 | return previousValue != null ? previousValue.get() : null; |
... | @@ -406,7 +406,7 @@ public class EventuallyConsistentMapImpl<K, V> | ... | @@ -406,7 +406,7 @@ public class EventuallyConsistentMapImpl<K, V> |
406 | ? previousValue.get() == null ? null : previousValue.get().get() | 406 | ? previousValue.get() == null ? null : previousValue.get().get() |
407 | : computedValue.get(); | 407 | : computedValue.get(); |
408 | if (value != null) { | 408 | if (value != null) { |
409 | - notifyListeners(new EventuallyConsistentMapEvent<>(updateType, key, value)); | 409 | + notifyListeners(new EventuallyConsistentMapEvent<>(mapName, updateType, key, value)); |
410 | } | 410 | } |
411 | } | 411 | } |
412 | return computedValue.get(); | 412 | return computedValue.get(); |
... | @@ -609,7 +609,7 @@ public class EventuallyConsistentMapImpl<K, V> | ... | @@ -609,7 +609,7 @@ public class EventuallyConsistentMapImpl<K, V> |
609 | Optional.empty(), | 609 | Optional.empty(), |
610 | MapValue.tombstone(remoteValueDigest.timestamp())); | 610 | MapValue.tombstone(remoteValueDigest.timestamp())); |
611 | if (previousValue != null && previousValue.isAlive()) { | 611 | if (previousValue != null && previousValue.isAlive()) { |
612 | - externalEvents.add(new EventuallyConsistentMapEvent<>(REMOVE, key, previousValue.get())); | 612 | + externalEvents.add(new EventuallyConsistentMapEvent<>(mapName, REMOVE, key, previousValue.get())); |
613 | } | 613 | } |
614 | } | 614 | } |
615 | }); | 615 | }); |
... | @@ -626,10 +626,10 @@ public class EventuallyConsistentMapImpl<K, V> | ... | @@ -626,10 +626,10 @@ public class EventuallyConsistentMapImpl<K, V> |
626 | if (value.isTombstone()) { | 626 | if (value.isTombstone()) { |
627 | MapValue<V> previousValue = removeInternal(key, Optional.empty(), value); | 627 | MapValue<V> previousValue = removeInternal(key, Optional.empty(), value); |
628 | if (previousValue != null && previousValue.isAlive()) { | 628 | if (previousValue != null && previousValue.isAlive()) { |
629 | - notifyListeners(new EventuallyConsistentMapEvent<>(REMOVE, key, previousValue.get())); | 629 | + notifyListeners(new EventuallyConsistentMapEvent<>(mapName, REMOVE, key, previousValue.get())); |
630 | } | 630 | } |
631 | } else if (putInternal(key, value)) { | 631 | } else if (putInternal(key, value)) { |
632 | - notifyListeners(new EventuallyConsistentMapEvent<>(PUT, key, value.get())); | 632 | + notifyListeners(new EventuallyConsistentMapEvent<>(mapName, PUT, key, value.get())); |
633 | } | 633 | } |
634 | }); | 634 | }); |
635 | } | 635 | } | ... | ... |
... | @@ -274,9 +274,9 @@ public class EventuallyConsistentMapImplTest { | ... | @@ -274,9 +274,9 @@ public class EventuallyConsistentMapImplTest { |
274 | EventuallyConsistentMapListener<String, String> listener | 274 | EventuallyConsistentMapListener<String, String> listener |
275 | = getListener(); | 275 | = getListener(); |
276 | listener.event(new EventuallyConsistentMapEvent<>( | 276 | listener.event(new EventuallyConsistentMapEvent<>( |
277 | - EventuallyConsistentMapEvent.Type.PUT, KEY1, VALUE1)); | 277 | + MAP_NAME, EventuallyConsistentMapEvent.Type.PUT, KEY1, VALUE1)); |
278 | listener.event(new EventuallyConsistentMapEvent<>( | 278 | listener.event(new EventuallyConsistentMapEvent<>( |
279 | - EventuallyConsistentMapEvent.Type.PUT, KEY1, VALUE2)); | 279 | + MAP_NAME, EventuallyConsistentMapEvent.Type.PUT, KEY1, VALUE2)); |
280 | replay(listener); | 280 | replay(listener); |
281 | 281 | ||
282 | ecMap.addListener(listener); | 282 | ecMap.addListener(listener); |
... | @@ -325,11 +325,11 @@ public class EventuallyConsistentMapImplTest { | ... | @@ -325,11 +325,11 @@ public class EventuallyConsistentMapImplTest { |
325 | EventuallyConsistentMapListener<String, String> listener | 325 | EventuallyConsistentMapListener<String, String> listener |
326 | = getListener(); | 326 | = getListener(); |
327 | listener.event(new EventuallyConsistentMapEvent<>( | 327 | listener.event(new EventuallyConsistentMapEvent<>( |
328 | - EventuallyConsistentMapEvent.Type.REMOVE, KEY1, VALUE1)); | 328 | + MAP_NAME, EventuallyConsistentMapEvent.Type.REMOVE, KEY1, VALUE1)); |
329 | listener.event(new EventuallyConsistentMapEvent<>( | 329 | listener.event(new EventuallyConsistentMapEvent<>( |
330 | - EventuallyConsistentMapEvent.Type.PUT, KEY1, VALUE1)); | 330 | + MAP_NAME, EventuallyConsistentMapEvent.Type.PUT, KEY1, VALUE1)); |
331 | listener.event(new EventuallyConsistentMapEvent<>( | 331 | listener.event(new EventuallyConsistentMapEvent<>( |
332 | - EventuallyConsistentMapEvent.Type.PUT, KEY2, VALUE2)); | 332 | + MAP_NAME, EventuallyConsistentMapEvent.Type.PUT, KEY2, VALUE2)); |
333 | replay(listener); | 333 | replay(listener); |
334 | 334 | ||
335 | ecMap.addListener(listener); | 335 | ecMap.addListener(listener); |
... | @@ -388,11 +388,11 @@ public class EventuallyConsistentMapImplTest { | ... | @@ -388,11 +388,11 @@ public class EventuallyConsistentMapImplTest { |
388 | EventuallyConsistentMapListener<String, String> listener | 388 | EventuallyConsistentMapListener<String, String> listener |
389 | = getListener(); | 389 | = getListener(); |
390 | listener.event(new EventuallyConsistentMapEvent<>( | 390 | listener.event(new EventuallyConsistentMapEvent<>( |
391 | - EventuallyConsistentMapEvent.Type.PUT, KEY1, VALUE1)); | 391 | + MAP_NAME, EventuallyConsistentMapEvent.Type.PUT, KEY1, VALUE1)); |
392 | listener.event(new EventuallyConsistentMapEvent<>( | 392 | listener.event(new EventuallyConsistentMapEvent<>( |
393 | - EventuallyConsistentMapEvent.Type.REMOVE, KEY1, VALUE1)); | 393 | + MAP_NAME, EventuallyConsistentMapEvent.Type.REMOVE, KEY1, VALUE1)); |
394 | listener.event(new EventuallyConsistentMapEvent<>( | 394 | listener.event(new EventuallyConsistentMapEvent<>( |
395 | - EventuallyConsistentMapEvent.Type.PUT, KEY2, VALUE2)); | 395 | + MAP_NAME, EventuallyConsistentMapEvent.Type.PUT, KEY2, VALUE2)); |
396 | replay(listener); | 396 | replay(listener); |
397 | 397 | ||
398 | ecMap.addListener(listener); | 398 | ecMap.addListener(listener); |
... | @@ -457,9 +457,9 @@ public class EventuallyConsistentMapImplTest { | ... | @@ -457,9 +457,9 @@ public class EventuallyConsistentMapImplTest { |
457 | EventuallyConsistentMapListener<String, String> listener | 457 | EventuallyConsistentMapListener<String, String> listener |
458 | = getListener(); | 458 | = getListener(); |
459 | listener.event(new EventuallyConsistentMapEvent<>( | 459 | listener.event(new EventuallyConsistentMapEvent<>( |
460 | - EventuallyConsistentMapEvent.Type.PUT, KEY1, VALUE1)); | 460 | + MAP_NAME, EventuallyConsistentMapEvent.Type.PUT, KEY1, VALUE1)); |
461 | listener.event(new EventuallyConsistentMapEvent<>( | 461 | listener.event(new EventuallyConsistentMapEvent<>( |
462 | - EventuallyConsistentMapEvent.Type.PUT, KEY2, VALUE2)); | 462 | + MAP_NAME, EventuallyConsistentMapEvent.Type.PUT, KEY2, VALUE2)); |
463 | replay(listener); | 463 | replay(listener); |
464 | 464 | ||
465 | ecMap.addListener(listener); | 465 | ecMap.addListener(listener); |
... | @@ -485,9 +485,9 @@ public class EventuallyConsistentMapImplTest { | ... | @@ -485,9 +485,9 @@ public class EventuallyConsistentMapImplTest { |
485 | EventuallyConsistentMapListener<String, String> listener | 485 | EventuallyConsistentMapListener<String, String> listener |
486 | = getListener(); | 486 | = getListener(); |
487 | listener.event(new EventuallyConsistentMapEvent<>( | 487 | listener.event(new EventuallyConsistentMapEvent<>( |
488 | - EventuallyConsistentMapEvent.Type.REMOVE, KEY1, VALUE1)); | 488 | + MAP_NAME, EventuallyConsistentMapEvent.Type.REMOVE, KEY1, VALUE1)); |
489 | listener.event(new EventuallyConsistentMapEvent<>( | 489 | listener.event(new EventuallyConsistentMapEvent<>( |
490 | - EventuallyConsistentMapEvent.Type.REMOVE, KEY2, VALUE2)); | 490 | + MAP_NAME, EventuallyConsistentMapEvent.Type.REMOVE, KEY2, VALUE2)); |
491 | replay(listener); | 491 | replay(listener); |
492 | 492 | ||
493 | // clear() on an empty map is a no-op - no messages will be sent | 493 | // clear() on an empty map is a no-op - no messages will be sent | ... | ... |
-
Please register or login to post a comment