[OPNFLWPLUG-432] [Lithium redesign] some TTL flows (Dec_TTL, Set_MPLS_TTL, Dec_MPLS_TTL) causing NPE and not sent to switch Created: 05/May/15  Updated: 27/Sep/21  Resolved: 26/May/15

Status: Resolved
Project: OpenFlowPlugin
Component/s: General
Affects Version/s: None
Fix Version/s: None

Type: Bug
Reporter: Jamo Luhrsen Assignee: Jamo Luhrsen
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


Issue Links:
Blocks
blocks OPNFLWPLUG-429 Milestone: OpenFlow Plugin Redesign -... Resolved
External issue ID: 3129

 Description   

flow services CI tests have at least three failures because of this:
https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-csit-1node-cds-flow-services-lithium-redesign-only-master/

these tests pass in the helium based tests:
https://jenkins.opendaylight.org/releng/view/openflowplugin/job/openflowplugin-csit-1node-cds-flow-services-only-master/

The short of it is that pushing a flow for TTL decrement, MPLS TTL decrement, or Set MPLS TTL will result in a similar
exception for a NullPointerException:

2015-05-05 16:03:17,474 | ERROR | lt-dispatcher-25 | DataTreeChangeListenerActor | 179 - org.opendaylight.controller.sal-distributed-datastore - 1.2.0.SNAPSHOT | Error notifying listener org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataTreeChangeListenerAdapter@1045caf5
java.lang.NullPointerException
at org.opendaylight.openflowplugin.impl.registry.flow.FlowHashFactory$FlowHashDto.<init>(FlowHashFactory.java:51)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]

The flow is also not sent to the switch (as I guess could be expected)

The exceptions seem similar, but a separate comment for each flow mod XML and exception trace is added.



 Comments   
Comment by Jamo Luhrsen [ 05/May/15 ]

This is the dec-nw-ttl XML used to push the flow to config:

<flow xmlns="urn:opendaylight:flow:inventory"><instructions><instruction><order>0</order><apply-actions><action><order>0</order><dec-nw-ttl/></action></apply-actions></instruction></instructions><match><ethernet-match><ethernet-type><type>0x800</type></ethernet-type><ethernet-source><address>00:00:00:01:23:ae</address></ethernet-source><ethernet-destination><address>ff:ff:ff:ff:ff:ff</address></ethernet-destination></ethernet-match><ipv4-source>10.1.2.0/24</ipv4-source><ipv4-destination>40.4.0.0/16</ipv4-destination></match><table_id>3</table_id><id>305</id></flow>

This is the resulting Exception in karaf.log

