Intents are now removed after being withdrawn.
Change-Id: I7574fe94add00abf58c71c6122bb3dc5aafa0f79
diff --git a/core/api/src/main/java/org/onlab/onos/net/intent/IntentStore.java b/core/api/src/main/java/org/onlab/onos/net/intent/IntentStore.java
index a2248a2..3af59c1 100644
--- a/core/api/src/main/java/org/onlab/onos/net/intent/IntentStore.java
+++ b/core/api/src/main/java/org/onlab/onos/net/intent/IntentStore.java
@@ -42,9 +42,8 @@
* Removes the specified intent from the inventory.
*
* @param intentId intent identification
- * @return removed state transition event or null if intent was not found
*/
- IntentEvent removeIntent(IntentId intentId);
+ void removeIntent(IntentId intentId);
/**
* Returns the number of intents in the store.
@@ -103,8 +102,6 @@
*/
List<Intent> getInstallableIntents(IntentId intentId);
- // TODO: this should be triggered from with the store as a result of removeIntent call
-
/**
* Removes any installable intents which resulted from compilation of the
* specified original intent.
diff --git a/core/net/src/main/java/org/onlab/onos/net/intent/impl/IntentManager.java b/core/net/src/main/java/org/onlab/onos/net/intent/impl/IntentManager.java
index fb6aa40..da2fe70 100644
--- a/core/net/src/main/java/org/onlab/onos/net/intent/impl/IntentManager.java
+++ b/core/net/src/main/java/org/onlab/onos/net/intent/impl/IntentManager.java
@@ -694,6 +694,10 @@
if (event != null) {
eventDispatcher.post(event);
}
+
+ if (newState == WITHDRAWN) {
+ store.removeIntent(intent.id());
+ }
}
Map<Intent, IntentState> stateMap() {
diff --git a/core/net/src/test/java/org/onlab/onos/net/intent/impl/IntentManagerTest.java b/core/net/src/test/java/org/onlab/onos/net/intent/impl/IntentManagerTest.java
index dc7383b..20240d4 100644
--- a/core/net/src/test/java/org/onlab/onos/net/intent/impl/IntentManagerTest.java
+++ b/core/net/src/test/java/org/onlab/onos/net/intent/impl/IntentManagerTest.java
@@ -155,7 +155,8 @@
listener.setLatch(1, Type.WITHDRAWN);
service.withdraw(intent);
listener.await(Type.WITHDRAWN);
- assertEquals(1L, service.getIntentCount());
+ delay(10); //FIXME this is a race
+ assertEquals(0L, service.getIntentCount());
assertEquals(0L, flowRuleService.getFlowRuleCount());
}
@@ -176,7 +177,8 @@
listener.await(Type.INSTALLED);
listener.await(Type.WITHDRAWN);
- assertEquals(1L, service.getIntentCount());
+ delay(10); //FIXME this is a race
+ assertEquals(0L, service.getIntentCount());
assertEquals(0L, flowRuleService.getFlowRuleCount());
}
@@ -198,7 +200,8 @@
service.replace(intent.id(), intent2);
listener.await(Type.WITHDRAWN);
listener.await(Type.INSTALLED);
- assertEquals(2L, service.getIntentCount());
+ delay(10); //FIXME this is a race
+ assertEquals(1L, service.getIntentCount());
assertEquals(1L, manager.flowRuleService.getFlowRuleCount());
assertEquals(intent2.number().intValue(),
flowRuleService.flows.iterator().next().priority());
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/DistributedIntentStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/DistributedIntentStore.java
index 5974b62..8da72cf 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/DistributedIntentStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/DistributedIntentStore.java
@@ -50,6 +50,7 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import static com.google.common.base.Preconditions.checkState;
import static org.onlab.onos.net.intent.IntentState.*;
import static org.slf4j.LoggerFactory.getLogger;
import static org.onlab.metrics.MetricsUtil.*;
@@ -174,20 +175,15 @@
}
@Override
- public IntentEvent removeIntent(IntentId intentId) {
+ public void removeIntent(IntentId intentId) {
Context timer = startTimer(removeIntentTimer);
+ checkState(getIntentState(intentId) == WITHDRAWN,
+ "Intent state for {} is not WITHDRAWN.", intentId);
try {
- Intent intent = intents.remove(intentId);
- installable.remove(intentId);
- if (intent == null) {
- // was already removed
- return null;
- }
- IntentEvent event = this.setState(intent, WITHDRAWN);
+ intents.remove(intentId);
states.remove(intentId);
transientStates.remove(intentId);
- // TODO: Should we callremoveInstalledIntents if this Intent was
- return event;
+ installable.remove(intentId);
} finally {
stopTimer(timer);
}
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/HazelcastIntentStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/HazelcastIntentStore.java
index 001ab7e..29bf15f 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/HazelcastIntentStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/intent/impl/HazelcastIntentStore.java
@@ -52,6 +52,7 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import static com.google.common.base.Preconditions.checkState;
import static org.onlab.onos.net.intent.IntentState.*;
import static org.slf4j.LoggerFactory.getLogger;
import static org.onlab.metrics.MetricsUtil.*;
@@ -177,20 +178,15 @@
}
@Override
- public IntentEvent removeIntent(IntentId intentId) {
+ public void removeIntent(IntentId intentId) {
Context timer = startTimer(removeIntentTimer);
+ checkState(getIntentState(intentId) == WITHDRAWN,
+ "Intent state for {} is not WITHDRAWN.", intentId);
try {
- Intent intent = intents.remove(intentId);
+ intents.remove(intentId);
installable.remove(intentId);
- if (intent == null) {
- // was already removed
- return null;
- }
- IntentEvent event = this.setState(intent, WITHDRAWN);
states.remove(intentId);
transientStates.remove(intentId);
- // TODO: Should we callremoveInstalledIntents if this Intent was
- return event;
} finally {
stopTimer(timer);
}
diff --git a/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleIntentStore.java b/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleIntentStore.java
index 5a91276..51ee166 100644
--- a/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleIntentStore.java
+++ b/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleIntentStore.java
@@ -33,6 +33,7 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import static com.google.common.base.Preconditions.checkState;
import static org.onlab.onos.net.intent.IntentState.WITHDRAWN;
import static org.slf4j.LoggerFactory.getLogger;
@@ -68,16 +69,12 @@
}
@Override
- public IntentEvent removeIntent(IntentId intentId) {
- Intent intent = intents.remove(intentId);
+ public void removeIntent(IntentId intentId) {
+ checkState(getIntentState(intentId) == WITHDRAWN,
+ "Intent state for {} is not WITHDRAWN.", intentId);
+ intents.remove(intentId);
installable.remove(intentId);
- if (intent == null) {
- // was already removed
- return null;
- }
- IntentEvent event = this.setState(intent, WITHDRAWN);
states.remove(intentId);
- return event;
}
@Override