Perform delegate cursor enter/exit first 62/46362/1
authorRobert Varga <rovarga@cisco.com>
Tue, 20 Sep 2016 14:01:08 +0000 (16:01 +0200)
committerRobert Varga <rovarga@cisco.com>
Mon, 3 Oct 2016 11:36:24 +0000 (13:36 +0200)
Delegate may fail to perform the operation, which would leave
our stack inconsistent, leading to confusion if the user ignores
exceptions. Perform enter/exit on delegate first and only if it
succeeds proceed to update our stack.

Change-Id: If6ebfd9b530e9052a5dc8cab120a5d0c8317f937
Signed-off-by: Robert Varga <rovarga@cisco.com>
(cherry picked from commit 10787df610669aa4bb22f7f8feae1dc1455dffb8)

dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java

index bbe26b0549c016d7c49c3557ccf1231b0c35d268..fe938d87685ed8941746778d50bd7040b13ccedb 100644 (file)
@@ -181,8 +181,8 @@ final class ShardedDOMDataTreeWriteTransaction implements DOMDataTreeCursorAware
         @Override
         public void enter(@Nonnull final PathArgument child) {
             checkAvailable(child);
-            path.push(child);
             delegate.enter(child);
+            path.push(child);
         }
 
         @Override
@@ -201,16 +201,16 @@ final class ShardedDOMDataTreeWriteTransaction implements DOMDataTreeCursorAware
 
         @Override
         public void exit() {
-            path.pop();
             delegate.exit();
+            path.pop();
         }
 
         @Override
         public void exit(final int depth) {
+            delegate.exit(depth);
             for (int i = 0; i < depth; i++) {
                 path.pop();
             }
-            delegate.exit(depth);
         }
 
         @Override