From: Robert Varga Date: Tue, 20 Sep 2016 00:41:13 +0000 (+0200) Subject: Speed up InmemoryDOMDataTreeShardWriteTransaction's operations X-Git-Tag: release/boron-sr1~22 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=mdsal.git;a=commitdiff_plain;h=41c7b41f761ff4c150a9e55455e8598e420ac984 Speed up InmemoryDOMDataTreeShardWriteTransaction's operations SimpleOperation's apply() method can be updated to invoke hasNext() only once for each iteration. Change-Id: Id94f01428dd1c8b55b883371c9830d6d7209727a Signed-off-by: Robert Varga (cherry picked from commit ab0f754780a5960525f13a06797eea0e347a4a57) --- diff --git a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransaction.java b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransaction.java index d3265fdab3..e0dbe985a7 100644 --- a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransaction.java +++ b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransaction.java @@ -63,16 +63,20 @@ class InmemoryDOMDataTreeShardWriteTransaction implements DOMDataTreeShardWriteT final NormalizedNode data) { int enterCount = 0; final Iterator 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 submit = executor.submit(new ShardSubmitCoordinationTask( - modification.getPrefix(), cohorts, this)); - - return submit; + return executor.submit(new ShardSubmitCoordinationTask(modification.getPrefix(), cohorts, this)); } @Override public ListenableFuture validate() { LOG.debug("CanCommit on open transaction on shard {}", modification.getPrefix()); - - final ListenableFuture submit = executor.submit(new ShardCanCommitCoordinationTask( - modification.getPrefix(), cohorts)); - return submit; + return executor.submit(new ShardCanCommitCoordinationTask(modification.getPrefix(), cohorts)); } @Override public ListenableFuture prepare() { LOG.debug("PreCommit on open transaction on shard {}", modification.getPrefix()); - - final ListenableFuture submit = executor.submit(new ShardPreCommitCoordinationTask( - modification.getPrefix(), cohorts)); - return submit; + return executor.submit(new ShardPreCommitCoordinationTask(modification.getPrefix(), cohorts)); } @Override public ListenableFuture commit() { LOG.debug("Commit open transaction on shard {}", modification.getPrefix()); - - final ListenableFuture submit = executor.submit(new ShardCommitCoordinationTask( - modification.getPrefix(), cohorts, this)); - return submit; + return executor.submit(new ShardCommitCoordinationTask(modification.getPrefix(), cohorts, this)); } DataTreeModification getRootModification() {