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=7d9118dfbe03bc1e2bb87f4513010c2152202524;hpb=3859df9beca8f13f1ff2b2744ed3470a1715bec3;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 7d9118dfbe..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 @@ -15,10 +15,11 @@ import akka.actor.PoisonPill; import akka.actor.Props; import com.google.common.annotations.VisibleForTesting; 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; /** @@ -26,13 +27,13 @@ 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(final Object message) { @@ -41,9 +42,8 @@ public final class DataTreeNotificationListenerRegistrationActor extends Abstrac 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(); } @@ -54,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, @@ -71,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 = requireNonNull(registration); - this.onClose = requireNonNull(onClose); + @NonNullByDefault + public record SetRegistration(Registration registration, Runnable onClose) { + public SetRegistration { + requireNonNull(registration); + requireNonNull(onClose); } } }