[MDSAL-241] Calling input-less RPCs with BindingAware implementation fails Created: 16/Mar/17  Updated: 09/Mar/18  Resolved: 31/Mar/17

Status: Resolved
Project: mdsal
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug
Reporter: Vratko Polak Assignee: Martin Ciglan
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


External issue ID: 8004

 Description   

This is a consequence of YANGTOOLS-663 not being fixed enough. This describes a specific symptom, but there might be bigger issues to fix.

The symptom is status 500 visible in CSIT [0], NullPointerException stacktrace below.

The issue is with binding aware RPC implementations. If the Yang model contains no input statement, the implemented method has no arguments. If the Yang model contains empty input statement, the implemented method has one argument of corresponding generated type. But this [1] line now probably gets non-null input, so the deserialize call fails.

As Carbon release is near, a quick workaround could by to catch the NPE and retry deserialization with no argument. Proper fix would define which components should behave differently based on input statement presence, and which components should not be sensitive to the presence.

Segment of karaf.log with the stacktrace:

2017-03-16 08:13:49,895 | ERROR | qtp950741364-413 | ContainerResponse | 95 - com.sun.jersey.jersey-server - 1.17.0 | The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java.lang.NullPointerException
at org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy.loadClass(GeneratedClassLoadingStrategy.java:27)
at Proxybcf3a48a_8d17_407f_ac2a_eb1acc94673c.loadClass(Unknown Source)
at org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext.getClassForSchema(BindingRuntimeContext.java:375)
at org.opendaylight.yangtools.binding.data.codec.impl.SchemaRootCodecContext$5.load(SchemaRootCodecContext.java:90)
at org.opendaylight.yangtools.binding.data.codec.impl.SchemaRootCodecContext$5.load(SchemaRootCodecContext.java:84)
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527)
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319)
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282)
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824)
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830)
at org.opendaylight.yangtools.binding.data.codec.impl.SchemaRootCodecContext.getOrRethrow(SchemaRootCodecContext.java:242)
at org.opendaylight.yangtools.binding.data.codec.impl.SchemaRootCodecContext.getRpc(SchemaRootCodecContext.java:169)
at org.opendaylight.yangtools.binding.data.codec.impl.BindingCodecContext.getRpcDataContext(BindingCodecContext.java:217)
at org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry.fromNormalizedNodeRpcData(BindingNormalizedNodeCodecRegistry.java:203)
at org.opendaylight.controller.md.sal.binding.impl.BindingDOMRpcImplementationAdapter.deserilialize(BindingDOMRpcImplementationAdapter.java:81)
at org.opendaylight.controller.md.sal.binding.impl.BindingDOMRpcImplementationAdapter.invokeRpc(BindingDOMRpcImplementationAdapter.java:71)
at org.opendaylight.controller.md.sal.dom.broker.impl.GlobalDOMRpcRoutingTableEntry.invokeRpc(GlobalDOMRpcRoutingTableEntry.java:39)
at org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRoutingTable.invokeRpc(DOMRpcRoutingTable.java:177)
at org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRouter.invokeRpc(DOMRpcRouter.java:102)
at Proxyda8865b7_7c03_49a8_9a37_c706952a3ea5.invokeRpc(Unknown Source)
at org.opendaylight.netconf.sal.restconf.impl.BrokerFacade.invokeRpc(BrokerFacade.java:497)[287:org.opendaylight.netconf.sal-rest-connector:1.5.0.SNAPSHOT]
at org.opendaylight.netconf.sal.restconf.impl.RestconfImpl.invokeRpc(RestconfImpl.java:467)[287:org.opendaylight.netconf.sal-rest-connector:1.5.0.SNAPSHOT]
at org.opendaylight.netconf.sal.restconf.impl.StatisticsRestconfServiceWrapper.invokeRpc(StatisticsRestconfServiceWrapper.java:83)[287:org.opendaylight.netconf.sal-rest-connector:1.5.0.SNAPSHOT]
at org.opendaylight.netconf.sal.rest.impl.RestconfCompositeWrapper.invokeRpc(RestconfCompositeWrapper.java:64)[287:org.opendaylight.netconf.sal-rest-connector:1.5.0.SNAPSHOT]
at sun.reflect.GeneratedMethodAccessor104.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_121]
at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_121]
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)[95:com.sun.jersey.jersey-server:1.17.0]
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)[95:com.sun.jersey.jersey-server:1.17.0]
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)[95:com.sun.jersey.jersey-server:1.17.0]
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)[95:com.sun.jersey.jersey-server:1.17.0]
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)[95:com.sun.jersey.jersey-server:1.17.0]
at com.sun.jersey.server.impl.uri.rules.ResourceObjectRule.accept(ResourceObjectRule.java:100)[95:com.sun.jersey.jersey-server:1.17.0]
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)[95:com.sun.jersey.jersey-server:1.17.0]
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)[95:com.sun.jersey.jersey-server:1.17.0]
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)[95:com.sun.jersey.jersey-server:1.17.0]
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442)[95:com.sun.jersey.jersey-server:1.17.0]
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)[95:com.sun.jersey.jersey-server:1.17.0]
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)[95:com.sun.jersey.jersey-server:1.17.0]
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)[254:com.sun.jersey.servlet:1.17.0]
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)[254:com.sun.jersey.servlet:1.17.0]
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)[254:com.sun.jersey.servlet:1.17.0]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)[66:org.apache.geronimo.specs.geronimo-servlet_3.0_spec:1.0.0]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1507)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:247)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:210)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1478)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:82)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:256)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1478)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.opendaylight.aaa.filterchain.filters.CustomFilterAdapter.doFilter(CustomFilterAdapter.java:85)[270:org.opendaylight.aaa.filterchain:0.5.0.SNAPSHOT]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1478)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)[266:org.apache.shiro.web:1.3.2]
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)[266:org.apache.shiro.web:1.3.2]
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)[266:org.apache.shiro.web:1.3.2]
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)[266:org.apache.shiro.web:1.3.2]
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)[266:org.apache.shiro.web:1.3.2]
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)[266:org.apache.shiro.web:1.3.2]
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)[266:org.apache.shiro.web:1.3.2]
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)[266:org.apache.shiro.web:1.3.2]
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)[266:org.apache.shiro.web:1.3.2]
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)[266:org.apache.shiro.web:1.3.2]
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)[266:org.apache.shiro.web:1.3.2]
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)[265:org.apache.shiro.core:1.3.2]
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)[265:org.apache.shiro.core:1.3.2]
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)[265:org.apache.shiro.core:1.3.2]
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)[266:org.apache.shiro.web:1.3.2]
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)[266:org.apache.shiro.web:1.3.2]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1478)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:69)[80:org.ops4j.pax.web.pax-web-jetty:3.2.9]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:240)[80:org.ops4j.pax.web.pax-web-jetty:3.2.9]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:427)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:75)[80:org.ops4j.pax.web.pax-web-jetty:3.2.9]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.server.Server.handle(Server.java:370)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:984)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1045)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:861)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:236)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)[71:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at java.lang.Thread.run(Thread.java:745)[:1.8.0_121]

[0] https://logs.opendaylight.org/releng/jenkins092/controller-csit-3node-clustering-only-carbon/610/archives/log.html.gz#s1-s13-t3-k2-k2-k1-k3-k7-k1
[1] https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blob;f=opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcImplementationAdapter.java;h=a7989ae6ed460813da31004cc830f905d5f7c96d;hb=refs/heads/master#l71



 Comments   
Comment by Robert Varga [ 27/Mar/17 ]

master: https://git.opendaylight.org/gerrit/53911

Comment by Martin Ciglan [ 31/Mar/17 ]

boron cherry-pick:

https://git.opendaylight.org/gerrit/#/c/54136/

Generated at Wed Feb 07 20:09:11 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.