- @Override
- void onMessage(final RegisterChangeListener message, final boolean isLeader, boolean hasLeader) {
-
- LOG.debug("{}: registerDataChangeListener for {}, isLeader: {}, hasLeader : {}",
- persistenceId(), message.getPath(), isLeader, hasLeader);
-
- final ListenerRegistration<AsyncDataChangeListener<YangInstanceIdentifier,
- NormalizedNode<?, ?>>> registration;
- if ((hasLeader && message.isRegisterOnAllInstances()) || isLeader) {
- final Entry<DataChangeListenerRegistration<AsyncDataChangeListener<YangInstanceIdentifier, NormalizedNode<?, ?>>>,
- Optional<DataTreeCandidate>> res = createDelegate(message);
- registration = res.getKey();
-
- getShard().getDataStore().notifyOfInitialData(res.getKey(), res.getValue());
- } else {
- LOG.debug("{}: Shard is not the leader - delaying registration", persistenceId());
-
- DelayedListenerRegistration delayedReg = new DelayedListenerRegistration(message);
- if(message.isRegisterOnAllInstances()) {
- delayedRegisterOnAllListeners.add(delayedReg);
- } else {
- delayedListenerRegistrations.add(delayedReg);
+ getShard().getDataStore().notifyOfInitialData(regEntry.getKey(), regEntry.getValue());
+
+ listenerActors.add(dataChangeListenerPath);
+ final DataChangeListenerRegistration<AsyncDataChangeListener<YangInstanceIdentifier, NormalizedNode<?, ?>>>
+ delegate = regEntry.getKey();
+ return new DataChangeListenerRegistration<AsyncDataChangeListener<YangInstanceIdentifier,
+ NormalizedNode<?,?>>>() {
+ @Override
+ public void close() {
+ listenerActors.remove(dataChangeListenerPath);
+ delegate.close();