Uploaded image for project: 'OpenFlowPlugin'
  1. OpenFlowPlugin
  2. OPNFLWPLUG-393

NullPointerException in .ConnectionConductorImpl.updatePort()

    XMLWordPrintable

Details

    • Bug
    • Status: Resolved
    • Resolution: Duplicate
    • None
    • None
    • General
    • None
    • Operating System: All
      Platform: All

    • 2941

    Description

      Hello.

      I see the next issue during ODL tests: when multiple devices (~ 120 devices) are connecting to ODL controller on ODL start, the following issue is thrown:

      2015-04-01 18:32:26,259 | WARN | entLoopGroup-6-2 | DefaultChannelPipeline | 116 - io.netty.common - 4.0.26.Final | An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
      java.lang.NullPointerException
      at
      org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductorImpl.updatePort(ConnectionConductorImpl.java:298)[176:org.opendaylight.openflowplugin:0.1.1000.SNAPSHOT]
      at
      org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductorImpl.processPortStatusMsg(ConnectionConductorImpl.java:283)[176:org.opendaylight.openflowplugin:0.1.1000.SNAPSHOT]
      at
      org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductorImpl.onPortStatusMessage(ConnectionConductorImpl.java:275)[176:org.opendaylight.openflowplugin:0.1.1000.SNAPSHOT]
      at
      org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionAdapterImpl.consume(ConnectionAdapterImpl.java:303)[174:org.opendaylight.openflowjava.openflow-protocol-impl:0.6.0.SNAPSHOT]
      at
      org.opendaylight.openflowjava.protocol.impl.core.DelegatingInboundHandler.channelRead(DelegatingInboundHandler.java:46)[174: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)[174: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:724)[:1.7.0_25]

      The issue is reproducible on Helium and Lithium OpenFlowPlugin versions and caused by racing conditions in ConnectionConductorImpl.
      The sessionContext member is not set yet when onPortStatusMessage is called. As result, this.getSessionContext() in method ConnetionConductorImpl.updatePort() returns null:

      297: } else

      { 298: this.getSessionContext().getPhysicalPorts().put(portNumber, msg); 299: this.getSessionContext().getPortsBandwidth() 300: .put(portNumber, portBandwidth); 301: }

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              michal.rehak Michal Rehak
              igork@elbrys.com Igor Kondrakhin
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: