Pier Ventre

[CORD-438] Fix Segment Routing application

Changes:
- Discards Link events if one of the switch is down;
- Triggers the paths optimization after device-down event;

Change-Id: I4114f2450401e0d1ff5658d592daf319d977f20e
...@@ -662,6 +662,7 @@ public class DefaultRoutingHandler { ...@@ -662,6 +662,7 @@ public class DefaultRoutingHandler {
662 if (updatedEcmpSpgMap != null) { 662 if (updatedEcmpSpgMap != null) {
663 updatedEcmpSpgMap.remove(deviceId); 663 updatedEcmpSpgMap.remove(deviceId);
664 } 664 }
665 + this.populateRoutingRulesForLinkStatusChange(null);
665 } 666 }
666 667
667 private final class RetryFilters implements Runnable { 668 private final class RetryFilters implements Runnable {
......
...@@ -693,6 +693,15 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -693,6 +693,15 @@ public class SegmentRoutingManager implements SegmentRoutingService {
693 if (event.type() == LinkEvent.Type.LINK_ADDED) { 693 if (event.type() == LinkEvent.Type.LINK_ADDED) {
694 processLinkAdded((Link) event.subject()); 694 processLinkAdded((Link) event.subject());
695 } else if (event.type() == LinkEvent.Type.LINK_REMOVED) { 695 } else if (event.type() == LinkEvent.Type.LINK_REMOVED) {
696 + Link linkRemoved = (Link) event.subject();
697 + if (linkRemoved.src().elementId() instanceof DeviceId &&
698 + !deviceService.isAvailable(linkRemoved.src().deviceId())) {
699 + continue;
700 + }
701 + if (linkRemoved.dst().elementId() instanceof DeviceId &&
702 + !deviceService.isAvailable(linkRemoved.dst().deviceId())) {
703 + continue;
704 + }
696 processLinkRemoved((Link) event.subject()); 705 processLinkRemoved((Link) event.subject());
697 } else if (event.type() == DeviceEvent.Type.DEVICE_ADDED || 706 } else if (event.type() == DeviceEvent.Type.DEVICE_ADDED ||
698 event.type() == DeviceEvent.Type.DEVICE_AVAILABILITY_CHANGED || 707 event.type() == DeviceEvent.Type.DEVICE_AVAILABILITY_CHANGED ||
......