Committed by
Gerrit Code Review
Fix unhandled exception during shutdown due to provider service being unavailable
Change-Id: I891b2d3c64576fe7cace80ff7907551b46054db6
Showing
1 changed file
with
15 additions
and
0 deletions
... | @@ -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 | ... | ... |
-
Please register or login to post a comment