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%2Factors%2FDataTreeNotificationListenerRegistrationActor.java;h=2fdf3a9d622a927a75272c9f123650cf74689059;hb=HEAD;hp=38c7620b63dd7dd4d86dcd83f599d6cf86236484;hpb=35235f427f3a056f85fe83ddd1133e67540328f7;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/actors/DataTreeNotificationListenerRegistrationActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/actors/DataTreeNotificationListenerRegistrationActor.java index 38c7620b63..2fdf3a9d62 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/actors/DataTreeNotificationListenerRegistrationActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/actors/DataTreeNotificationListenerRegistrationActor.java @@ -7,17 +7,19 @@ */ package org.opendaylight.controller.cluster.datastore.actors; +import static java.util.Objects.requireNonNull; + import akka.actor.ActorRef; import akka.actor.Cancellable; import akka.actor.PoisonPill; import akka.actor.Props; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Preconditions; import java.util.concurrent.TimeUnit; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor; import org.opendaylight.controller.cluster.datastore.messages.CloseDataTreeNotificationListenerRegistration; import org.opendaylight.controller.cluster.datastore.messages.CloseDataTreeNotificationListenerRegistrationReply; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.concepts.Registration; import scala.concurrent.duration.FiniteDuration; /** @@ -25,24 +27,23 @@ import scala.concurrent.duration.FiniteDuration; * asked to do so via {@link CloseDataTreeNotificationListenerRegistration}. */ public final class DataTreeNotificationListenerRegistrationActor extends AbstractUntypedActor { + // FIXME: rework this constant to a duration and its injection @VisibleForTesting static long killDelay = TimeUnit.MILLISECONDS.convert(5, TimeUnit.SECONDS); - private ListenerRegistration registration; - private Runnable onClose; + private SetRegistration registration = null; + private Cancellable killSchedule = null; private boolean closed; - private Cancellable killSchedule; @Override - protected void handleReceive(Object message) { + protected void handleReceive(final Object message) { if (message instanceof CloseDataTreeNotificationListenerRegistration) { closeListenerRegistration(); if (isValidSender(getSender())) { getSender().tell(CloseDataTreeNotificationListenerRegistrationReply.getInstance(), getSelf()); } - } else if (message instanceof SetRegistration) { - registration = ((SetRegistration)message).registration; - onClose = ((SetRegistration)message).onClose; + } else if (message instanceof SetRegistration setRegistration) { + registration = setRegistration; if (closed) { closeListenerRegistration(); } @@ -53,10 +54,12 @@ public final class DataTreeNotificationListenerRegistrationActor extends Abstrac private void closeListenerRegistration() { closed = true; - if (registration != null) { - registration.close(); - onClose.run(); + + final var reg = registration; + if (reg != null) { registration = null; + reg.registration.close(); + reg.onClose.run(); if (killSchedule == null) { killSchedule = getContext().system().scheduler().scheduleOnce(FiniteDuration.create(killDelay, @@ -70,13 +73,11 @@ public final class DataTreeNotificationListenerRegistrationActor extends Abstrac return Props.create(DataTreeNotificationListenerRegistrationActor.class); } - public static class SetRegistration { - private final ListenerRegistration registration; - private final Runnable onClose; - - public SetRegistration(final ListenerRegistration registration, final Runnable onClose) { - this.registration = Preconditions.checkNotNull(registration); - this.onClose = Preconditions.checkNotNull(onClose); + @NonNullByDefault + public record SetRegistration(Registration registration, Runnable onClose) { + public SetRegistration { + requireNonNull(registration); + requireNonNull(onClose); } } }