X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDataChangeListener.java;h=f0c6595ac4cbbb8d2bdfea00503728b09c21d326;hb=2a035cba6169185444e7074952b5a2f5cebb3bb1;hp=cee73445778ea473a61c50b66c61bcb92ca0878f;hpb=a81d98f692b80c45bce3fe6a87e731abfb012a9f;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListener.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListener.java index cee7344577..f0c6595ac4 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListener.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListener.java @@ -9,13 +9,13 @@ package org.opendaylight.controller.cluster.datastore; import akka.actor.Props; -import akka.japi.Creator; import com.google.common.base.Preconditions; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor; import org.opendaylight.controller.cluster.datastore.messages.DataChanged; import org.opendaylight.controller.cluster.datastore.messages.DataChangedReply; +import org.opendaylight.controller.cluster.datastore.messages.DataTreeListenerInfo; import org.opendaylight.controller.cluster.datastore.messages.EnableNotification; +import org.opendaylight.controller.cluster.datastore.messages.GetInfo; import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeListener; @@ -30,10 +30,14 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @Deprecated public class DataChangeListener extends AbstractUntypedActor { private final AsyncDataChangeListener> listener; + private final YangInstanceIdentifier registeredPath; private boolean notificationsEnabled = false; + private long notificationCount; - public DataChangeListener(AsyncDataChangeListener> listener) { + public DataChangeListener(AsyncDataChangeListener> listener, + final YangInstanceIdentifier registeredPath) { this.listener = Preconditions.checkNotNull(listener, "listener should not be null"); + this.registeredPath = Preconditions.checkNotNull(registeredPath); } @Override @@ -42,6 +46,9 @@ public class DataChangeListener extends AbstractUntypedActor { dataChanged(message); } else if (message instanceof EnableNotification) { enableNotification((EnableNotification) message); + } else if (message instanceof GetInfo) { + getSender().tell(new DataTreeListenerInfo(listener.toString(), registeredPath.toString(), + notificationsEnabled, notificationCount), getSelf()); } else { unknownMessage(message); } @@ -67,10 +74,12 @@ public class DataChangeListener extends AbstractUntypedActor { LOG.debug("Sending change notification {} to listener {}", change, listener); + notificationCount++; + try { this.listener.onDataChanged(change); } catch (RuntimeException e) { - LOG.error( String.format( "Error notifying listener %s", this.listener ), e ); + LOG.error(String.format("Error notifying listener %s", this.listener), e); } if (isValidSender(getSender())) { @@ -78,26 +87,8 @@ public class DataChangeListener extends AbstractUntypedActor { } } - public static Props props(final AsyncDataChangeListener> listener) { - return Props.create(new DataChangeListenerCreator(listener)); - } - - private static class DataChangeListenerCreator implements Creator { - private static final long serialVersionUID = 1L; - - @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "This field is not Serializable but we don't " - + "create remote instances of this actor and thus don't need it to be Serializable.") - final AsyncDataChangeListener> listener; - - DataChangeListenerCreator( - AsyncDataChangeListener> listener) { - this.listener = listener; - } - - @Override - public DataChangeListener create() throws Exception { - return new DataChangeListener(listener); - } + public static Props props(final AsyncDataChangeListener> listener, + final YangInstanceIdentifier registeredPath) { + return Props.create(DataChangeListener.class, listener, registeredPath); } }