From: Robert Varga Date: Tue, 20 Sep 2016 15:39:19 +0000 (+0200) Subject: Add cursor lookup fast-path X-Git-Tag: release/boron-sr1~7 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=mdsal.git;a=commitdiff_plain;h=7723a349513ae47974fa014586e887cc731f69ce Add cursor lookup fast-path Users will typically select one of the subtrees to create cursor on, hence add a fast path which will perform a simple lookup. Change-Id: Ied0710a765edf8cdd4ebd7f2712f310f82f35b1a Signed-off-by: Robert Varga (cherry picked from commit 2ff021b039e02cfc74661383a2a204992b4ef200) --- diff --git a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java index 53feef2dc4..90060597f9 100644 --- a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java +++ b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeWriteTransaction.java @@ -68,10 +68,14 @@ final class ShardedDOMDataTreeWriteTransaction implements DOMDataTreeCursorAware } private DOMDataTreeShardWriteTransaction lookup(final DOMDataTreeIdentifier prefix) { + final DOMDataTreeShardWriteTransaction fast = transactions.get(prefix); + if (fast != null) { + return fast; + } + + LOG.debug("Prefix {} not found in available subtrees {}, fallback to slow path", prefix, transactions.keySet()); for (final Entry e : transactions.entrySet()) { if (e.getKey().contains(prefix)) { - Preconditions.checkArgument(!producer.isDelegatedToChild(prefix), - "Path %s is delegated to child producer.", prefix); return e.getValue(); } } @@ -107,6 +111,8 @@ final class ShardedDOMDataTreeWriteTransaction implements DOMDataTreeCursorAware public synchronized DOMDataTreeWriteCursor createCursor(final DOMDataTreeIdentifier prefix) { Preconditions.checkState(!closed, "Transaction is closed already"); Preconditions.checkState(openCursor == null, "There is still a cursor open"); + Preconditions.checkArgument(!producer.isDelegatedToChild(prefix), "Path %s is delegated to child producer.", + prefix); final DOMDataTreeShardWriteTransaction lookup = lookup(prefix); Preconditions.checkArgument(lookup != null, "Path %s is not accessible from transaction %s", prefix, this); 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 e0dbe985a7..a476069a58 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 @@ -232,8 +232,8 @@ class InmemoryDOMDataTreeShardWriteTransaction implements DOMDataTreeShardWriteT public DOMDataTreeWriteCursor createCursor(final DOMDataTreeIdentifier prefix) { Preconditions.checkState(!finished, "Transaction is finished/closed already."); Preconditions.checkState(cursor == null, "Previous cursor wasn't closed"); - final DOMDataTreeWriteCursor ret = getCursor(); final YangInstanceIdentifier relativePath = toRelative(prefix.getRootIdentifier()); + final DOMDataTreeWriteCursor ret = getCursor(); ret.enter(relativePath.getPathArguments()); return ret; }