Details
-
Bug
-
Status: Resolved
-
Resolution: Done
-
None
-
None
-
None
-
Operating System: All
Platform: All
-
2407
Description
When using the learning switch bundle to install flows reactively, an error is generated which prevents the learnt flows to be installed on the switch. This causes every packet to traverse the controller.
To replicate this scenario:
1. Build the openflowplugin/distribution/base and openflowplugin/samples/learningswitch at master
2. Delete simple forwarding bundle at /plugin/org.opendaylight.controller.samples.simpleforwarding-0.5.0.jar.
3. Install the learning switch bundle learning-switch-0.1.0-SNAPSHOT.jar at /plugin
4. Run the controller, mininet with topo=single,2
5. ping h2 from h1.
6. Print the flow table of s1 with ovs-ofctl. s1 only has the default entry (goto controller) installed without any learned flows installed.
The cause may be a data precondition failure as listed in the following part of the log.
2014-11-18 11:50:24.468 EST [md-sal-binding-notification-3] DEBUG o.o.o.l.LearningSwitchHandler - Received packet via match: Match [_inPort=Uri[_value=openflow:1:2], augmentation=[]]
2014-11-18 11:50:24.468 EST [md-sal-binding-notification-3] DEBUG o.o.o.l.LearningSwitchHandler - Received packet from MAC match: MacAddress [_value=00:00:00:00:00:02], ingress: Uri [_value=openflow:1:2]
2014-11-18 11:50:24.468 EST [md-sal-binding-notification-3] DEBUG o.o.o.l.LearningSwitchHandler - Received packet to MAC match: MacAddress [_value=00:00:00:00:00:01]
2014-11-18 11:50:24.468 EST [md-sal-binding-notification-3] DEBUG o.o.o.l.LearningSwitchHandler - Ethertype: 800
2014-11-18 11:50:24.468 EST [md-sal-binding-notification-3] DEBUG o.o.o.l.LearningSwitchHandler - covering mac path: MacAddress [_value=00:00:00:00:00:02]MacAddress [_value=00:00:00:00:00:01] by [Uri [_value=openflow:1:1]]
..
2014-11-18 11:50:24.474 EST [WriteTxCommit-0] WARN o.o.c.m.s.d.s.i.InMemoryDOMDataStore - Store Tx: DOM-CFG-57 Data Precondition failed for /(urn:opendaylight:inventory?revision=2013-08-19)nodes/node/node[
].
org.opendaylight.yangtools.yang.data.api.schema.tree.ModifiedNodeDoesNotExistException: Node /(urn:opendaylight:inventory?revision=2013-08-19)nodes/node/node[
] does not exist. Cannot apply modification to its children.
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.checkSubtreeModificationApplicable(NormalizedNodeContainerModificationStrategy.java:164) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:135) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.checkChildPreconditions(NormalizedNodeContainerModificationStrategy.java:178) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.checkSubtreeModificationApplicable(NormalizedNodeContainerModificationStrategy.java:168) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:135) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.checkChildPreconditions(NormalizedNodeContainerModificationStrategy.java:178) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.checkSubtreeModificationApplicable(NormalizedNodeContainerModificationStrategy.java:168) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:135) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.checkChildPreconditions(NormalizedNodeContainerModificationStrategy.java:178) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.checkSubtreeModificationApplicable(NormalizedNodeContainerModificationStrategy.java:168) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:135) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.RootModificationApplyOperation.checkApplicable(RootModificationApplyOperation.java:72) ~[bundlefile:na]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTree.validate(InMemoryDataTree.java:77) ~[bundlefile:na]
at org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore$ThreePhaseCommitImpl$1.call(InMemoryDOMDataStore.java:246) [bundlefile:na]
at org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore$ThreePhaseCommitImpl$1.call(InMemoryDOMDataStore.java:242) [bundlefile:na]
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_65]
at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:293) [bundlefile:na]
at com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:61) [bundlefile:na]
at org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore$ThreePhaseCommitImpl.canCommit(InMemoryDOMDataStore.java:242) [bundlefile:na]
at org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataCommitCoordinatorImpl$CommitCoordinationTask.canCommitAll(DOMDataCommitCoordinatorImpl.java:209) [bundlefile:na]
at org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataCommitCoordinatorImpl$CommitCoordinationTask.canCommitBlocking(DOMDataCommitCoordinatorImpl.java:179) [bundlefile:na]
at org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataCommitCoordinatorImpl$CommitCoordinationTask.call(DOMDataCommitCoordinatorImpl.java:150) [bundlefile:na]
at org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataCommitCoordinatorImpl$CommitCoordinationTask.call(DOMDataCommitCoordinatorImpl.java:127) [bundlefile:na]
at org.opendaylight.yangtools.util.concurrent.DeadlockDetectingListeningExecutorService$2.call(DeadlockDetectingListeningExecutorService.java:192) [bundlefile:na]
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_65]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_65]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_65]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_65]