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;
@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) {