2015-05-05 15:47:34,350 | ERROR | lt-dispatcher-18 | DataTreeChangeListenerActor | 179 - org.opendaylight.controller.sal-distributed-datastore - 1.2.0.SNAPSHOT | Error notifying listener org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataTreeChangeListenerAdapter@1045caf5
java.lang.NullPointerException
at org.opendaylight.openflowplugin.impl.registry.flow.FlowHashFactory$FlowHashDto.<init>(FlowHashFactory.java:51)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.registry.flow.FlowHashFactory.create(FlowHashFactory.java:30)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.services.SalFlowServiceImpl.addFlow(SalFlowServiceImpl.java:74)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.binding.util.RpcMethodInvokerWithInput.invokeOn(RpcMethodInvokerWithInput.java:30)[69:org.opendaylight.yangtools.yang-binding:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.binding.util.RpcServiceInvoker.invoke(RpcServiceInvoker.java:100)[69:org.opendaylight.yangtools.yang-binding:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.binding.util.RpcServiceInvoker.invokeRpc(RpcServiceInvoker.java:79)[69:org.opendaylight.yangtools.yang-binding:0.7.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.BindingRpcImplementationAdapter.invoke(BindingRpcImplementationAdapter.java:85)[157:org.opendaylight.controller.sal-binding-broker-impl:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.BindingRpcImplementationAdapter.invokeRpc(BindingRpcImplementationAdapter.java:71)[157:org.opendaylight.controller.sal-binding-broker-impl:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.dom.broker.impl.RoutedDOMRpcRoutingTableEntry.invokeRpc(RoutedDOMRpcRoutingTableEntry.java:57)[154:org.opendaylight.controller.sal-broker-impl:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRoutingTable.invokeRpc(DOMRpcRoutingTable.java:186)[154:org.opendaylight.controller.sal-broker-impl:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRouter.invokeRpc(DOMRpcRouter.java:121)[154:org.opendaylight.controller.sal-broker-impl:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter.invoke0(RpcServiceAdapter.java:64)[157:org.opendaylight.controller.sal-binding-broker-impl:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter.access$000(RpcServiceAdapter.java:42)[157:org.opendaylight.controller.sal-binding-broker-impl:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter$RpcInvocationStrategy.invoke(RpcServiceAdapter.java:155)[157:org.opendaylight.controller.sal-binding-broker-impl:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter.invoke(RpcServiceAdapter.java:91)[157:org.opendaylight.controller.sal-binding-broker-impl:1.2.0.SNAPSHOT]
at com.sun.proxy.$Proxy89.addFlow(Unknown Source)[184:org.opendaylight.openflowplugin.model.flow-service:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.applications.frm.impl.FlowForwarder.add(FlowForwarder.java:149)[188:org.opendaylight.openflowplugin.applications.forwardingrules-manager:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.applications.frm.impl.FlowForwarder.add(FlowForwarder.java:47)[188:org.opendaylight.openflowplugin.applications.forwardingrules-manager:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.applications.frm.impl.AbstractListeningCommiter.onDataTreeChanged(AbstractListeningCommiter.java:59)[188:org.opendaylight.openflowplugin.applications.forwardingrules-manager:0.1.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataTreeChangeListenerAdapter.onDataTreeChanged(BindingDOMDataTreeChangeListenerAdapter.java:41)[157:org.opendaylight.controller.sal-binding-broker-impl:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.dataChanged(DataTreeChangeListenerActor.java:53)[179:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.handleReceive(DataTreeChangeListenerActor.java:37)[179:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor.onReceive(AbstractUntypedActor.java:34)[171:org.opendaylight.controller.sal-clustering-commons:1.2.0.SNAPSHOT]
at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:167)[164:com.typesafe.akka.actor:2.3.10]
at akka.actor.Actor$class.aroundReceive(Actor.scala:467)[164:com.typesafe.akka.actor:2.3.10]
at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:97)[164:com.typesafe.akka.actor:2.3.10]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)[164:com.typesafe.akka.actor:2.3.10]
at akka.actor.ActorCell.invoke(ActorCell.scala:487)[164:com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254)[164:com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.run(Mailbox.scala:221)[164:com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.exec(Mailbox.scala:231)[164:com.typesafe.akka.actor:2.3.10]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)[161:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)[161:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[161:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[161:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]

Comment by Jamo Luhrsen [ 05/May/15 ]

The flow xml for set-mpls-ttl-action:

<flow xmlns="urn:opendaylight:flow:inventory"><instructions><instruction><order>0</order><apply-actions><action><order>0</order><set-mpls-ttl-action><mpls-ttl>1</mpls-ttl></set-mpls-ttl-action></action></apply-actions></instruction></instructions><match><ethernet-match><ethernet-type><type>0x800</type></ethernet-type><ethernet-source><address>00:00:00:01:23:ae</address></ethernet-source><ethernet-destination><address>ff:ff:ff:ff:ff:ff</address></ethernet-destination></ethernet-match><ipv4-source>10.1.2.0/24</ipv4-source><ipv4-destination>40.4.0.0/16</ipv4-destination></match><table_id>4</table_id><id>505</id></flow>

The resulting Exception:

2015-05-05 15:52:54,253 | ERROR | entLoopGroup-6-6 | ExecutionList | 61 - com.google.guava - 18.0.0 | RuntimeException while executing runnable com.google.common.util.concurrent.Futures$6@2c31a8f8 with executor INSTANCE
java.lang.NullPointerException
at org.opendaylight.openflowplugin.impl.registry.flow.FlowHashFactory$FlowHashDto.<init>(FlowHashFactory.java:51)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.registry.flow.FlowHashFactory.create(FlowHashFactory.java:30)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.services.SalFlowServiceImpl$3.onSuccess(SalFlowServiceImpl.java:174)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)[61:com.google.guava:18.0.0]
at org.opendaylight.openflowplugin.impl.services.SalFlowServiceImpl$5.onSuccess(SalFlowServiceImpl.java:274)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.services.SalFlowServiceImpl$5.onSuccess(SalFlowServiceImpl.java:214)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$CombinedFuture.setOneValue(Futures.java:1764)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$CombinedFuture.access$400(Futures.java:1608)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$CombinedFuture$2.run(Futures.java:1686)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.cancel(AbstractFuture.java:134)[61:com.google.guava:18.0.0]
at org.opendaylight.openflowplugin.impl.device.BarrierProcessor.processOutstandingRequests(BarrierProcessor.java:46)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.device.BarrierTaskBuilder$BarrierTask$1.onSuccess(BarrierTaskBuilder.java:105)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.device.BarrierTaskBuilder$BarrierTask$1.onSuccess(BarrierTaskBuilder.java:96)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)[61:com.google.guava:18.0.0]
at org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractRpcListener.successfulRpc(AbstractRpcListener.java:101)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener.completed(ResponseExpectedRpcListener.java:38)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionAdapterImpl.consume(ConnectionAdapterImpl.java:315)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.DelegatingInboundHandler.channelRead(DelegatingInboundHandler.java:46)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)[141:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242)[141:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242)[141:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.handler.timeout.ReadTimeoutHandler.channelRead(ReadTimeoutHandler.java:150)[142:io.netty.handler:4.0.26.Final]
at org.opendaylight.openflowjava.protocol.impl.core.IdleHandler.channelRead(IdleHandler.java:39)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:847)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:349)[115:io.netty.transport:4.0.26.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)[116:io.netty.common:4.0.26.Final]
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)[116:io.netty.common:4.0.26.Final]
at java.lang.Thread.run(Thread.java:744)[:1.7.0_55]
2015-05-05 15:53:02,194 | ERROR | entLoopGroup-6-6 | ExecutionList | 61 - com.google.guava - 18.0.0 | RuntimeException while executing runnable com.google.common.util.concurrent.Futures$6@48126327 with executor INSTANCE
java.lang.NullPointerException
at org.opendaylight.openflowplugin.impl.registry.flow.FlowHashFactory$FlowHashDto.<init>(FlowHashFactory.java:51)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.registry.flow.FlowHashFactory.create(FlowHashFactory.java:30)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.services.SalFlowServiceImpl$2$1.onSuccess(SalFlowServiceImpl.java:117)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)[61:com.google.guava:18.0.0]
at org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractRpcListener.successfulRpc(AbstractRpcListener.java:101)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.connection.SimpleRpcListener.operationSuccessful(SimpleRpcListener.java:17)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractRpcListener.operationComplete(AbstractRpcListener.java:72)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:680)[116:io.netty.common:4.0.26.Final]
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:567)[116:io.netty.common:4.0.26.Final]
at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:406)[116:io.netty.common:4.0.26.Final]
at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:82)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.ChannelOutboundBuffer.safeSuccess(ChannelOutboundBuffer.java:639)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:259)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.ChannelOutboundBuffer.removeBytes(ChannelOutboundBuffer.java:334)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.socket.nio.NioSocketChannel.doWrite(NioSocketChannel.java:317)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:750)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:303)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:719)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1119)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:735)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:716)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.ChannelOutboundHandlerAdapter.flush(ChannelOutboundHandlerAdapter.java:115)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:735)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:716)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.DefaultChannelPipeline.flush(DefaultChannelPipeline.java:898)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannel.flush(AbstractChannel.java:192)[115:io.netty.transport:4.0.26.Final]
at org.opendaylight.openflowjava.protocol.impl.core.connection.ChannelOutboundQueue.flush(ChannelOutboundQueue.java:215)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.connection.ChannelOutboundQueue.access$000(ChannelOutboundQueue.java:40)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.connection.ChannelOutboundQueue$1.run(ChannelOutboundQueue.java:84)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:328)[116:io.netty.common:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:350)[115:io.netty.transport:4.0.26.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)[116:io.netty.common:4.0.26.Final]
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)[116:io.netty.common:4.0.26.Final]
at java.lang.Thread.run(Thread.java:744)[:1.7.0_55]
2015-05-05 15:53:31,703 | ERROR | entLoopGroup-6-6 | ExecutionList | 61 - com.google.guava - 18.0.0 | RuntimeException while executing runnable com.google.common.util.concurrent.Futures$6@32599401 with executor INSTANCE
java.lang.NullPointerException
at org.opendaylight.openflowplugin.impl.registry.flow.FlowHashFactory$FlowHashDto.<init>(FlowHashFactory.java:51)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.registry.flow.FlowHashFactory.create(FlowHashFactory.java:30)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.services.SalFlowServiceImpl$3.onSuccess(SalFlowServiceImpl.java:174)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)[61:com.google.guava:18.0.0]
at org.opendaylight.openflowplugin.impl.services.SalFlowServiceImpl$5.onSuccess(SalFlowServiceImpl.java:274)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.services.SalFlowServiceImpl$5.onSuccess(SalFlowServiceImpl.java:214)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$CombinedFuture.setOneValue(Futures.java:1764)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$CombinedFuture.access$400(Futures.java:1608)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$CombinedFuture$2.run(Futures.java:1686)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)[61:com.google.guava:18.0.0]
at org.opendaylight.openflowplugin.impl.device.DeviceContextImpl.processReply(DeviceContextImpl.java:260)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.device.listener.OpenflowProtocolListenerFullImpl.onErrorMessage(OpenflowProtocolListenerFullImpl.java:64)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionAdapterImpl.consume(ConnectionAdapterImpl.java:284)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.DelegatingInboundHandler.channelRead(DelegatingInboundHandler.java:46)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)[141:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242)[141:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242)[141:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.handler.timeout.ReadTimeoutHandler.channelRead(ReadTimeoutHandler.java:150)[142:io.netty.handler:4.0.26.Final]
at org.opendaylight.openflowjava.protocol.impl.core.IdleHandler.channelRead(IdleHandler.java:39)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:847)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:349)[115:io.netty.transport:4.0.26.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)[116:io.netty.common:4.0.26.Final]
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)[116:io.netty.common:4.0.26.Final]
at java.lang.Thread.run(Thread.java:744)[:1.7.0_55]

