Fix: resolve an issue of installing rules before purging them
Change-Id: I0be44707d2fec1b4a97a9fbe1c61eee4da0b4ce6
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeRulesCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeRulesCommand.java
index be72076..49c31cb 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeRulesCommand.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeRulesCommand.java
@@ -22,6 +22,10 @@
import org.onosproject.net.flow.FlowRuleService;
import org.onosproject.openstacknetworking.api.Constants;
+import java.util.stream.Stream;
+
+import static java.util.stream.StreamSupport.stream;
+
/**
* Purges all existing network states.
*/
@@ -39,6 +43,15 @@
return;
}
flowRuleService.removeFlowRulesById(appId);
+
+ // we make sure all flow rules are removed from the store
+ while (true) {
+ Stream stream = stream(flowRuleService.getFlowEntriesById(appId).spliterator(), false);
+ if (stream.count() == 0) {
+ break;
+ }
+ }
+
print("Successfully purged flow rules installed by OpenStack networking application.");
}
}
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
index 2c36b2e..7834a82 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
@@ -53,8 +53,10 @@
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
+import java.util.stream.Stream;
import static java.lang.Thread.sleep;
+import static java.util.stream.StreamSupport.stream;
import static org.onlab.util.Tools.nullIsIllegal;
import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.addRouterIface;
import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.checkActivationFlag;
@@ -359,6 +361,14 @@
throw new ItemNotFoundException("application not found");
}
flowRuleService.removeFlowRulesById(appId);
+
+ // we make sure all flow rules are removed from the store
+ while (true) {
+ Stream stream = stream(flowRuleService.getFlowEntriesById(appId).spliterator(), false);
+ if (stream.count() == 0) {
+ break;
+ }
+ }
}
private void configArpModeBase(String arpMode) {