From a1a6144b0fc5baa9b99fe314a43363f6c6a5e283 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 8 Apr 2020 15:01:59 +0200 Subject: [PATCH] Fix logic ensuring parent presence When we are asked to create intermediate nodes for a path, whose parent is the conceptual root (i.e. its parent is empty), we should not attempt to merge it, as it just does not make sense. JIRA: MDSAL-534 Change-Id: Ia5f6ef2857903d8e88030f4c1f3867b8ed8f5a0e Signed-off-by: Robert Varga (cherry picked from commit ed271c6322092bccf8ff9500b1bbb0fb62683419) --- .../adapter/BindingDOMWriteTransactionAdapter.java | 2 +- .../dom/adapter/test/WriteTransactionTest.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMWriteTransactionAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMWriteTransactionAdapter.java index 121ad0381a..f7f079b5c2 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMWriteTransactionAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMWriteTransactionAdapter.java @@ -86,7 +86,7 @@ class BindingDOMWriteTransactionAdapter e private void ensureParentsByMerge(final LogicalDatastoreType store, final YangInstanceIdentifier domPath, final InstanceIdentifier path) { final YangInstanceIdentifier parentPath = domPath.getParent(); - if (parentPath != null) { + if (parentPath != null && !parentPath.isEmpty()) { final NormalizedNode parentNode = getCodec().instanceIdentifierToNode(parentPath); getDelegate().merge(store, YangInstanceIdentifier.create(parentNode.getIdentifier()), parentNode); } diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/WriteTransactionTest.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/WriteTransactionTest.java index d742d325be..55f26a098e 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/WriteTransactionTest.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/WriteTransactionTest.java @@ -49,6 +49,13 @@ public class WriteTransactionTest extends AbstractDataBrokerTest { assertTrue("List node must exists after commit",listNode.isPresent()); } + @Test + public void testPutCreateParentsSuperfluous() throws InterruptedException, ExecutionException { + final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); + writeTx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, TOP_PATH, new TopBuilder().build()); + writeTx.commit().get(); + } + @Test public void testMergeCreateParentsSuccess() throws InterruptedException, ExecutionException { final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); @@ -61,4 +68,11 @@ public class WriteTransactionTest extends AbstractDataBrokerTest { final Optional listNode = readTx.read(LogicalDatastoreType.OPERATIONAL, NODE_PATH).get(); assertTrue("List node must exists after commit",listNode.isPresent()); } + + @Test + public void testMergeCreateParentsSuperfluous() throws InterruptedException, ExecutionException { + final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); + writeTx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, TOP_PATH, new TopBuilder().build()); + writeTx.commit().get(); + } } -- 2.36.6