From: Robert Varga Date: Thu, 28 May 2015 11:20:30 +0000 (+0200) Subject: Improve BindingDOMRpcImplementationAdapter performance X-Git-Tag: release/beryllium~493 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=2f6b919c0f3c1d5cc4aa9b9fd41458716835df81;hp=5f55609cfda935a269e29e5bcdd477e11191d5c4;p=controller.git Improve BindingDOMRpcImplementationAdapter performance BindingReflections return a non-shared QNameModule instance, which means that we may end up using suboptimal lookups when comparing QNames. Furthermore it is not the QNameModule which we need in the fastpath, but rather QName of the input statement, hence create a cached reference of that -- leading to minimal object allocation in the fast path. Change-Id: I97ceb43d80c50d53d21cc66a31bfaae6ff0193e9 Signed-off-by: Robert Varga (cherry picked from commit c4ee9b293370b81b76cc0e06accf3cde31ac1722) --- diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcImplementationAdapter.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcImplementationAdapter.java index 2023840e97..175b0f3f63 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcImplementationAdapter.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcImplementationAdapter.java @@ -29,7 +29,6 @@ import org.opendaylight.yangtools.yang.binding.RpcService; import org.opendaylight.yangtools.yang.binding.util.BindingReflections; import org.opendaylight.yangtools.yang.binding.util.RpcServiceInvoker; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -42,7 +41,7 @@ public class BindingDOMRpcImplementationAdapter implements DOMRpcImplementation private final BindingNormalizedNodeCodecRegistry codec; private final RpcServiceInvoker invoker; private final RpcService delegate; - private final QNameModule module; + private final QName inputQname; public BindingDOMRpcImplementationAdapter(final BindingNormalizedNodeCodecRegistry codec, final Class type, final Map localNameToMethod, final T delegate) { try { @@ -63,11 +62,7 @@ public class BindingDOMRpcImplementationAdapter implements DOMRpcImplementation this.codec = Preconditions.checkNotNull(codec); this.delegate = Preconditions.checkNotNull(delegate); - module = BindingReflections.getQNameModule(type); - } - - public QNameModule getQNameModule() { - return module; + inputQname = QName.cachedReference(QName.create(BindingReflections.getQNameModule(type), "input")); } @Override @@ -82,11 +77,10 @@ public class BindingDOMRpcImplementationAdapter implements DOMRpcImplementation if (input instanceof LazySerializedContainerNode) { return ((LazySerializedContainerNode) input).bindingData(); } - final SchemaPath inputSchemaPath = rpcPath.createChild(QName.create(module,"input")); + final SchemaPath inputSchemaPath = rpcPath.createChild(inputQname); return codec.fromNormalizedNodeRpcData(inputSchemaPath, (ContainerNode) input); } - private ListenableFuture> invoke(final SchemaPath schemaPath, final DataObject input) { return JdkFutureAdapters.listenInPoolThread(invoker.invokeRpc(delegate, schemaPath.getLastComponent(), input)); }