Speed up InmemoryDOMDataTreeShardWriteTransaction's operations 56/46356/1
authorRobert Varga <rovarga@cisco.com>
Tue, 20 Sep 2016 00:41:13 +0000 (02:41 +0200)
committerRobert Varga <rovarga@cisco.com>
Mon, 3 Oct 2016 11:35:53 +0000 (13:35 +0200)
SimpleOperation's apply() method can be updated to invoke hasNext()
only once for each iteration.

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

dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransaction.java

index d3265fdab3716d05d95bad6f62e43c51ca547459..e0dbe985a76902c81745ee0eae92fba7a5f49109 100644 (file)
@@ -63,16 +63,20 @@ class InmemoryDOMDataTreeShardWriteTransaction implements DOMDataTreeShardWriteT
                 final NormalizedNode<?, ?> data) {
             int enterCount = 0;
             final Iterator<PathArgument> it = path.getPathArguments().iterator();
-            while (it.hasNext()) {
-                final PathArgument currentArg = it.next();
-                if (it.hasNext()) {
+            if (it.hasNext()) {
+                while (true) {
+                    final PathArgument currentArg = it.next();
+                    if (!it.hasNext()) {
+                        applyOnLeaf(cursor, currentArg, data);
+                        break;
+                    }
+
                     // We need to enter one level deeper, we are not at leaf (modified) node
                     cursor.enter(currentArg);
                     enterCount++;
-                } else {
-                    applyOnLeaf(cursor, currentArg, data);
                 }
             }
+
             cursor.exit(enterCount);
         }
     }
@@ -194,37 +198,25 @@ class InmemoryDOMDataTreeShardWriteTransaction implements DOMDataTreeShardWriteT
         Preconditions.checkNotNull(cohorts);
         Preconditions.checkState(!cohorts.isEmpty(), "Transaction was not readied yet.");
 
-        final ListenableFuture<Void> submit = executor.submit(new ShardSubmitCoordinationTask(
-                modification.getPrefix(), cohorts, this));
-
-        return submit;
+        return executor.submit(new ShardSubmitCoordinationTask(modification.getPrefix(), cohorts, this));
     }
 
     @Override
     public ListenableFuture<Boolean> validate() {
         LOG.debug("CanCommit on open transaction on shard {}", modification.getPrefix());
-
-        final ListenableFuture<Boolean> submit = executor.submit(new ShardCanCommitCoordinationTask(
-                modification.getPrefix(), cohorts));
-        return submit;
+        return executor.submit(new ShardCanCommitCoordinationTask(modification.getPrefix(), cohorts));
     }
 
     @Override
     public ListenableFuture<Void> prepare() {
         LOG.debug("PreCommit on open transaction on shard {}", modification.getPrefix());
-
-        final ListenableFuture<Void> submit = executor.submit(new ShardPreCommitCoordinationTask(
-                modification.getPrefix(), cohorts));
-        return submit;
+        return executor.submit(new ShardPreCommitCoordinationTask(modification.getPrefix(), cohorts));
     }
 
     @Override
     public ListenableFuture<Void> commit() {
         LOG.debug("Commit open transaction on shard {}", modification.getPrefix());
-
-        final ListenableFuture<Void> submit = executor.submit(new ShardCommitCoordinationTask(
-                modification.getPrefix(), cohorts, this));
-        return submit;
+        return executor.submit(new ShardCommitCoordinationTask(modification.getPrefix(), cohorts, this));
     }
 
     DataTreeModification getRootModification() {