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%2Futils%2FActorContext.java;h=8ba333d2799a5177c7b1b8b5b09ab6b4ec87d126;hb=34bc6ec632529a0dfe419aa7404bb42a456fbc96;hp=c989b275df3105480b035b7972e83c0822b7182d;hpb=eeb7581f3d675fa499638e90f01e657c73c67c73;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/ActorContext.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/ActorContext.java index c989b275df..8ba333d279 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/ActorContext.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/ActorContext.java @@ -13,8 +13,8 @@ import akka.actor.ActorRef; import akka.actor.ActorSelection; import akka.actor.ActorSystem; import akka.actor.PoisonPill; +import akka.pattern.Patterns; import akka.util.Timeout; - import org.opendaylight.controller.cluster.datastore.ClusterWrapper; import org.opendaylight.controller.cluster.datastore.Configuration; import org.opendaylight.controller.cluster.datastore.exceptions.PrimaryNotFoundException; @@ -27,7 +27,6 @@ import org.opendaylight.controller.cluster.datastore.messages.UpdateSchemaContex import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import scala.concurrent.Await; import scala.concurrent.Future; import scala.concurrent.duration.Duration; @@ -126,8 +125,9 @@ public class ActorContext { if (result instanceof LocalShardFound) { LocalShardFound found = (LocalShardFound) result; - LOG.debug("Local shard found {}", found.getPath()); - + if(LOG.isDebugEnabled()) { + LOG.debug("Local shard found {}", found.getPath()); + } return found.getPath(); } @@ -142,8 +142,9 @@ public class ActorContext { if (result.getClass().equals(PrimaryFound.SERIALIZABLE_CLASS)) { PrimaryFound found = PrimaryFound.fromSerializable(result); - LOG.debug("Primary found {}", found.getPrimaryPath()); - + if(LOG.isDebugEnabled()) { + LOG.debug("Primary found {}", found.getPrimaryPath()); + } return found.getPrimaryPath(); } throw new PrimaryNotFoundException("Could not find primary for shardName " + shardName); @@ -176,9 +177,10 @@ public class ActorContext { */ public Object executeRemoteOperation(ActorSelection actor, Object message) { - LOG.debug("Sending remote message {} to {}", message.getClass().toString(), - actor.toString()); - + if(LOG.isDebugEnabled()) { + LOG.debug("Sending remote message {} to {}", message.getClass().toString(), + actor.toString()); + } Future future = ask(actor, message, operationTimeout); try { @@ -198,8 +200,9 @@ public class ActorContext { */ public Future executeRemoteOperationAsync(ActorSelection actor, Object message) { - LOG.debug("Sending remote message {} to {}", message.getClass().toString(), actor.toString()); - + if(LOG.isDebugEnabled()) { + LOG.debug("Sending remote message {} to {}", message.getClass().toString(), actor.toString()); + } return ask(actor, message, operationTimeout); } @@ -266,6 +269,30 @@ public class ActorContext { } + /** + * Execute an operation on the the local shard only asynchronously + * + *

+ * This method first finds the address of the local shard if any. It then + * executes the operation on it. + *

+ * + * @param shardName the name of the shard on which the operation needs to be executed + * @param message the message that needs to be sent to the shard + * @param timeout the amount of time that this method should wait for a response before timing out + * @return null if the shard could not be located else a future on which the caller can wait + * + */ + public Future executeLocalShardOperationAsync(String shardName, Object message, Timeout timeout) { + ActorRef local = findLocalShard(shardName); + if(local == null){ + return null; + } + return Patterns.ask(local, message, timeout); + } + + + public void shutdown() { shardManager.tell(PoisonPill.getInstance(), null); actorSystem.shutdown();