CORD-2916 Reset RA handler when mastership changes
Change-Id: Ib103757a078a673657a7a5d6c3299962a1d423c7
diff --git a/apps/routeradvertisement/src/main/java/org/onosproject/ra/RouterAdvertisementManager.java b/apps/routeradvertisement/src/main/java/org/onosproject/ra/RouterAdvertisementManager.java
index 9f10728..f568e90 100644
--- a/apps/routeradvertisement/src/main/java/org/onosproject/ra/RouterAdvertisementManager.java
+++ b/apps/routeradvertisement/src/main/java/org/onosproject/ra/RouterAdvertisementManager.java
@@ -36,6 +36,8 @@
import org.onosproject.cfg.ComponentConfigService;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
+import org.onosproject.mastership.MastershipEvent;
+import org.onosproject.mastership.MastershipListener;
import org.onosproject.mastership.MastershipService;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
@@ -326,7 +328,6 @@
// Handler for device updates
private class InternalDeviceListener implements DeviceListener {
-
@Override
public void event(DeviceEvent event) {
switch (event.type()) {
@@ -344,8 +345,25 @@
}
}
- private final InternalDeviceListener internalDeviceListener =
- new InternalDeviceListener();
+ private class InternalMastershipListener implements MastershipListener {
+ @Override
+ public void event(MastershipEvent event) {
+ switch (event.type()) {
+ case MASTER_CHANGED:
+ clearTxWorkers();
+ setupTxWorkers();
+ log.trace("Processed mastership event {} on {}", event.type(), event.subject());
+ break;
+ case BACKUPS_CHANGED:
+ case SUSPENDED:
+ default:
+ break;
+ }
+ }
+ }
+
+ private final InternalDeviceListener internalDeviceListener = new InternalDeviceListener();
+ private final InternalMastershipListener internalMastershipListener = new InternalMastershipListener();
// Processor for Solicited RA packets
private class InternalPacketProcessor implements PacketProcessor {
@@ -394,8 +412,9 @@
networkConfigRegistry.registerConfigFactory(deviceConfigFactory);
loadGlobalPrefixConfig();
- // Dynamic device updates handling
+ // Register device and mastership event listener
deviceService.addListener(internalDeviceListener);
+ mastershipService.addListener(internalMastershipListener);
// Setup pool and worker threads for existing interfaces
setupPoolAndTxWorkers();
@@ -478,6 +497,7 @@
networkConfigRegistry.unregisterConfigFactory(deviceConfigFactory);
packetService.removeProcessor(processor);
deviceService.removeListener(internalDeviceListener);
+ mastershipService.removeListener(internalMastershipListener);
// Clear pool & threads
clearPoolAndTxWorkers();