Ray Milkey

Fix shutdown crash if link pruner runs after services are shut down

Change-Id: I7eb3dc9ed19b1a20182d34f8e25df151e32f572f
...@@ -142,6 +142,8 @@ public class LldpLinkProvider extends AbstractProvider implements ProbedLinkProv ...@@ -142,6 +142,8 @@ public class LldpLinkProvider extends AbstractProvider implements ProbedLinkProv
142 142
143 private ScheduledExecutorService executor; 143 private ScheduledExecutorService executor;
144 144
145 + private boolean shuttingDown = false;
146 +
145 // TODO: Add sanity checking for the configurable params based on the delays 147 // TODO: Add sanity checking for the configurable params based on the delays
146 private static final long DEVICE_SYNC_DELAY = 5; 148 private static final long DEVICE_SYNC_DELAY = 5;
147 private static final long LINK_PRUNER_DELAY = 3; 149 private static final long LINK_PRUNER_DELAY = 3;
...@@ -238,6 +240,7 @@ public class LldpLinkProvider extends AbstractProvider implements ProbedLinkProv ...@@ -238,6 +240,7 @@ public class LldpLinkProvider extends AbstractProvider implements ProbedLinkProv
238 240
239 @Activate 241 @Activate
240 public void activate(ComponentContext context) { 242 public void activate(ComponentContext context) {
243 + shuttingDown = false;
241 cfgService.registerProperties(getClass()); 244 cfgService.registerProperties(getClass());
242 appId = coreService.registerApplication(PROVIDER_NAME); 245 appId = coreService.registerApplication(PROVIDER_NAME);
243 246
...@@ -265,6 +268,7 @@ public class LldpLinkProvider extends AbstractProvider implements ProbedLinkProv ...@@ -265,6 +268,7 @@ public class LldpLinkProvider extends AbstractProvider implements ProbedLinkProv
265 268
266 @Deactivate 269 @Deactivate
267 public void deactivate() { 270 public void deactivate() {
271 + shuttingDown = true;
268 cfgRegistry.removeListener(cfgListener); 272 cfgRegistry.removeListener(cfgListener);
269 factories.forEach(cfgRegistry::unregisterConfigFactory); 273 factories.forEach(cfgRegistry::unregisterConfigFactory);
270 274
...@@ -352,7 +356,6 @@ public class LldpLinkProvider extends AbstractProvider implements ProbedLinkProv ...@@ -352,7 +356,6 @@ public class LldpLinkProvider extends AbstractProvider implements ProbedLinkProv
352 deviceService.removeListener(deviceListener); 356 deviceService.removeListener(deviceListener);
353 packetService.removeProcessor(packetProcessor); 357 packetService.removeProcessor(packetProcessor);
354 358
355 -
356 if (executor != null) { 359 if (executor != null) {
357 executor.shutdownNow(); 360 executor.shutdownNow();
358 } 361 }
...@@ -690,7 +693,13 @@ public class LldpLinkProvider extends AbstractProvider implements ProbedLinkProv ...@@ -690,7 +693,13 @@ public class LldpLinkProvider extends AbstractProvider implements ProbedLinkProv
690 693
691 } catch (Exception e) { 694 } catch (Exception e) {
692 // Catch all exceptions to avoid task being suppressed 695 // Catch all exceptions to avoid task being suppressed
693 - log.error("Exception thrown during link pruning process", e); 696 + if (!shuttingDown) {
697 + // Error condition
698 + log.error("Exception thrown during link pruning process", e);
699 + } else {
700 + // Provider is shutting down, the error can be ignored
701 + log.trace("Shutting down, ignoring error", e);
702 + }
694 } 703 }
695 } 704 }
696 705
......