updates to EventuallyConsistenMapImpl to improve parallelism
Change-Id: I7bf29c02380f630e592d980d0795efc6ac13167a
diff --git a/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java b/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java
index 51e5147..3b2129f3 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java
@@ -258,23 +258,28 @@
}
private boolean putInternal(K key, V value, Timestamp timestamp) {
- synchronized (this) {
- Timestamp removed = removedItems.get(key);
- if (removed != null && removed.compareTo(timestamp) > 0) {
- log.debug("ecmap - removed was newer {}", value);
- return false;
- }
+ Timestamp removed = removedItems.get(key);
+ if (removed != null && removed.compareTo(timestamp) > 0) {
+ log.debug("ecmap - removed was newer {}", value);
+ return false;
+ }
+ boolean success;
+ synchronized (this) {
Timestamped<V> existing = items.get(key);
if (existing != null && existing.isNewer(timestamp)) {
log.debug("ecmap - existing was newer {}", value);
- return false;
+ success = false;
} else {
items.put(key, new Timestamped<>(value, timestamp));
- removedItems.remove(key);
- return true;
+ success = true;
}
}
+
+ if (success && removed != null) {
+ removedItems.remove(key, removed);
+ }
+ return success;
}
@Override