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