Bug 8336 - Fix NPE in DistributedShardedDOMDataTree's ProxyProducer
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / sharding / DistributedShardedDOMDataTree.java
index 424439f6e58bbc62e28e914514b6f23516771f1f..564fb978bee42cc41c4f87c2fa8f03a94fb0c57d 100644 (file)
@@ -464,8 +464,9 @@ public class DistributedShardedDOMDataTree implements DOMDataTreeService, DOMDat
 
     DOMDataTreePrefixTableEntry<DOMDataTreeShardRegistration<DOMDataTreeShard>> lookupShardFrontend(
             final DOMDataTreeIdentifier prefix) {
-        return shards.lookup(prefix);
-
+        synchronized (shards) {
+            return shards.lookup(prefix);
+        }
     }
 
     DOMDataTreeProducer localCreateProducer(final Collection<DOMDataTreeIdentifier> prefix) {
@@ -675,7 +676,7 @@ public class DistributedShardedDOMDataTree implements DOMDataTreeService, DOMDat
 
             final Object o = actorContext.executeOperation(shardDataTreeActor, new ProducerRemoved(subtrees));
             if (o instanceof DOMDataTreeProducerException) {
-                throw ((DOMDataTreeProducerException) o);
+                throw (DOMDataTreeProducerException) o;
             } else if (o instanceof Throwable) {
                 throw new DOMDataTreeProducerException("Unable to close producer", (Throwable) o);
             }
@@ -701,7 +702,8 @@ public class DistributedShardedDOMDataTree implements DOMDataTreeService, DOMDat
                 // producer attached to some subtree at a time. And also how we can close ShardAccess
                 // then
                 final CDSShardAccessImpl shardAccess = new CDSShardAccessImpl(subtree, actorContext);
-                return shardAccessMap.put(subtree, shardAccess);
+                shardAccessMap.put(subtree, shardAccess);
+                return shardAccess;
             }
         }
     }