ONOS-4423: Support for invalidating cached map entries when a client session is suspended
Change-Id: Icb5e73dc7a37d9459d26cd3a5c9ca1e1a05b0436
diff --git a/core/api/src/main/java/org/onosproject/store/primitives/DefaultConsistentMap.java b/core/api/src/main/java/org/onosproject/store/primitives/DefaultConsistentMap.java
index 3f1e53b..5360e50 100644
--- a/core/api/src/main/java/org/onosproject/store/primitives/DefaultConsistentMap.java
+++ b/core/api/src/main/java/org/onosproject/store/primitives/DefaultConsistentMap.java
@@ -25,6 +25,7 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.function.BiFunction;
+import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
@@ -187,6 +188,21 @@
}
@Override
+ public void addStatusChangeListener(Consumer<Status> listener) {
+ asyncMap.addStatusChangeListener(listener);
+ }
+
+ @Override
+ public void removeStatusChangeListener(Consumer<Status> listener) {
+ asyncMap.removeStatusChangeListener(listener);
+ }
+
+ @Override
+ public Collection<Consumer<Status>> statusChangeListeners() {
+ return asyncMap.statusChangeListeners();
+ }
+
+ @Override
public Map<K, V> asJavaMap() {
synchronized (this) {
if (javaMap == null) {
diff --git a/core/api/src/main/java/org/onosproject/store/service/DistributedPrimitive.java b/core/api/src/main/java/org/onosproject/store/service/DistributedPrimitive.java
index e8111d6..38179df 100644
--- a/core/api/src/main/java/org/onosproject/store/service/DistributedPrimitive.java
+++ b/core/api/src/main/java/org/onosproject/store/service/DistributedPrimitive.java
@@ -15,7 +15,10 @@
*/
package org.onosproject.store.service;
+import java.util.Collection;
+import java.util.Collections;
import java.util.concurrent.CompletableFuture;
+import java.util.function.Consumer;
import org.onosproject.core.ApplicationId;
@@ -74,6 +77,29 @@
TRANSACTION_CONTEXT
}
+ /**
+ * Status of distributed primitive.
+ */
+ public enum Status {
+
+ /**
+ * Signifies a state wherein the primitive is operating correctly and is capable of meeting the advertised
+ * consistency and reliability guarantees.
+ */
+ ACTIVE,
+
+ /**
+ * Signifies a state wherein the primitive is temporarily incapable of providing the advertised
+ * consistency properties.
+ */
+ SUSPENDED,
+
+ /**
+ * Signifies a state wherein the primitive has been shutdown and therefore cannot perform its functions.
+ */
+ INACTIVE
+ }
+
static final long DEFAULT_OPERTATION_TIMEOUT_MILLIS = 60000L;
/**
@@ -107,4 +133,24 @@
default CompletableFuture<Void> destroy() {
return CompletableFuture.completedFuture(null);
}
+
+ /**
+ * Registers a listener to be called when the primitive's status changes.
+ * @param listener The listener to be called when the status changes.
+ */
+ default void addStatusChangeListener(Consumer<Status> listener) {}
+
+ /**
+ * Unregisters a previously registered listener to be called when the primitive's status changes.
+ * @param listener The listener to unregister
+ */
+ default void removeStatusChangeListener(Consumer<Status> listener) {}
+
+ /**
+ * Returns the collection of status change listeners previously registered.
+ * @return collection of status change listeners
+ */
+ default Collection<Consumer<Status>> statusChangeListeners() {
+ return Collections.emptyList();
+ }
}