- void onLeadershipChange(final boolean isLeader) {
- if (isLeader) {
- for (DelayedDataTreeListenerRegistration reg : delayedRegistrations) {
- reg.createDelegate(this);
- }
- delayedRegistrations.clear();
- delayedRegistrations.trimToSize();
- }
-
- final EnableNotification msg = new EnableNotification(isLeader);
- for (ActorSelection dataChangeListener : actors) {
- dataChangeListener.tell(msg, getSelf());
- }
- }
-
- @Override
- void onMessage(final RegisterDataTreeChangeListener registerTreeChangeListener, final boolean isLeader) {
- LOG.debug("{}: registerTreeChangeListener for {}, leader: {}", persistenceId(), registerTreeChangeListener.getPath(), isLeader);
-
- final ListenerRegistration<DOMDataTreeChangeListener> registration;
- final DataTreeCandidate event;
- if (!isLeader) {
- LOG.debug("{}: Shard is not the leader - delaying registration", persistenceId());
-
- DelayedDataTreeListenerRegistration delayedReg =
- new DelayedDataTreeListenerRegistration(registerTreeChangeListener);
- delayedRegistrations.add(delayedReg);
- registration = delayedReg;
- event = null;
- } else {
- final Entry<ListenerRegistration<DOMDataTreeChangeListener>, DataTreeCandidate> res = createDelegate(registerTreeChangeListener);
- registration = res.getKey();
- event = res.getValue();
- }
-
- ActorRef listenerRegistration = createActor(DataTreeChangeListenerRegistrationActor.props(registration));
-
- LOG.debug("{}: registerDataChangeListener sending reply, listenerRegistrationPath = {} ",
- persistenceId(), listenerRegistration.path());
-
- tellSender(new RegisterDataTreeChangeListenerReply(listenerRegistration));
- if (event != null) {
- registration.getInstance().onDataTreeChanged(Collections.singletonList(event));
- }
- }
-
- @Override
- Entry<ListenerRegistration<DOMDataTreeChangeListener>, DataTreeCandidate> createDelegate(final RegisterDataTreeChangeListener message) {