Explicitly disallow null values in the map
Change-Id: I3b8d287a534e85d9454ca261a8eb666c477c43c1
diff --git a/core/store/dist/src/main/java/org/onosproject/store/impl/EventuallyConsistentMapImpl.java b/core/store/dist/src/main/java/org/onosproject/store/impl/EventuallyConsistentMapImpl.java
index 2d267c3..8ea08c2 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/impl/EventuallyConsistentMapImpl.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/impl/EventuallyConsistentMapImpl.java
@@ -85,6 +85,9 @@
private volatile boolean destroyed = false;
private static final String ERROR_DESTROYED = " map is already destroyed";
+ private static final String ERROR_NULL_KEY = "Key cannot be null";
+ private static final String ERROR_NULL_VALUE = "Null values are not allowed";
+
// TODO: Make these anti-entropy params configurable
private long initialDelaySec = 5;
private long periodSec = 5;
@@ -193,12 +196,14 @@
@Override
public boolean containsKey(K key) {
checkState(!destroyed, mapName + ERROR_DESTROYED);
+ checkNotNull(key, ERROR_NULL_KEY);
return items.containsKey(key);
}
@Override
public boolean containsValue(V value) {
checkState(!destroyed, mapName + ERROR_DESTROYED);
+ checkNotNull(value, ERROR_NULL_VALUE);
return items.values().stream()
.anyMatch(timestamped -> timestamped.value().equals(value));
@@ -207,6 +212,7 @@
@Override
public V get(K key) {
checkState(!destroyed, mapName + ERROR_DESTROYED);
+ checkNotNull(key, ERROR_NULL_KEY);
Timestamped<V> value = items.get(key);
if (value != null) {
@@ -218,6 +224,8 @@
@Override
public void put(K key, V value) {
checkState(!destroyed, mapName + ERROR_DESTROYED);
+ checkNotNull(key, ERROR_NULL_KEY);
+ checkNotNull(value, ERROR_NULL_VALUE);
Timestamp timestamp = clockService.getTimestamp(key);
if (putInternal(key, value, timestamp)) {
@@ -250,6 +258,7 @@
@Override
public void remove(K key) {
checkState(!destroyed, mapName + ERROR_DESTROYED);
+ checkNotNull(key, ERROR_NULL_KEY);
Timestamp timestamp = clockService.getTimestamp(key);
if (removeInternal(key, timestamp)) {
@@ -282,6 +291,10 @@
for (Map.Entry<? extends K, ? extends V> entry : m.entrySet()) {
K key = entry.getKey();
V value = entry.getValue();
+
+ checkNotNull(key, ERROR_NULL_KEY);
+ checkNotNull(value, ERROR_NULL_VALUE);
+
Timestamp timestamp = clockService.getTimestamp(entry.getKey());
if (putInternal(key, value, timestamp)) {