[OPNFLWPLUG-51] Number of flows in Table stats does not match the number of flows in the table Created: 24/Jan/14  Updated: 27/Sep/21  Resolved: 05/Feb/14

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

Type: Bug
Reporter: Jan Medved Assignee: Unassigned
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: Mac OS
Platform: Macintosh


Attachments: File ODL Node.json.postman_collection    
External issue ID: 367

 Description   

When flows are added to Table 2 on ovs in mininet, the <flow-count> parameter in <aggregate-flow-statistics> does not match the number of flows in the table.

To reproduce, use mininet, Chrome Postman, and the 'ODL Node' Collection attached to this report as follows:

1. start mininet with 'sudo mn --topo single,3 --controller 'remote,ip=<your-ip-address>:6653' --switch ovsk,protocols=OpenFlow13'

2. Import the attached collection into Postman. You may have to edit the server IP address in the collection to reflect your controller's IP address.

3. Issue 'GET Node oper openflow:1' request to validate that the ovs node is up

4. Wait for stats collection to occur, and then issue the GET Table oper openflow:1/Tabl 2' request to validate that the table is empty. <flow-count> in <aggregate-flow-statistics> is reported as 0.

5. Add Flow 135: Issue the 'PUT FLOW openflow:1/Table 2/Flow 135' request

7. Add Flow 256: Issue the 'PUT FLOW openflow:1/Table 2/Flow 256' request

7. Add Flow 257: Issue the 'PUT FLOW openflow:1/Table 2/Flow 257' request

7. Add Flow 258: Issue the 'PUT FLOW openflow:1/Table 2/Flow 258' request

6. Issue the 'GET Node oper openflow:1/Table 2' request to get Table 2 oper data. <flow-count> in <aggregate-flow-statistics> should be 4, but it is 2. The flows are reported in the table. You may also issue the 'sudo ovs-ofctl -O OpenFlow13 dump-flows s1' command on mininet to validate that the flows were programmed into the switch

Also, as soon as the flow are programmed, the following exception is being observed for each stats collection:

2014-01-24 15:38:13.194 PST [pool-24-thread-3] ERROR o.o.c.m.s.c.i.service.TwoPhaseCommit - Transaction: DOM-4130 Request Commit failed
java.lang.IllegalArgumentException: Node must contains all keys.
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:92) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.util.YangDataUtils.getKeyMap(YangDataUtils.java:37) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataUtils.toIndexMap(YangDataUtils.java:25) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations._mergeMultiple(YangDataOperations.java:99) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.mergeMultiple(YangDataOperations.java:215) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.mergeContainer(YangDataOperations.java:183) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.merge(YangDataOperations.java:42) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations._mergeMultiple(YangDataOperations.java:79) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.mergeMultiple(YangDataOperations.java:209) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.mergeContainer(YangDataOperations.java:183) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.merge(YangDataOperations.java:42) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations._mergeMultiple(YangDataOperations.java:79) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.mergeMultiple(YangDataOperations.java:209) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.mergeContainer(YangDataOperations.java:183) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.merge(YangDataOperations.java:42) ~[na:na]
at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareDataStoreAdapter.mergeData(SchemaAwareDataStoreAdapter.java:159) ~[na:na]
at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareDataStoreAdapter$NormalizedDataModification.mergeOperationalData(SchemaAwareDataStoreAdapter.java:325) ~[na:na]
at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareDataStoreAdapter$NormalizedDataModification.mergeOperationalData(SchemaAwareDataStoreAdapter.java:289) ~[na:na]
at org.opendaylight.controller.md.sal.common.impl.AbstractDataModification.putOperationalData(AbstractDataModification.java:81) ~[bundlefile:na]
at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareDataStoreAdapter.prepareMergedTransaction(SchemaAwareDataStoreAdapter.java:179) ~[na:na]
at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareDataStoreAdapter.requestCommit(SchemaAwareDataStoreAdapter.java:115) ~[na:na]
at org.opendaylight.controller.md.sal.common.impl.service.TwoPhaseCommit.call(TwoPhaseCommit.java:76) [bundlefile:na]
at org.opendaylight.controller.md.sal.common.impl.service.TwoPhaseCommit.call(TwoPhaseCommit.java:31) [bundlefile:na]
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_51]
at java.lang.Thread.run(Thread.java:744) [na:1.7.0_51]
2014-01-24 15:38:13.197 PST [pool-24-thread-4] ERROR o.o.c.m.s.c.i.service.TwoPhaseCommit - Transaction: DOM-4131 Request Commit failed
java.lang.IllegalArgumentException: Node must contains all keys.
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:92) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.util.YangDataUtils.getKeyMap(YangDataUtils.java:37) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataUtils.toIndexMap(YangDataUtils.java:25) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations._mergeMultiple(YangDataOperations.java:99) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.mergeMultiple(YangDataOperations.java:215) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.mergeContainer(YangDataOperations.java:183) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.merge(YangDataOperations.java:42) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations._mergeMultiple(YangDataOperations.java:79) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.mergeMultiple(YangDataOperations.java:209) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.mergeContainer(YangDataOperations.java:183) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.merge(YangDataOperations.java:42) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations._mergeMultiple(YangDataOperations.java:79) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.mergeMultiple(YangDataOperations.java:209) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.mergeContainer(YangDataOperations.java:183) ~[na:na]
at org.opendaylight.yangtools.yang.util.YangDataOperations.merge(YangDataOperations.java:42) ~[na:na]
at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareDataStoreAdapter.mergeData(SchemaAwareDataStoreAdapter.java:159) ~[na:na]
at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareDataStoreAdapter$NormalizedDataModification.mergeOperationalData(SchemaAwareDataStoreAdapter.java:325) ~[na:na]
at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareDataStoreAdapter$NormalizedDataModification.mergeOperationalData(SchemaAwareDataStoreAdapter.java:289) ~[na:na]
at org.opendaylight.controller.md.sal.common.impl.AbstractDataModification.putOperationalData(AbstractDataModification.java:81) ~[bundlefile:na]
at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareDataStoreAdapter.prepareMergedTransaction(SchemaAwareDataStoreAdapter.java:179) ~[na:na]
at org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareDataStoreAdapter.requestCommit(SchemaAwareDataStoreAdapter.java:115) ~[na:na]
at org.opendaylight.controller.md.sal.common.impl.service.TwoPhaseCommit.call(TwoPhaseCommit.java:76) [bundlefile:na]
at org.opendaylight.controller.md.sal.common.impl.service.TwoPhaseCommit.call(TwoPhaseCommit.java:31) [bundlefile:na]
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_51]
at java.lang.Thread.run(Thread.java:744) [na:1.7.0_51]



 Comments   
Comment by Jan Medved [ 24/Jan/14 ]

Attachment ODL Node.json.postman_collection has been added with description: Postman collection: ODL Node

Comment by Jan Medved [ 24/Jan/14 ]

Moreover, the stats (duration of the flows) are not being updated.

Comment by Anil Vishnoi [ 25/Jan/14 ]

Hi Jan,

I fixed this exception through gerrit

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

Can you please re-test it once this gerrit get merged into repo.

Thanks
Anil

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