Comment by Jamo Luhrsen [ 05/May/15 ]

The flow xml for dec-mpls-ttl:

<flow xmlns="urn:opendaylight:flow:inventory"><instructions><instruction><order>0</order><apply-actions><action><order>0</order><dec-mpls-ttl /></action></apply-actions></instruction></instructions><match><ethernet-match><ethernet-type><type>0x800</type></ethernet-type><ethernet-source><address>00:00:00:01:23:ae</address></ethernet-source><ethernet-destination><address>ff:ff:ff:ff:ff:ff</address></ethernet-destination></ethernet-match><ipv4-source>10.1.2.0/24</ipv4-source><ipv4-destination>40.4.0.0/16</ipv4-destination></match><table_id>2</table_id><id>1001</id></flow>

The resulting Exception:

2015-05-05 15:57:25,482 | ERROR | entLoopGroup-6-6 | ExecutionList | 61 - com.google.guava - 18.0.0 | RuntimeException while executing runnable com.google.common.util.concurrent.Futures$6@300206ec with executor INSTANCE
java.lang.NullPointerException
at org.opendaylight.openflowplugin.impl.registry.flow.FlowHashFactory$FlowHashDto.<init>(FlowHashFactory.java:51)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.registry.flow.FlowHashFactory.create(FlowHashFactory.java:30)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.services.SalFlowServiceImpl$3.onSuccess(SalFlowServiceImpl.java:174)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)[61:com.google.guava:18.0.0]
at org.opendaylight.openflowplugin.impl.services.SalFlowServiceImpl$5.onSuccess(SalFlowServiceImpl.java:274)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.services.SalFlowServiceImpl$5.onSuccess(SalFlowServiceImpl.java:214)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$CombinedFuture.setOneValue(Futures.java:1764)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$CombinedFuture.access$400(Futures.java:1608)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.Futures$CombinedFuture$2.run(Futures.java:1686)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)[61:com.google.guava:18.0.0]
at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)[61:com.google.guava:18.0.0]
at org.opendaylight.openflowplugin.impl.device.DeviceContextImpl.processReply(DeviceContextImpl.java:260)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowplugin.impl.device.listener.OpenflowProtocolListenerFullImpl.onErrorMessage(OpenflowProtocolListenerFullImpl.java:64)[195:org.opendaylight.openflowplugin.impl:0.1.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionAdapterImpl.consume(ConnectionAdapterImpl.java:284)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.DelegatingInboundHandler.channelRead(DelegatingInboundHandler.java:46)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)[141:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242)[141:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242)[141:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.handler.timeout.ReadTimeoutHandler.channelRead(ReadTimeoutHandler.java:150)[142:io.netty.handler:4.0.26.Final]
at org.opendaylight.openflowjava.protocol.impl.core.IdleHandler.channelRead(IdleHandler.java:39)[192:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:847)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)[115:io.netty.transport:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:349)[115:io.netty.transport:4.0.26.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)[116:io.netty.common:4.0.26.Final]
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)[116:io.netty.common:4.0.26.Final]
at java.lang.Thread.run(Thread.java:744)[:1.7.0_55]

Comment by Michal Rehak [ 06/May/15 ]

Hi Jamo,
it looks like the flow misses priority or tableId or cookie. Could you check these? Anyway we need to throw some more useful exception and cookie is not mandatory.

Comment by Michal Rehak [ 06/May/15 ]

https://git.opendaylight.org/gerrit/19685

Comment by Michal Rehak [ 06/May/15 ]

merged, please retest

Comment by Anil Vishnoi [ 06/May/15 ]

I also hit the same issue, and i believe it's happening if user don't set the cookie value and cookie value is optional for flow.

Comment by Martin Bobak [ 26/May/15 ]

This bug is related to something that doesn't exist in code base anymore. Please retest and close this bug.

Comment by Jamo Luhrsen [ 26/May/15 ]

looks like the general behavior is now different as well. before, we did not accept a flow mod without a priority. Now, we will take it and assign a default priority of 32768. as long as this is by design, no problem with this bug marked as FIXED. I have an email to openflowplugin-dev asking about this.

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