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=2a60abbc46827fca03ca62be80eeac22f025b5be;hpb=ec870dee9bacb971f11bc747b69e84ac37f5d746;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 2a60abbc46..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,42 +7,43 @@ */ 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 scala.concurrent.duration.Duration; +import org.opendaylight.yangtools.concepts.Registration; +import scala.concurrent.duration.FiniteDuration; /** * Actor co-located with a shard. It exists only to terminate the registration when * 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) throws Exception { + 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,13 +54,15 @@ 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(Duration.create(killDelay, + killSchedule = getContext().system().scheduler().scheduleOnce(FiniteDuration.create(killDelay, TimeUnit.MILLISECONDS), getSelf(), PoisonPill.getInstance(), getContext().dispatcher(), ActorRef.noSender()); } @@ -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); } } }