Misc fixes in openflow provider subsystem
Change-Id: I5e6ab619f66ca71badc25efc7be7560070639051
(cherry picked from commit 91e1d737f6c60b48d7b2eb03a524138db1d68e8c)
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
index a3a0738..1482add 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/OpenFlowRuleProvider.java
@@ -19,8 +19,11 @@
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.RemovalCause;
import com.google.common.cache.RemovalNotification;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -217,6 +220,7 @@
}
private void createCollector(OpenFlowSwitch sw) {
+ checkNotNull(sw, "Null switch");
if (adaptiveFlowSampling) {
// NewAdaptiveFlowStatsCollector Constructor
NewAdaptiveFlowStatsCollector fsc =
@@ -339,10 +343,17 @@
public void executeBatch(FlowRuleBatchOperation batch) {
checkNotNull(batch);
- pendingBatches.put(batch.id(), new InternalCacheEntry(batch));
-
Dpid dpid = Dpid.dpid(batch.deviceId().uri());
OpenFlowSwitch sw = controller.getSwitch(dpid);
+
+ // If switch no longer exists, simply return.
+ if (sw == null) {
+ Set<FlowRule> failures = ImmutableSet.copyOf(Lists.transform(batch.getOperations(), e -> e.target()));
+ providerService.batchOperationCompleted(batch.id(),
+ new CompletedBatchOperation(false, failures, batch.deviceId()));
+ return;
+ }
+ pendingBatches.put(batch.id(), new InternalCacheEntry(batch));
OFFlowMod mod;
for (FlowRuleBatchEntry fbe : batch.getOperations()) {
// flow is the third party privacy flow