<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:33:38 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>OpenDaylight JIRA</title>
    <link>https://jira.opendaylight.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>8.20.10</version>
        <build-number>820010</build-number>
        <build-date>22-06-2022</build-date>
    </build-info>


<item>
            <title>[OPNFLWPLUG-881] Openflow plugin fails to control OF10 Switches</title>
                <link>https://jira.opendaylight.org/browse/OPNFLWPLUG-881</link>
                <project id="10155" key="OPNFLWPLUG">OpenFlowPlugin</project>
                    <description>&lt;p&gt;Versions &lt;/p&gt;

&lt;p&gt; ODL: Carbon&lt;br/&gt;
 (build: &lt;a href=&quot;https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration/distribution-karaf/0.6.0-SNAPSHOT/distribution-karaf-0.6.0-20170417.101545-4929.zip&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration/distribution-karaf/0.6.0-SNAPSHOT/distribution-karaf-0.6.0-20170417.101545-4929.zip&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt; OVS : 2.0.2, Mininet: 2.2.1 on Ubuntu 14.0.4&lt;/p&gt;


&lt;p&gt; Executed Mininet using the below command&lt;br/&gt;
  sudo mn --controller &apos;remote,ip=&amp;lt;odl_ip&amp;gt;,port=6633&apos; --topo tree,3 --switch ovsk,protocols=OpenFlow10&lt;/p&gt;


&lt;p&gt; Feature Installed in ODL : odl-vtn-manager that uses odl-openflowplugin.&lt;/p&gt;


&lt;p&gt; Problems:&lt;/p&gt;

&lt;p&gt; a. VTN invokes statistics rpc that fails with the below Error Message&lt;/p&gt;

&lt;p&gt;----------- start of log snippet&lt;/p&gt;

&lt;p&gt;java.lang.IllegalArgumentException: Metadata not available for modification NodeModification [identifier=(urn:opendaylight:inventory?revision=2013-08-19)node-connector[&lt;/p&gt;
{(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:1:LOCAL}
&lt;p&gt;], modificationType=TOUCH, childModification={AugmentationIdentifier&lt;/p&gt;
{childNames=[(urn:opendaylight:port:statistics?revision=2013-12-14)flow-capable-node-connector-statistics]}
&lt;p&gt;=NodeModification [identifier=AugmentationIdentifier&lt;/p&gt;
{childNames=[(urn:opendaylight:port:statistics?revision=2013-12-14)flow-capable-node-connector-statistics]}
&lt;p&gt;, modificationType=TOUCH, childModification={(urn:opendaylight:port:statistics?revision=2013-12-14)flow-capable-node-connector-statistics=NodeModification &lt;span class=&quot;error&quot;&gt;&amp;#91;identifier=(urn:opendaylight:port:statistics?revision=2013-12-14)flow-capable-node-connector-statistics, modificationType=WRITE, childModification={}&amp;#93;&lt;/span&gt;}]}]&lt;br/&gt;
	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:198)&lt;span class=&quot;error&quot;&gt;&amp;#91;101:org.opendaylight.yangtools.yang-data-impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:139)&lt;span class=&quot;error&quot;&gt;&amp;#91;101:org.opendaylight.yangtools.yang-data-impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyTouch(AbstractNodeContainerModificationStrategy.java:252)&lt;span class=&quot;error&quot;&gt;&amp;#91;101:org.opendaylight.yangtools.yang-data-impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyMerge(AbstractNodeContainerModificationStrategy.java:170)&lt;span class=&quot;error&quot;&gt;&amp;#91;101:org.opendaylight.yangtools.yang-data-impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:213)&lt;span class=&quot;error&quot;&gt;&amp;#91;101:org.opendaylight.yangtools.yang-data-impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.mutateChildren(AbstractNodeContainerModificationStrategy.java:139)&lt;span class=&quot;error&quot;&gt;&amp;#91;101:org.opendaylight.yangtools.yang-data-impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.applyWrite(AbstractNodeContainerModificationStrategy.java:113)&lt;span class=&quot;error&quot;&gt;&amp;#91;101:org.opendaylight.yangtools.yang-data-impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.schema.tree.ListEntryModificationStrategy.applyWrite(ListEntryModificationStrategy.java:48)&lt;span class=&quot;error&quot;&gt;&amp;#91;101:org.opendaylight.yangtools.yang-data-impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:219)&lt;span class=&quot;error&quot;&gt;&amp;#91;101:org.opendaylight.yangtools.yang-data-impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.schema.tree.ModifiedNode.seal(ModifiedNode.java:282)&lt;span class=&quot;error&quot;&gt;&amp;#91;101:org.opendaylight.yangtools.yang-data-impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractReadyIterator.process(AbstractReadyIterator.java:56)&lt;span class=&quot;error&quot;&gt;&amp;#91;101:org.opendaylight.yangtools.yang-data-impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeModification.ready(InMemoryDataTreeModification.java:284)&lt;span class=&quot;error&quot;&gt;&amp;#91;101:org.opendaylight.yangtools.yang-data-impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.sal.core.spi.data.SnapshotBackedWriteTransaction.ready(SnapshotBackedWriteTransaction.java:139)&lt;span class=&quot;error&quot;&gt;&amp;#91;162:org.opendaylight.controller.sal-core-spi:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.cluster.datastore.LocalTransactionChain.onTransactionReady(LocalTransactionChain.java:94)&lt;span class=&quot;error&quot;&gt;&amp;#91;204:org.opendaylight.controller.sal-distributed-datastore:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.cluster.datastore.LocalTransactionContext.ready(LocalTransactionContext.java:75)&lt;span class=&quot;error&quot;&gt;&amp;#91;204:org.opendaylight.controller.sal-distributed-datastore:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.cluster.datastore.LocalTransactionContext.directCommit(LocalTransactionContext.java:86)&lt;span class=&quot;error&quot;&gt;&amp;#91;204:org.opendaylight.controller.sal-distributed-datastore:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.cluster.datastore.TransactionProxy.getDirectCommitFuture(TransactionProxy.java:278)&lt;span class=&quot;error&quot;&gt;&amp;#91;204:org.opendaylight.controller.sal-distributed-datastore:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.cluster.datastore.TransactionProxy.createSingleCommitCohort(TransactionProxy.java:265)&lt;span class=&quot;error&quot;&gt;&amp;#91;204:org.opendaylight.controller.sal-distributed-datastore:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.cluster.datastore.TransactionProxy.ready(TransactionProxy.java:231)&lt;span class=&quot;error&quot;&gt;&amp;#91;204:org.opendaylight.controller.sal-distributed-datastore:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.cluster.datastore.TransactionProxy.ready(TransactionProxy.java:53)&lt;span class=&quot;error&quot;&gt;&amp;#91;204:org.opendaylight.controller.sal-distributed-datastore:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.cluster.databroker.AbstractDOMBrokerWriteTransaction.submit(AbstractDOMBrokerWriteTransaction.java:142)&lt;span class=&quot;error&quot;&gt;&amp;#91;204:org.opendaylight.controller.sal-distributed-datastore:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.md.sal.dom.broker.impl.PingPongTransactionChain.processTransaction(PingPongTransactionChain.java:235)&lt;span class=&quot;error&quot;&gt;&amp;#91;164:org.opendaylight.controller.sal-broker-impl:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.md.sal.dom.broker.impl.PingPongTransactionChain.processIfReady(PingPongTransactionChain.java:211)&lt;span class=&quot;error&quot;&gt;&amp;#91;164:org.opendaylight.controller.sal-broker-impl:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.md.sal.dom.broker.impl.PingPongTransactionChain.readyTransaction(PingPongTransactionChain.java:319)&lt;span class=&quot;error&quot;&gt;&amp;#91;164:org.opendaylight.controller.sal-broker-impl:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.md.sal.dom.broker.impl.PingPongTransactionChain$4.submit(PingPongTransactionChain.java:448)&lt;span class=&quot;error&quot;&gt;&amp;#91;164:org.opendaylight.controller.sal-broker-impl:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.md.sal.binding.impl.AbstractWriteTransaction.doSubmit(AbstractWriteTransaction.java:134)&lt;span class=&quot;error&quot;&gt;&amp;#91;166:org.opendaylight.controller.sal-binding-broker-impl:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.md.sal.binding.impl.BindingDOMWriteTransactionAdapter.submit(BindingDOMWriteTransactionAdapter.java:83)&lt;span class=&quot;error&quot;&gt;&amp;#91;166:org.opendaylight.controller.sal-binding-broker-impl:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.md.sal.binding.impl.BindingDOMTransactionChainAdapter$2.submit(BindingDOMTransactionChainAdapter.java:80)&lt;span class=&quot;error&quot;&gt;&amp;#91;166:org.opendaylight.controller.sal-binding-broker-impl:1.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.device.TransactionChainManager.submitWriteTransaction(TransactionChainManager.java:175)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.device.TransactionChainManager.initialSubmitWriteTransaction(TransactionChainManager.java:95)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.device.DeviceContextImpl.initialSubmitTransaction(DeviceContextImpl.java:224)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.statistics.StatisticsContextImpl$5.onSuccess(StatisticsContextImpl.java:513)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.statistics.StatisticsContextImpl$5.onSuccess(StatisticsContextImpl.java:505)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.statistics.StatisticsContextImpl.statChainFuture(StatisticsContextImpl.java:283)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.statistics.StatisticsContextImpl.access$200(StatisticsContextImpl.java:57)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.statistics.StatisticsContextImpl$3.onSuccess(StatisticsContextImpl.java:295)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.statistics.StatisticsContextImpl$3.onSuccess(StatisticsContextImpl.java:292)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.Futures$6.run(Futures.java:1319)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.Futures$ChainingListenableFuture$1.run(Futures.java:918)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.ExecutionList.add(ExecutionList.java:101)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:170)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.Futures$ChainingListenableFuture.run(Futures.java:914)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.google.common.util.concurrent.SettableFuture.set(SettableFuture.java:53)&lt;span class=&quot;error&quot;&gt;&amp;#91;65:com.google.guava:18.0.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.rpc.AbstractRequestContext.setResult(AbstractRequestContext.java:32)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.device.listener.MultiMsgCollectorImpl.endCollecting(MultiMsgCollectorImpl.java:70)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.device.listener.MultiMsgCollectorImpl.addMultipartMsg(MultiMsgCollectorImpl.java:58)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.services.AbstractMultipartRequestCallback.onSuccess(AbstractMultipartRequestCallback.java:54)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowplugin.impl.services.AbstractMultipartRequestCallback.onSuccess(AbstractMultipartRequestCallback.java:22)&lt;span class=&quot;error&quot;&gt;&amp;#91;220:org.opendaylight.openflowplugin.impl:0.4.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowjava.protocol.impl.core.connection.OutboundQueueEntry.complete(OutboundQueueEntry.java:121)&lt;span class=&quot;error&quot;&gt;&amp;#91;209:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowjava.protocol.impl.core.connection.StackedSegment.completeEntry(StackedSegment.java:113)&lt;span class=&quot;error&quot;&gt;&amp;#91;209:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowjava.protocol.impl.core.connection.StackedSegment.pairRequest(StackedSegment.java:153)&lt;span class=&quot;error&quot;&gt;&amp;#91;209:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractStackedOutboundQueue.pairRequest(AbstractStackedOutboundQueue.java:203)&lt;span class=&quot;error&quot;&gt;&amp;#91;209:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractOutboundQueueManager.onMessage(AbstractOutboundQueueManager.java:208)&lt;span class=&quot;error&quot;&gt;&amp;#91;209:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionAdapterImpl.consumeDeviceMessage(ConnectionAdapterImpl.java:122)&lt;span class=&quot;error&quot;&gt;&amp;#91;209:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractConnectionAdapterStatistics.consume(AbstractConnectionAdapterStatistics.java:66)&lt;span class=&quot;error&quot;&gt;&amp;#91;209:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionAdapterImpl.consume(ConnectionAdapterImpl.java:43)&lt;span class=&quot;error&quot;&gt;&amp;#91;209:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowjava.protocol.impl.core.DelegatingInboundHandler.channelRead(DelegatingInboundHandler.java:43)&lt;span class=&quot;error&quot;&gt;&amp;#91;209:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowjava.protocol.impl.core.connection.AbstractOutboundQueueManager.channelRead(AbstractOutboundQueueManager.java:195)&lt;span class=&quot;error&quot;&gt;&amp;#91;209:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)&lt;span class=&quot;error&quot;&gt;&amp;#91;141:io.netty.codec:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)&lt;span class=&quot;error&quot;&gt;&amp;#91;141:io.netty.codec:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)&lt;span class=&quot;error&quot;&gt;&amp;#91;141:io.netty.codec:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)&lt;span class=&quot;error&quot;&gt;&amp;#91;141:io.netty.codec:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)&lt;span class=&quot;error&quot;&gt;&amp;#91;141:io.netty.codec:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:287)&lt;span class=&quot;error&quot;&gt;&amp;#91;143:io.netty.handler:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.openflowjava.protocol.impl.core.IdleHandler.channelRead(IdleHandler.java:39)&lt;span class=&quot;error&quot;&gt;&amp;#91;209:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)&lt;span class=&quot;error&quot;&gt;&amp;#91;139:io.netty.transport:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:1018)&lt;span class=&quot;error&quot;&gt;&amp;#91;144:io.netty.transport-native-epoll:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:394)&lt;span class=&quot;error&quot;&gt;&amp;#91;144:io.netty.transport-native-epoll:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:288)&lt;span class=&quot;error&quot;&gt;&amp;#91;144:io.netty.transport-native-epoll:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)&lt;span class=&quot;error&quot;&gt;&amp;#91;138:io.netty.common:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)&lt;span class=&quot;error&quot;&gt;&amp;#91;138:io.netty.common:4.1.8.Final&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;---------- end of log snippet&lt;/p&gt;


&lt;p&gt;b. openflowplugin fails to recover even after multiple mininet restarts.&lt;/p&gt;

&lt;p&gt;karaf log has been attached.&lt;/p&gt;</description>
                <environment>&lt;p&gt;Operating System: All&lt;br/&gt;
Platform: All&lt;/p&gt;</environment>
        <key id="28149">OPNFLWPLUG-881</key>
            <summary>Openflow plugin fails to control OF10 Switches</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                                <status id="5" iconUrl="https://jira.opendaylight.org/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10000">Done</resolution>
                                        <assignee username="gvrangan">Venkatrangan Govindarajan</assignee>
                                    <reporter username="gvrangan">Venkatrangan Govindarajan</reporter>
                        <labels>
                    </labels>
                <created>Tue, 18 Apr 2017 11:42:49 +0000</created>
                <updated>Mon, 27 Sep 2021 09:02:02 +0000</updated>
                            <resolved>Mon, 22 May 2017 16:26:33 +0000</resolved>
                                                                    <component>General</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>8</watches>
                                                                                                                <comments>
                            <comment id="58907" author="gvrangan" created="Tue, 18 Apr 2017 11:42:49 +0000"  >&lt;p&gt;Attachment karaf.log has been added with description: Karaf Log with Errors.&lt;/p&gt;</comment>
                            <comment id="58896" author="gvrangan" created="Tue, 18 Apr 2017 11:45:46 +0000"  >&lt;p&gt;Detailed analysis of the problem for fixing&lt;/p&gt;

&lt;p&gt;The issue occurs when statistics manager writes flow-capable-node-connector-statistics into DS before the target node-connector is created.&lt;br/&gt;
Since the parent node of the target node-connector doesn&apos;t exist at that time, the failure occurs.&lt;/p&gt;

&lt;p&gt;When we use Mininet to generate switches, switches are generated without any ports firstly, then ports are generated. Therefore, the OFP needs to handle such a situation, but it doesn&apos;t right now.&lt;/p&gt;


&lt;p&gt;When the issue happened, that is, the OFP got connected with OF 1.0 switches, the OPF worked as follows:&lt;/p&gt;

&lt;p&gt;Step 1. Handshake with an OF 1.0 switch was done successfully. OFP got the result of the OFPT_FEATURES_REPLY. At that time, the result didn&apos;t contain port information.&lt;/p&gt;

&lt;p&gt;The postHandshake() of the HandshakeManagerImpl.java sent the FEATURES_REQUEST after the handshake.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/HandshakeManagerImpl.java&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;    /**&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;after handshake set features, register to session&lt;/li&gt;
	&lt;li&gt;@param proposedVersion proposed openflow version&lt;/li&gt;
	&lt;li&gt;@param xid transaction id&lt;br/&gt;
     */&lt;br/&gt;
    protected void postHandshake(final Short proposedVersion, final Long xid) {&lt;br/&gt;
        // set version&lt;br/&gt;
        version = proposedVersion;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;        LOG.debug(&quot;version set: {}&quot;, proposedVersion);&lt;br/&gt;
        // request features&lt;br/&gt;
        GetFeaturesInputBuilder featuresBuilder = new GetFeaturesInputBuilder();&lt;br/&gt;
        featuresBuilder.setVersion(version).setXid(xid);&lt;br/&gt;
        LOG.debug(&quot;sending feature request for version={} and xid={}&quot;, version, xid);&lt;br/&gt;
        Future&amp;lt;RpcResult&amp;lt;GetFeaturesOutput&amp;gt;&amp;gt; featuresFuture = connectionAdapter&lt;br/&gt;
                .getFeatures(featuresBuilder.build());&lt;/p&gt;

&lt;p&gt;On the success, the onHandshakeSuccessful() of HandshakeListenerImpl.java was called with the result of the FEATURES_REPLY.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;impl/src/main/java/org/opendaylight/openflowplugin/impl/connection/listener/HandshakeListenerImpl.java&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;                new FutureCallback&amp;lt;RpcResult&amp;lt;GetFeaturesOutput&amp;gt;&amp;gt;() {&lt;br/&gt;
                    @Override&lt;br/&gt;
                    public void onSuccess(RpcResult&amp;lt;GetFeaturesOutput&amp;gt; rpcFeatures) {&lt;br/&gt;
                        LOG.trace(&quot;features are back&quot;);&lt;br/&gt;
                        if (rpcFeatures.isSuccessful()) {&lt;br/&gt;
                            GetFeaturesOutput featureOutput = rpcFeatures.getResult();&lt;/p&gt;

&lt;p&gt;                            LOG.debug(&quot;obtained features: datapathId={}&quot;,&lt;br/&gt;
                                    featureOutput.getDatapathId());&lt;br/&gt;
                            LOG.debug(&quot;obtained features: auxiliaryId={}&quot;,&lt;br/&gt;
                                    featureOutput.getAuxiliaryId());&lt;br/&gt;
                            LOG.trace(&quot;handshake SETTLED: version={}, datapathId={}, auxiliaryId={}&quot;,&lt;br/&gt;
                                    version, featureOutput.getDatapathId(), featureOutput.getAuxiliaryId());&lt;br/&gt;
                            handshakeListener.onHandshakeSuccessful(featureOutput, proposedVersion);&lt;/p&gt;


&lt;p&gt;The onHandshakeSuccessful() method stored the result in ConnectionContextImpl.java.&lt;/p&gt;

&lt;p&gt;    @Override&lt;br/&gt;
    public void onHandshakeSuccessful(final GetFeaturesOutput featureOutput, final Short version) {&lt;br/&gt;
        if (LOG.isDebugEnabled()) {&lt;br/&gt;
            LOG.debug(&quot;handshake succeeded: {}&quot;, connectionContext.getConnectionAdapter().getRemoteAddress());&lt;br/&gt;
        }&lt;br/&gt;
        this.handshakeContext.close();&lt;br/&gt;
        connectionContext.changeStateToWorking();&lt;br/&gt;
        connectionContext.setFeatures(featureOutput);&lt;/p&gt;


&lt;p&gt;Step 2. Ports on the OF 1.0 switch was generated, and OFPT_PORT_STATUS was notified to the OFP. However, the initialization of the target node information in the OFP was not completed yet, the OFP didn&apos;t write node-connector to the DS.&lt;/p&gt;

&lt;p&gt;Receiving PORT_STATUS, processPortStatusMessage() of DeviceContextImpl.java was called, and a node-connector was created.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;    @Override&lt;br/&gt;
    public void processPortStatusMessage(final PortStatusMessage portStatus) {&lt;br/&gt;
        messageSpy.spyMessage(portStatus.getImplementedInterface(), MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_SUCCESS);&lt;br/&gt;
        final FlowCapableNodeConnector flowCapableNodeConnector = portStatusTranslator.translate(portStatus, getDeviceInfo(), null);&lt;/p&gt;

&lt;p&gt;        final KeyedInstanceIdentifier&amp;lt;NodeConnector, NodeConnectorKey&amp;gt; iiToNodeConnector = provideIIToNodeConnector(portStatus.getPortNo(), portStatus.getVersion());&lt;br/&gt;
        try {&lt;br/&gt;
            if (portStatus.getReason().equals(PortReason.OFPPRADD) || portStatus.getReason().equals(PortReason.OFPPRMODIFY)) {&lt;br/&gt;
                // because of ADD status node connector has to be created&lt;br/&gt;
                final NodeConnectorBuilder nConnectorBuilder = new NodeConnectorBuilder().setKey(iiToNodeConnector.getKey());&lt;br/&gt;
                nConnectorBuilder.addAugmentation(FlowCapableNodeConnectorStatisticsData.class, new FlowCapableNodeConnectorStatisticsDataBuilder().build());&lt;br/&gt;
                nConnectorBuilder.addAugmentation(FlowCapableNodeConnector.class, flowCapableNodeConnector);&lt;br/&gt;
                writeToTransaction(LogicalDatastoreType.OPERATIONAL, iiToNodeConnector, nConnectorBuilder.build());&lt;/p&gt;

&lt;p&gt;However, writeToTransaction() which write data into DS is implemented to do nothing when the initialized member variable is false.&lt;/p&gt;

&lt;p&gt;    @Override&lt;br/&gt;
    public &amp;lt;T extends DataObject&amp;gt; void writeToTransaction(final LogicalDatastoreType store,&lt;br/&gt;
                                                          final InstanceIdentifier&amp;lt;T&amp;gt; path,&lt;br/&gt;
                                                          final T data){&lt;br/&gt;
        if (initialized) &lt;/p&gt;
{
            transactionChainManager.writeToTransaction(store, path, data, false);
        }
&lt;p&gt;    }&lt;/p&gt;


&lt;p&gt;The initialized variable is modified to true by lazyTransactionManagerInitialization() which is called by onContextInstantiateService().&lt;/p&gt;

&lt;p&gt;    @VisibleForTesting&lt;br/&gt;
    void lazyTransactionManagerInitialization() {&lt;br/&gt;
        if (!this.initialized) {&lt;br/&gt;
            if (LOG.isDebugEnabled()) {&lt;br/&gt;
                LOG.debug(&quot;Transaction chain manager for node {} created&quot;, deviceInfo.getLOGValue());&lt;br/&gt;
            }&lt;br/&gt;
            this.transactionChainManager = new TransactionChainManager(dataBroker, deviceInfo);&lt;br/&gt;
            this.deviceFlowRegistry = new DeviceFlowRegistryImpl(deviceInfo.getVersion(), dataBroker, deviceInfo.getNodeInstanceIdentifier());&lt;br/&gt;
            this.deviceGroupRegistry = new DeviceGroupRegistryImpl();&lt;br/&gt;
            this.deviceMeterRegistry = new DeviceMeterRegistryImpl();&lt;br/&gt;
            this.initialized = true;&lt;br/&gt;
        }&lt;br/&gt;
    }&lt;/p&gt;


&lt;p&gt;Step 3. The OFP created the initial data for the OF 1.0 switch. At that time, the OFP used the result of the OFPT_FEATURES_REPLY which the OFP got immediately after handshake in order to create node-connector information. Thus, the OFP didn&apos;t create node-connector even though ports existed in the OF 1.0 switch.&lt;/p&gt;

&lt;p&gt;The initialization for each OF 1.0 version is implemented in DeviceContextImpl.onContextInstantiateService().&lt;/p&gt;

&lt;p&gt;        try {&lt;br/&gt;
            final java.util.Optional&amp;lt;AbstractDeviceInitializer&amp;gt; initializer = deviceInitializerProvider&lt;br/&gt;
                .lookup(deviceInfo.getVersion());&lt;/p&gt;

&lt;p&gt;            if (initializer.isPresent()) &lt;/p&gt;
{
                final MultipartWriterProvider writerProvider = MultipartWriterProviderFactory.createDefaultProvider(this);
                initializer.get().initialize(this, switchFeaturesMandatory, writerProvider, convertorExecutor);
            }
&lt;p&gt; else &lt;/p&gt;
{
                throw new ExecutionException(new ConnectionException(&quot;Unsupported version &quot; + deviceInfo.getVersion()));
            }
&lt;p&gt;        } catch (ExecutionException | InterruptedException e) {&lt;br/&gt;
            LOG.warn(&quot;Device {} cannot be initialized: &quot;, deviceInfo.getLOGValue(), e);&lt;br/&gt;
            return false;&lt;br/&gt;
        }&lt;/p&gt;

&lt;p&gt;The instance of the OF10DeviceInitializer class was assigned into the initializer. (openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/initialization/OF10DeviceInitializer.java)&lt;br/&gt;
In the consequence of calling the initialize(), OF10DeviceInitializer.initializeNodeInformation() was called.&lt;/p&gt;

&lt;p&gt;The OFPMP_DESC of multipart was acquired in OF10DeviceInitializer.initializeNodeInformation().&lt;br/&gt;
On success, the initialization of node-connector is executed.&lt;/p&gt;

&lt;p&gt;        return Futures.transform(future, new Function&amp;lt;Boolean, Void&amp;gt;() {&lt;br/&gt;
            @Nullable&lt;br/&gt;
            @Override&lt;br/&gt;
            public Void apply(@Nullable final Boolean input) &lt;/p&gt;
{
                writePhyPortInformation(deviceContext);
                return null;
            }
&lt;p&gt;        });&lt;/p&gt;

&lt;p&gt;However, node-connector is created based on the result of FEATURES_REPLY which is stored in ConnectionContextImpl.&lt;br/&gt;
Therefore, node-connector is not created when the FEATURES_REPLY doesn&apos;t contain port information.&lt;/p&gt;

&lt;p&gt;    private static void writePhyPortInformation(final DeviceContext deviceContext) {&lt;br/&gt;
        final DeviceInfo deviceInfo = deviceContext.getDeviceInfo();&lt;br/&gt;
        final ConnectionContext connectionContext = deviceContext.getPrimaryConnectionContext();&lt;br/&gt;
        final MessageTranslator&amp;lt;PortGrouping, FlowCapableNodeConnector&amp;gt; translator = deviceContext&lt;br/&gt;
            .oook()&lt;br/&gt;
            .lookupTranslator(new TranslatorKey(deviceInfo.getVersion(), PortGrouping.class.getName()));&lt;/p&gt;

&lt;p&gt;        connectionContext.getFeatures().getPhyPort().forEach(port -&amp;gt; {&lt;/p&gt;


&lt;p&gt;Step 4. After the OFP waited the completion of the above step (step 3), its statistic manager got the initial data of statistics using OFPT_STATS_REQUEST. At this time, the OFP also got OFPST_PORT, and it wrote flow-capable-node-connector-statistics into DS.&lt;/p&gt;

&lt;p&gt;The initialize() of the AbstractDeviceInitializer.java waits the completion of the initialization.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/initialization/AbstractDeviceInitializer.java&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;        // Synchronously get information about device&lt;br/&gt;
        initializeNodeInformation(deviceContext, switchFeaturesMandatory, multipartWriterProvider, convertorExecutor)&lt;br/&gt;
            .get();&lt;/p&gt;

&lt;p&gt;After that DeviceContextImpl.onContextInstantiateService() called onContextInstantiateService() of StatisticsContextImpl (openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsContextImpl.java).&lt;/p&gt;

&lt;p&gt;        return this.clusterInitializationPhaseHandler.onContextInstantiateService(mastershipChangeListener);&lt;/p&gt;

&lt;p&gt;StatisticsContextImpl.onContextInstantiateService() calls the initialization procedure for statistics.&lt;/p&gt;


&lt;p&gt;    @Override&lt;br/&gt;
    public boolean onContextInstantiateService(final MastershipChangeListener mastershipChangeListener) {&lt;/p&gt;

&lt;p&gt;        LOG.info(&quot;Starting statistics context cluster services for node {}&quot;, deviceInfo.getLOGValue());&lt;/p&gt;

&lt;p&gt;        this.statListForCollectingInitialization();&lt;br/&gt;
        Futures.addCallback(this.initialGatherDynamicData(), new FutureCallback&amp;lt;Boolean&amp;gt;() {&lt;/p&gt;

&lt;p&gt;Step 5. When the OFP submitted the initial data to DS, it failed to submit, since the node-connector which was the parent of flow-capable-node-connector-statistics, which was wrote in the above step (step 4), didn&apos;t exist.&lt;/p&gt;

&lt;p&gt;Step 6. Since the initialization of the device failed, the OFP could not control the target switch at all.&lt;/p&gt;


&lt;p&gt;Please note that the above explanation is for the master and stable/carbon branch.&lt;br/&gt;
However, a very similar issue happens in the stable/boron.&lt;/p&gt;

&lt;p&gt;On the stable/boron, the method which does specific initialization for each OF version is initializeNodeInformation() of openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/util/DeviceInitializationUtils.java.&lt;br/&gt;
However, this method also used the result of FEATURES_REPLY for initialization node-connector.&lt;br/&gt;
Therefore, the issue occurs on the stable/boron as well.&lt;/p&gt;

&lt;p&gt;        if (OFConstants.OFP_VERSION_1_0 == version) {&lt;br/&gt;
            final CapabilitiesV10 capabilitiesV10 = connectionContext.getFeatures().getCapabilitiesV10();&lt;/p&gt;

&lt;p&gt;            DeviceStateUtil.setDeviceStateBasedOnV10Capabilities(deviceState, capabilitiesV10);&lt;/p&gt;

&lt;p&gt;            deviceFeaturesFuture = createDeviceFeaturesForOF10(deviceContext);&lt;br/&gt;
            // create empty tables after device description is processed&lt;br/&gt;
            chainTableTrunkWriteOF10(deviceContext, deviceFeaturesFuture);&lt;/p&gt;

&lt;p&gt;            final short ofVersion = deviceInfo.getVersion();&lt;br/&gt;
            final TranslatorKey translatorKey = new TranslatorKey(ofVersion, PortGrouping.class.getName());&lt;br/&gt;
            final MessageTranslator&amp;lt;PortGrouping, FlowCapableNodeConnector&amp;gt; translator = deviceContext.oook()&lt;br/&gt;
                    .lookupTranslator(translatorKey);&lt;br/&gt;
            final BigInteger dataPathId = deviceContext.getDeviceInfo().getDatapathId();&lt;/p&gt;

&lt;p&gt;            for (final PortGrouping port : connectionContext.getFeatures().getPhyPort()) {&lt;/p&gt;</comment>
                            <comment id="58897" author="gvrangan" created="Tue, 18 Apr 2017 12:01:46 +0000"  >&lt;p&gt;The problem occurs much before VTN invoking any rpc. Please check the Comment 1 for more details.&lt;/p&gt;</comment>
                            <comment id="58898" author="tomas.slusny@pantheon.tech" created="Wed, 19 Apr 2017 08:26:15 +0000"  >&lt;p&gt;Isn&apos;t this really similar to &lt;a href=&quot;https://jira.opendaylight.org/browse/OPNFLWPLUG-790&quot; title=&quot;failed to update port status - all new OVS ports fail from this point&quot; class=&quot;issue-link&quot; data-issue-key=&quot;OPNFLWPLUG-790&quot;&gt;&lt;del&gt;OPNFLWPLUG-790&lt;/del&gt;&lt;/a&gt;? Because there I am trying to solve same issue, and that is port status messages arriving too early. I made patch that should fix this, so can you test it with this patch from Gerrit: &lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/53905/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/53905/&lt;/a&gt; ?&lt;/p&gt;</comment>
                            <comment id="58899" author="gvrangan" created="Mon, 24 Apr 2017 06:13:14 +0000"  >&lt;p&gt;(In reply to Tomas Slusny from comment #3)&lt;br/&gt;
&amp;gt; Isn&apos;t this really similar to &lt;a href=&quot;https://jira.opendaylight.org/browse/OPNFLWPLUG-790&quot; title=&quot;failed to update port status - all new OVS ports fail from this point&quot; class=&quot;issue-link&quot; data-issue-key=&quot;OPNFLWPLUG-790&quot;&gt;&lt;del&gt;OPNFLWPLUG-790&lt;/del&gt;&lt;/a&gt;? Because there I am trying to solve&lt;br/&gt;
&amp;gt; same issue, and that is port status messages arriving too early. I made&lt;br/&gt;
&amp;gt; patch that should fix this, so can you test it with this patch from Gerrit:&lt;br/&gt;
&amp;gt; &lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/53905/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/53905/&lt;/a&gt; ?&lt;/p&gt;

&lt;p&gt;Hi Thomas,&lt;/p&gt;

&lt;p&gt; Thanks for responding to the bug report.   I tested the patches for &lt;a href=&quot;https://jira.opendaylight.org/browse/OPNFLWPLUG-790&quot; title=&quot;failed to update port status - all new OVS ports fail from this point&quot; class=&quot;issue-link&quot; data-issue-key=&quot;OPNFLWPLUG-790&quot;&gt;&lt;del&gt;OPNFLWPLUG-790&lt;/del&gt;&lt;/a&gt;, It is not fixing the issue mentioned in this bug.&lt;/p&gt;</comment>
                            <comment id="58900" author="gvrangan" created="Mon, 24 Apr 2017 06:25:31 +0000"  >&lt;p&gt;Please check the logs from 00:17 time. The errors weere created regularly after that time/.&lt;/p&gt;</comment>
                            <comment id="58908" author="gvrangan" created="Mon, 24 Apr 2017 06:25:31 +0000"  >&lt;p&gt;Attachment karaf.log has been added with description: Logs with latest  stable/carbon code.&lt;/p&gt;</comment>
                            <comment id="58901" author="tomas.slusny@pantheon.tech" created="Mon, 24 Apr 2017 07:19:34 +0000"  >&lt;p&gt;Can you test it with this patch? &lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/55868/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/55868/&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="58902" author="tomas.slusny@pantheon.tech" created="Mon, 24 Apr 2017 12:07:07 +0000"  >&lt;p&gt;Nevermind, need to make some changes on the patch.&lt;/p&gt;</comment>
                            <comment id="58903" author="tomas.slusny@pantheon.tech" created="Thu, 27 Apr 2017 06:38:48 +0000"  >&lt;p&gt;GERRIT: &lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/55868/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/55868/&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="58904" author="arthi.b@hcl.com" created="Fri, 28 Apr 2017 12:23:25 +0000"  >&lt;p&gt;Tested the above patch in stable/carbon. Most of the time, issue is been reproduced when miminet is restarted.&lt;/p&gt;</comment>
                            <comment id="58909" author="arthi.b@hcl.com" created="Fri, 28 Apr 2017 12:47:24 +0000"  >&lt;p&gt;Attachment karaf.txt has been added with description: Karaf logs&lt;/p&gt;</comment>
                            <comment id="58905" author="tomas.slusny@pantheon.tech" created="Wed, 10 May 2017 10:31:49 +0000"  >&lt;p&gt;Can you try it again with latest version of patch please? Now it should handle all missed port statuses since open of connection.&lt;/p&gt;</comment>
                            <comment id="58906" author="abhijit2511" created="Mon, 22 May 2017 16:26:33 +0000"  >&lt;p&gt;Closing it as it is fixed as per Tomas Slusny - please reopen it if you still see an issue.&lt;/p&gt;</comment>
                    </comments>
                    <attachments>
                            <attachment id="14136" name="karaf.log" size="780878" author="gvrangan" created="Mon, 24 Apr 2017 06:25:31 +0000"/>
                            <attachment id="14135" name="karaf.log" size="808748" author="gvrangan" created="Tue, 18 Apr 2017 11:42:49 +0000"/>
                            <attachment id="14137" name="karaf.txt" size="170131" author="arthi.b@hcl.com" created="Fri, 28 Apr 2017 12:47:24 +0000"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_11400" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10208" key="com.atlassian.jira.plugin.system.customfieldtypes:textfield">
                        <customfieldname>External issue ID</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>8239</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10201" key="com.atlassian.jira.plugin.system.customfieldtypes:url">
                        <customfieldname>External issue URL</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[https://bugs.opendaylight.org/show_bug.cgi?id=8239]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10206" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Issue Type</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10300"><![CDATA[Bug]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i033vz:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>