Committed by
Gerrit Code Review
Fix for ONOS-4944
Change-Id: Ib9e769cca386390f3f38769e957f423692b5b43a
Showing
1 changed file
with
15 additions
and
0 deletions
| ... | @@ -19,6 +19,8 @@ import com.google.common.cache.Cache; | ... | @@ -19,6 +19,8 @@ import com.google.common.cache.Cache; |
| 19 | import com.google.common.cache.CacheBuilder; | 19 | import com.google.common.cache.CacheBuilder; |
| 20 | import com.google.common.cache.RemovalCause; | 20 | import com.google.common.cache.RemovalCause; |
| 21 | import com.google.common.cache.RemovalNotification; | 21 | import com.google.common.cache.RemovalNotification; |
| 22 | +import com.google.common.collect.ImmutableSet; | ||
| 23 | +import com.google.common.collect.Lists; | ||
| 22 | import com.google.common.collect.Maps; | 24 | import com.google.common.collect.Maps; |
| 23 | import com.google.common.collect.Sets; | 25 | import com.google.common.collect.Sets; |
| 24 | import org.apache.felix.scr.annotations.Activate; | 26 | import org.apache.felix.scr.annotations.Activate; |
| ... | @@ -267,6 +269,9 @@ public class OpenFlowRuleProvider extends AbstractProvider | ... | @@ -267,6 +269,9 @@ public class OpenFlowRuleProvider extends AbstractProvider |
| 267 | private void applyRule(FlowRule flowRule) { | 269 | private void applyRule(FlowRule flowRule) { |
| 268 | Dpid dpid = Dpid.dpid(flowRule.deviceId().uri()); | 270 | Dpid dpid = Dpid.dpid(flowRule.deviceId().uri()); |
| 269 | OpenFlowSwitch sw = controller.getSwitch(dpid); | 271 | OpenFlowSwitch sw = controller.getSwitch(dpid); |
| 272 | + if (sw == null) { | ||
| 273 | + return; | ||
| 274 | + } | ||
| 270 | 275 | ||
| 271 | FlowRuleExtPayLoad flowRuleExtPayLoad = flowRule.payLoad(); | 276 | FlowRuleExtPayLoad flowRuleExtPayLoad = flowRule.payLoad(); |
| 272 | if (hasPayload(flowRuleExtPayLoad)) { | 277 | if (hasPayload(flowRuleExtPayLoad)) { |
| ... | @@ -296,6 +301,9 @@ public class OpenFlowRuleProvider extends AbstractProvider | ... | @@ -296,6 +301,9 @@ public class OpenFlowRuleProvider extends AbstractProvider |
| 296 | private void removeRule(FlowRule flowRule) { | 301 | private void removeRule(FlowRule flowRule) { |
| 297 | Dpid dpid = Dpid.dpid(flowRule.deviceId().uri()); | 302 | Dpid dpid = Dpid.dpid(flowRule.deviceId().uri()); |
| 298 | OpenFlowSwitch sw = controller.getSwitch(dpid); | 303 | OpenFlowSwitch sw = controller.getSwitch(dpid); |
| 304 | + if (sw == null) { | ||
| 305 | + return; | ||
| 306 | + } | ||
| 299 | 307 | ||
| 300 | FlowRuleExtPayLoad flowRuleExtPayLoad = flowRule.payLoad(); | 308 | FlowRuleExtPayLoad flowRuleExtPayLoad = flowRule.payLoad(); |
| 301 | if (hasPayload(flowRuleExtPayLoad)) { | 309 | if (hasPayload(flowRuleExtPayLoad)) { |
| ... | @@ -329,6 +337,13 @@ public class OpenFlowRuleProvider extends AbstractProvider | ... | @@ -329,6 +337,13 @@ public class OpenFlowRuleProvider extends AbstractProvider |
| 329 | 337 | ||
| 330 | Dpid dpid = Dpid.dpid(batch.deviceId().uri()); | 338 | Dpid dpid = Dpid.dpid(batch.deviceId().uri()); |
| 331 | OpenFlowSwitch sw = controller.getSwitch(dpid); | 339 | OpenFlowSwitch sw = controller.getSwitch(dpid); |
| 340 | + if (sw == null) { | ||
| 341 | + Set<FlowRule> failures = ImmutableSet.copyOf(Lists.transform(batch.getOperations(), e -> e.target())); | ||
| 342 | + providerService.batchOperationCompleted(batch.id(), | ||
| 343 | + new CompletedBatchOperation(false, failures, batch.deviceId())); | ||
| 344 | + return; | ||
| 345 | + } | ||
| 346 | + | ||
| 332 | OFFlowMod mod; | 347 | OFFlowMod mod; |
| 333 | for (FlowRuleBatchEntry fbe : batch.getOperations()) { | 348 | for (FlowRuleBatchEntry fbe : batch.getOperations()) { |
| 334 | // flow is the third party privacy flow | 349 | // flow is the third party privacy flow | ... | ... |
-
Please register or login to post a comment