NormalizedNodeAggregator should also report empty 53/100453/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 7 Apr 2022 20:23:33 +0000 (22:23 +0200)
committerRobert Varga <nite@hq.sk>
Fri, 8 Apr 2022 02:33:36 +0000 (02:33 +0000)
DataTree root is always present as of now, which means that even if we
pretend there is no result, the result of aggregation is non-empty.

Fix NormalizedNodeAggregator to check whether there was any operation
applied before running actual transaction.

JIRA: CONTROLLER-2038
Change-Id: Ie7e4625ad2377483d0623d96234bcc77fbba033d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 1d5ca4009be6c61d7b61989799037ad8f1ab7a75)

opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregator.java

index a78e36c811e93dc6e9f76352686170a0ed7fc8a3..e2096f9354b36e191049f3f542a00a200e452301 100644 (file)
@@ -46,26 +46,26 @@ public final class NormalizedNodeAggregator {
     }
 
     private Optional<NormalizedNode> aggregate() throws DataValidationFailedException {
-        return combine().getRootNode();
-    }
-
-    private NormalizedNodeAggregator combine() throws DataValidationFailedException {
         final DataTreeModification mod = dataTree.takeSnapshot().newModification();
+        boolean nodePresent = false;
 
         for (final Optional<NormalizedNode> node : nodes) {
             if (node.isPresent()) {
-                mod.merge(rootIdentifier, node.get());
+                mod.merge(rootIdentifier, node.orElseThrow());
+                nodePresent = true;
             }
         }
+
+        if (!nodePresent) {
+            return Optional.empty();
+        }
+
+
         mod.ready();
         dataTree.validate(mod);
         final DataTreeCandidate candidate = dataTree.prepare(mod);
         dataTree.commit(candidate);
 
-        return this;
-    }
-
-    private Optional<NormalizedNode> getRootNode() {
         return dataTree.takeSnapshot().readNode(rootIdentifier);
     }
 }