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%2Fdatabroker%2Factors%2Fdds%2FDistributedDataStoreClientActor.java;h=45875baa150682e01a7bc3bc6e5a6d6404c46ada;hb=refs%2Fchanges%2F99%2F47499%2F3;hp=11aeae4f9212a09e7f2030392930cee85678b4e6;hpb=b08cf9e64783ce7db00b6e41f2720f56b726d3b5;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/DistributedDataStoreClientActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/DistributedDataStoreClientActor.java index 11aeae4f92..45875baa15 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/DistributedDataStoreClientActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/DistributedDataStoreClientActor.java @@ -9,22 +9,21 @@ package org.opendaylight.controller.cluster.databroker.actors.dds; import akka.actor.ActorRef; import akka.actor.Props; -import akka.pattern.ExplicitAskSupport; import akka.util.Timeout; import com.google.common.base.Preconditions; import com.google.common.base.Throwables; import java.util.concurrent.TimeUnit; import javax.annotation.Nonnull; +import org.opendaylight.controller.cluster.access.client.AbstractClientActor; +import org.opendaylight.controller.cluster.access.client.ClientActorContext; import org.opendaylight.controller.cluster.access.concepts.FrontendIdentifier; import org.opendaylight.controller.cluster.access.concepts.FrontendType; import org.opendaylight.controller.cluster.access.concepts.MemberName; -import org.opendaylight.controller.cluster.datastore.actors.client.AbstractClientActor; -import org.opendaylight.controller.cluster.datastore.actors.client.ClientActorContext; +import org.opendaylight.controller.cluster.common.actor.ExplicitAsk; import org.opendaylight.controller.cluster.datastore.utils.ActorContext; import scala.Function1; import scala.concurrent.Await; import scala.concurrent.duration.Duration; -import scala.runtime.AbstractFunction1; /** * A {@link AbstractClientActor} which acts as the point of contact for DistributedDataStore. @@ -32,16 +31,7 @@ import scala.runtime.AbstractFunction1; * @author Robert Varga */ public final class DistributedDataStoreClientActor extends AbstractClientActor { - // Unfortunately Akka's explicit ask pattern does not work with its Java API, as it fails to invoke passed message. - // In order to make this work for now, we tap directly into ExplicitAskSupport and use a Scala function instead - // of akka.japi.Function. - private static final ExplicitAskSupport ASK_SUPPORT = akka.pattern.extended.package$.MODULE$; - private static final Function1 GET_CLIENT_FACTORY = new AbstractFunction1() { - @Override - public Object apply(final ActorRef askSender) { - return new GetClientRequest(askSender); - } - }; + private static final Function1 GET_CLIENT_FACTORY = ExplicitAsk.toScala(t -> new GetClientRequest(t)); private final ActorContext actorContext; @@ -55,17 +45,19 @@ public final class DistributedDataStoreClientActor extends AbstractClientActor { return new DistributedDataStoreClientBehavior(context, actorContext); } - public static Props props(final @Nonnull MemberName memberName, @Nonnull final String storeName, final ActorContext ctx) { + public static Props props(@Nonnull final MemberName memberName, @Nonnull final String storeName, + final ActorContext ctx) { final String name = "datastore-" + storeName; final FrontendIdentifier frontendId = FrontendIdentifier.create(memberName, FrontendType.forName(name)); return Props.create(DistributedDataStoreClientActor.class, () -> new DistributedDataStoreClientActor(frontendId, ctx)); } - public static DistributedDataStoreClient getDistributedDataStoreClient(final @Nonnull ActorRef actor, + @SuppressWarnings("checkstyle:IllegalCatch") + public static DistributedDataStoreClient getDistributedDataStoreClient(@Nonnull final ActorRef actor, final long timeout, final TimeUnit unit) { try { - return (DistributedDataStoreClient) Await.result(ASK_SUPPORT.ask(actor, GET_CLIENT_FACTORY, + return (DistributedDataStoreClient) Await.result(ExplicitAsk.ask(actor, GET_CLIENT_FACTORY, Timeout.apply(timeout, unit)), Duration.Inf()); } catch (Exception e) { throw Throwables.propagate(e);