X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fnotifications%2FRoleChangeNotifier.java;h=598dfb1fe827fe8b03234003dc5d0bdf7c750223;hb=95115ca49f3b16b936e0f6c88aedfc17cd0ee92c;hp=d065f6d211be3ecba0bfc1364eb0693e68e42679;hpb=b0d28ac778be8cc62b71170f8efc8e0148f2026a;p=controller.git diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/notifications/RoleChangeNotifier.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/notifications/RoleChangeNotifier.java index d065f6d211..598dfb1fe8 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/notifications/RoleChangeNotifier.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/notifications/RoleChangeNotifier.java @@ -17,16 +17,17 @@ import java.util.Map; import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor; /** - * The RoleChangeNotifier is responsible for receiving Raft role change messages and notifying + * The RoleChangeNotifier is responsible for receiving Raft role and leader state change messages and notifying * the listeners (within the same node), which are registered with it. *

* The RoleChangeNotifier is instantiated by the Shard and injected into the RaftActor. */ public class RoleChangeNotifier extends AbstractUntypedActor implements AutoCloseable { - private String memberId; - private Map registeredListeners = Maps.newHashMap(); + private final String memberId; + private final Map registeredListeners = Maps.newHashMap(); private RoleChangeNotification latestRoleChangeNotification = null; + private LeaderStateChanged latestLeaderStateChanged; public RoleChangeNotifier(String memberId) { this.memberId = memberId; @@ -62,6 +63,10 @@ public class RoleChangeNotifier extends AbstractUntypedActor implements AutoClos getSender().tell(new RegisterRoleChangeListenerReply(), getSelf()); + if(latestLeaderStateChanged != null) { + getSender().tell(latestLeaderStateChanged, getSelf()); + } + if (latestRoleChangeNotification != null) { getSender().tell(latestRoleChangeNotification, getSelf()); } @@ -81,6 +86,12 @@ public class RoleChangeNotifier extends AbstractUntypedActor implements AutoClos for (ActorRef listener: registeredListeners.values()) { listener.tell(latestRoleChangeNotification, getSelf()); } + } else if (message instanceof LeaderStateChanged) { + latestLeaderStateChanged = (LeaderStateChanged)message; + + for (ActorRef listener: registeredListeners.values()) { + listener.tell(latestLeaderStateChanged, getSelf()); + } } }