X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fentityownership%2FDistributedEntityOwnershipService.java;h=ca9ef6338d2b769a7e9d6d57f2a7143ca4699ecb;hp=c2e4aab5a428423865a02acc50afa10287bd0753;hb=refs%2Fchanges%2F02%2F83802%2F42;hpb=afe114674227071a2598dd3a3f6589a99573e075 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java index c2e4aab5a4..ca9ef6338d 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java @@ -24,6 +24,7 @@ import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import org.opendaylight.controller.cluster.access.concepts.MemberName; import org.opendaylight.controller.cluster.datastore.config.Configuration; import org.opendaylight.controller.cluster.datastore.config.ModuleShardConfiguration; @@ -218,21 +219,28 @@ public class DistributedEntityOwnershipService implements DOMEntityOwnershipServ @SuppressWarnings("checkstyle:IllegalCatch") @SuppressFBWarnings(value = "REC_CATCH_EXCEPTION", justification = "Akka's Await.result() API contract") DataTree getLocalEntityOwnershipShardDataTree() { - if (localEntityOwnershipShardDataTree == null) { - try { - if (localEntityOwnershipShard == null) { - localEntityOwnershipShard = Await.result(context.findLocalShardAsync( - ENTITY_OWNERSHIP_SHARD_NAME), Duration.Inf()); - } + final DataTree local = localEntityOwnershipShardDataTree; + if (local != null) { + return local; + } - localEntityOwnershipShardDataTree = (DataTree) Await.result(Patterns.ask(localEntityOwnershipShard, - GetShardDataTree.INSTANCE, MESSAGE_TIMEOUT), Duration.Inf()); - } catch (Exception e) { + if (localEntityOwnershipShard == null) { + try { + localEntityOwnershipShard = Await.result(context.findLocalShardAsync( + ENTITY_OWNERSHIP_SHARD_NAME), Duration.Inf()); + } catch (TimeoutException | InterruptedException e) { LOG.error("Failed to find local {} shard", ENTITY_OWNERSHIP_SHARD_NAME, e); + return null; } } - return localEntityOwnershipShardDataTree; + try { + return localEntityOwnershipShardDataTree = (DataTree) Await.result(Patterns.ask(localEntityOwnershipShard, + GetShardDataTree.INSTANCE, MESSAGE_TIMEOUT), Duration.Inf()); + } catch (TimeoutException | InterruptedException e) { + LOG.error("Failed to find local {} shard", ENTITY_OWNERSHIP_SHARD_NAME, e); + return null; + } } void unregisterListener(final String entityType, final DOMEntityOwnershipListener listener) {