Ray Milkey
Committed by Gerrit Code Review

Fix unhandled exception during shutdown due to provider service being unavailable

Change-Id: I891b2d3c64576fe7cace80ff7907551b46054db6
...@@ -177,6 +177,7 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr ...@@ -177,6 +177,7 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr
177 @Deactivate 177 @Deactivate
178 public void deactivate(ComponentContext context) { 178 public void deactivate(ComponentContext context) {
179 cfgService.unregisterProperties(getClass(), false); 179 cfgService.unregisterProperties(getClass(), false);
180 + listener.disable();
180 controller.removeListener(listener); 181 controller.removeListener(listener);
181 providerRegistry.unregister(this); 182 providerRegistry.unregister(this);
182 collectors.values().forEach(PortStatsCollector::stop); 183 collectors.values().forEach(PortStatsCollector::stop);
...@@ -344,6 +345,7 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr ...@@ -344,6 +345,7 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr
344 private class InternalDeviceProvider implements OpenFlowSwitchListener, OpenFlowEventListener { 345 private class InternalDeviceProvider implements OpenFlowSwitchListener, OpenFlowEventListener {
345 346
346 private HashMap<Dpid, List<OFPortStatsEntry>> portStatsReplies = new HashMap<>(); 347 private HashMap<Dpid, List<OFPortStatsEntry>> portStatsReplies = new HashMap<>();
348 + private boolean isDisabled = false;
347 349
348 @Override 350 @Override
349 public void switchAdded(Dpid dpid) { 351 public void switchAdded(Dpid dpid) {
...@@ -773,6 +775,11 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr ...@@ -773,6 +775,11 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr
773 775
774 @Override 776 @Override
775 public void handleMessage(Dpid dpid, OFMessage msg) { 777 public void handleMessage(Dpid dpid, OFMessage msg) {
778 + if (isDisabled) {
779 + return;
780 + }
781 +
782 + try {
776 switch (msg.getType()) { 783 switch (msg.getType()) {
777 case STATS_REPLY: 784 case STATS_REPLY:
778 if (((OFStatsReply) msg).getStatsType() == OFStatsType.PORT) { 785 if (((OFStatsReply) msg).getStatsType() == OFStatsType.PORT) {
...@@ -796,6 +803,14 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr ...@@ -796,6 +803,14 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr
796 default: 803 default:
797 break; 804 break;
798 } 805 }
806 + } catch (IllegalStateException e) {
807 + // system is shutting down and the providerService is no longer
808 + // valid. Messages cannot be processed.
809 + }
810 + }
811 +
812 + private void disable() {
813 + isDisabled = true;
799 } 814 }
800 } 815 }
801 816
......