Bump odlparent to 6.0.0
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / entityownership / DistributedEntityOwnershipService.java
index c2e4aab5a428423865a02acc50afa10287bd0753..ca9ef6338d2b769a7e9d6d57f2a7143ca4699ecb 100644 (file)
@@ -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) {