Restconf DELETE on non existing netconf device data results in HTTP 500 - internal server error instead of 409. The problem appeared in Silicon release and I believe was introduced in https://git.opendaylight.org/gerrit/c/netconf/+/92446 by ditching the DeleteDataTransactionUtil.checkItemExists in DeleteDataTransactionUtil.deleteData.
For example:
1. We have data some data on ../yang-ext:mount/network-topology:network-topology
2. DELETE ../yang-ext:mount/network-topology:network-topology , works fine, data is deleted and Http 204 is returned.
3. DELETE ../yang-ext:mount/network-topology:network-topology , returns Http 500, instead of 409 as it did in previous releases and as I believe is stated in restconf spec.
I also observed the same thing happening when manipulating(POST/PUT) data to netconf device that is not valid according to schema, I think the problem is this problematic-check which in these cases is never true so this exception is returned and since that exception did not map the DocumentedException.ErrorTag it later results in error code 500.
Steps to reproduce:
download silicon release
- ./karaf clean
- feature:install odl-netconf-topology odl-restconf-nb-rfc8040
- start netconf-testtool with md-sal :
- create folder schemaToaster with yang model
- java -jar netconf-testtool-1.13.2-SNAPSHOT-executable.jar --schemas-dir schemaToaster --md-sal true
- add testtool to topology-netconf:
- restconf PUT on http://127.0.0.1:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=testtool with payload:
{ "netconf-topology:node" :[ { "node-id": "testtool", "host": "127.0.0.1", "port": 17830, "username": "admin", "password": "admin", "tcp-only": false, "keepalive-delay": 0, "netconf-node-configuration:schemaless": false } ] }
- when device is connected execute restconf DELETE on toaster:toaster via mount point of the device:
DELETE http://127.0.0.1:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=ru-device/yang-ext:mount/toaster:toaster - You should get Http error code 500 internal-server-error and message :
{ "errors": { "error": [ { "error-type": "application", "error-tag": "operation-failed", "error-info": "NetconfDocumentedException{message=RPC during tx failed. Data is missing, cannot execute DELETE operation , errorType=PROTOCOL, errorTag=DATA_MISSING, errorSeverity=ERROR, errorInfo={}}", "error-message": "Transaction failed" } ] } }
which is wrong and should be 409.
Logs from karaf:
12:25:26.435 INFO [remote-connector-processing-executor-13] RemoteDevice {testtool}: Netconf connector initialized successfully 12:25:46.191 WARN [nioEventLoopGroupCloseable-3-8] RemoteDevice{testtool} : Error reply from remote device, request: <rpc message-id="m-1" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <edit-config> <target> <candidate/> </target> <config> <toaster xmlns="http://netconfcentral.org/ns/toaster" xmlns:op="urn:ietf:params:xml:ns:netconf:base:1.0" op:operation="delete"/> </config> </edit-config> </rpc> , response: <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1"> <rpc-error> <error-type>protocol</error-type> <error-tag>data-missing</error-tag> <error-severity>error</error-severity> <error-message>Data is missing, cannot execute DELETE operation</error-message> </rpc-error> </rpc-reply> org.opendaylight.netconf.api.NetconfDocumentedException: Data is missing, cannot execute DELETE operation at org.opendaylight.netconf.api.NetconfDocumentedException.fromXMLDocument(NetconfDocumentedException.java:53) ~[bundleFile:?] at org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.checkSuccessReply(NetconfMessageTransformUtil.java:311) ~[bundleFile:?] at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.processMessage(NetconfDeviceCommunicator.java:326) [bundleFile:?] at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.onMessage(NetconfDeviceCommunicator.java:269) [bundleFile:?] at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.onMessage(NetconfDeviceCommunicator.java:48) [bundleFile:?] at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:64) [bundleFile:?] at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.channelRead0(AbstractNetconfSession.java:187) [bundleFile:?] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) [bundleFile:4.1.59.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [bundleFile:4.1.59.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [bundleFile:4.1.59.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [bundleFile:4.1.59.Final] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) [bundleFile:4.1.59.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) [bundleFile:4.1.59.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [bundleFile:4.1.59.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [bundleFile:4.1.59.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [bundleFile:4.1.59.Final] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) [bundleFile:4.1.59.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) [bundleFile:4.1.59.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [bundleFile:4.1.59.Final] at io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:61) [bundleFile:4.1.59.Final] at io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:370) [bundleFile:4.1.59.Final] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) [bundleFile:4.1.59.Final] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) [bundleFile:4.1.59.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) [bundleFile:4.1.59.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [bundleFile:4.1.59.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [bundleFile:4.1.59.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [bundleFile:4.1.59.Final] at java.lang.Thread.run(Thread.java:829) [?:?] 12:25:46.192 WARN [nioEventLoopGroupCloseable-3-8] RemoteDevice {testtool} : Edit candidate invoked unsuccessfully: [RpcError [message=Data is missing, cannot execute DELETE operation, severity=ERROR, errorType=PROTOCOL, tag=data-missing, applicationTag=null, info=, cause=null]] 12:25:46.216 WARN [qtp1554864162-673] Transaction(DELETE) FAILED! java.util.concurrent.ExecutionException: NetconfDocumentedException{message=RPC during tx failed. Data is missing, cannot execute DELETE operation , errorType=PROTOCOL, errorTag=DATA_MISSING, errorSeverity=ERROR, errorInfo={}} at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:564) ~[bundleFile:?] at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:545) ~[bundleFile:?] at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:102) ~[bundleFile:?] at com.google.common.util.concurrent.ForwardingFluentFuture.get(ForwardingFluentFuture.java:65) ~[bundleFile:?] at org.opendaylight.restconf.nb.rfc8040.rests.utils.FutureCallbackTx.addCallback(FutureCallbackTx.java:82) ~[bundleFile:?] at org.opendaylight.restconf.nb.rfc8040.rests.utils.DeleteDataTransactionUtil.deleteData(DeleteDataTransactionUtil.java:53) ~[bundleFile:?] at org.opendaylight.restconf.nb.rfc8040.rests.services.impl.RestconfDataServiceImpl.deleteData(RestconfDataServiceImpl.java:367) ~[bundleFile:?] at org.opendaylight.restconf.nb.rfc8040.services.wrapper.ServicesWrapper.deleteData(ServicesWrapper.java:138) ~[bundleFile:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?] at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?] at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:76) ~[?:?] at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:148) ~[?:?] at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191) ~[?:?] at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:200) ~[?:?] at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103) ~[?:?] at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493) ~[?:?] at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:415) ~[?:?] at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:104) ~[?:?] at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:277) ~[?:?] at org.glassfish.jersey.internal.Errors$1.call(Errors.java:272) ~[?:?] at org.glassfish.jersey.internal.Errors$1.call(Errors.java:268) ~[?:?] at org.glassfish.jersey.internal.Errors.process(Errors.java:316) ~[?:?] at org.glassfish.jersey.internal.Errors.process(Errors.java:298) ~[?:?] at org.glassfish.jersey.internal.Errors.process(Errors.java:268) ~[?:?] at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289) ~[?:?] at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:256) ~[?:?] at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:703) ~[?:?] at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:416) ~[?:?] at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370) ~[?:?] at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389) ~[?:?] at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342) ~[?:?] at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229) ~[?:?] at org.eclipse.jetty.servlet.ServletHolder$NotAsyncServlet.service(ServletHolder.java:1402) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1651) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:319) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:273) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1638) ~[bundleFile:9.4.31.v20200723] at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) ~[?:?] at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) ~[?:?] at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) ~[?:?] at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[?:?] at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) ~[?:?] at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) ~[?:?] at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) ~[?:?] at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) ~[?:?] at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) ~[?:?] at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) ~[?:?] at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) ~[?:?] at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[?:?] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1638) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:226) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1638) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:567) ~[bundleFile:9.4.31.v20200723] at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) ~[bundleFile:?] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:602) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1377) ~[bundleFile:9.4.31.v20200723] at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:294) ~[bundleFile:?] at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:507) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[bundleFile:9.4.31.v20200723] at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:82) ~[bundleFile:?] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.Server.handle(Server.java:501) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383) ~[bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556) [bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375) [bundleFile:9.4.31.v20200723] at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273) [bundleFile:9.4.31.v20200723] at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [bundleFile:9.4.31.v20200723] at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [bundleFile:9.4.31.v20200723] at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [bundleFile:9.4.31.v20200723] at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) [bundleFile:9.4.31.v20200723] at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) [bundleFile:9.4.31.v20200723] at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) [bundleFile:9.4.31.v20200723] at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) [bundleFile:9.4.31.v20200723] at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375) [bundleFile:9.4.31.v20200723] at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806) [bundleFile:9.4.31.v20200723] at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938) [bundleFile:9.4.31.v20200723] at java.lang.Thread.run(Thread.java:829) [?:?] Caused by: org.opendaylight.netconf.api.NetconfDocumentedException: RPC during tx failed. Data is missing, cannot execute DELETE operation at org.opendaylight.restconf.nb.rfc8040.rests.transactions.NetconfRestconfTransaction.mapRpcErrorsToNetconfDocException(NetconfRestconfTransaction.java:289) ~[bundleFile:?] at org.opendaylight.restconf.nb.rfc8040.rests.transactions.NetconfRestconfTransaction$1.lambda$onSuccess$0(NetconfRestconfTransaction.java:134) ~[bundleFile:?] at com.google.common.util.concurrent.Futures$FutureCombiner$1.call(Futures.java:750) ~[bundleFile:?] at com.google.common.util.concurrent.Futures$FutureCombiner$1.call(Futures.java:747) ~[bundleFile:?] at com.google.common.util.concurrent.CombinedFuture$CallableInterruptibleTask.runInterruptibly(CombinedFuture.java:188) ~[bundleFile:?] at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69) ~[bundleFile:?] at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30) ~[bundleFile:?] at com.google.common.util.concurrent.CombinedFuture$CombinedFutureInterruptibleTask.execute(CombinedFuture.java:105) ~[bundleFile:?] at com.google.common.util.concurrent.CombinedFuture.handleAllCompleted(CombinedFuture.java:62) ~[bundleFile:?] at com.google.common.util.concurrent.AggregateFuture.processCompleted(AggregateFuture.java:282) ~[bundleFile:?] at com.google.common.util.concurrent.AggregateFuture.decrementCountAndMaybeComplete(AggregateFuture.java:264) ~[bundleFile:?] at com.google.common.util.concurrent.AggregateFuture.access$200(AggregateFuture.java:42) ~[bundleFile:?] at com.google.common.util.concurrent.AggregateFuture$2.run(AggregateFuture.java:176) ~[bundleFile:?] at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30) ~[bundleFile:?] at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1174) ~[bundleFile:?] at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:969) ~[bundleFile:?] at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:738) ~[bundleFile:?] at com.google.common.util.concurrent.CombinedFuture$CallableInterruptibleTask.setValue(CombinedFuture.java:193) ~[bundleFile:?] at com.google.common.util.concurrent.CombinedFuture$CombinedFutureInterruptibleTask.afterRanInterruptibly(CombinedFuture.java:137) ~[bundleFile:?] at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:133) ~[bundleFile:?] at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30) ~[bundleFile:?] at com.google.common.util.concurrent.CombinedFuture$CombinedFutureInterruptibleTask.execute(CombinedFuture.java:105) ~[bundleFile:?] at com.google.common.util.concurrent.CombinedFuture.handleAllCompleted(CombinedFuture.java:62) ~[bundleFile:?] at com.google.common.util.concurrent.AggregateFuture.processCompleted(AggregateFuture.java:282) ~[bundleFile:?] at com.google.common.util.concurrent.AggregateFuture.decrementCountAndMaybeComplete(AggregateFuture.java:264) ~[bundleFile:?] at com.google.common.util.concurrent.AggregateFuture.access$200(AggregateFuture.java:42) ~[bundleFile:?] at com.google.common.util.concurrent.AggregateFuture$2.run(AggregateFuture.java:176) ~[bundleFile:?] at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30) ~[bundleFile:?] at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1174) ~[bundleFile:?] at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:969) ~[bundleFile:?] at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:738) ~[bundleFile:?] at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:47) ~[bundleFile:?] at org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc$1.onSuccess(NetconfDeviceRpc.java:62) ~[?:?] at org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc$1.onSuccess(NetconfDeviceRpc.java:58) ~[?:?] at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1089) ~[bundleFile:?] at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30) ~[bundleFile:?] at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1174) ~[bundleFile:?] at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:969) ~[bundleFile:?] at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:738) ~[bundleFile:?] at org.opendaylight.netconf.sal.connect.netconf.listener.UncancellableFuture.set(UncancellableFuture.java:45) ~[?:?] at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.processMessage(NetconfDeviceCommunicator.java:337) ~[?:?] at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.onMessage(NetconfDeviceCommunicator.java:269) ~[?:?] at org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator.onMessage(NetconfDeviceCommunicator.java:48) ~[?:?] at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:64) ~[?:?] at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.channelRead0(AbstractNetconfSession.java:187) ~[?:?] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) ~[?:?] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[?:?] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[?:?] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[?:?] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[?:?] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[?:?] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[?:?] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[?:?] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[?:?] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[?:?] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[?:?] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[?:?] at io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:61) ~[?:?] at io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:370) ~[?:?] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) ~[?:?] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) ~[?:?] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) ~[?:?] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[?:?] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[?:?] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[?:?] ... 1 more