[YANGTOOLS-1026] Choice/Case children conflict does not seem to be detected Created: 09/Sep/19 Updated: 19/Oct/19 Resolved: 08/Oct/19 |
|
| Status: | Resolved |
| Project: | yangtools |
| Component/s: | parser |
| Affects Version/s: | 3.0.4 |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Medium |
| Reporter: | Ajay Lele | Assignee: | Unassigned |
| Resolution: | Duplicate | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||||||||||||||||||
| Description |
|
In bgpcep project, trying to write data to application-rib results in data incorrectly getting rejected. Steps are as below:
{
"application-rib": [
{
"id": "127.0.0.1",
"tables": [
{
"afi": "bgp-linkstate:linkstate-address-family",
"safi": "bgp-linkstate:linkstate-subsequent-address-family",
"bgp-linkstate:linkstate-routes": {
"linkstate-route": [
{
"path-id": 0,
"route-key": "[0, 3, 0, 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 26, 2, 0, 0, 4, 0, 0, 0, 100, 2, 1, 0, 4, 0, 0, 0, 0, 2, 3, 0, 6, 0, 1, 0, 0, 0, 5, 1, 9, 0, 5, 32, -64, -88, -2, 5]",
"advertising-node-descriptors": {
"as-number": 100,
"domain-id": 0,
"isis-node": {
"iso-system-id": "AAEAAAAF"
}
},
"prefix-descriptors": {
"ip-reachability-information": "192.168.254.5/32"
},
"attributes": {
"ipv4-next-hop": {
"global": "192.168.122.136"
},
"prefix-attributes": {
"prefix-metric": 10,
"sr-prefix": {
"local-label": 1001,
"no-php": false,
"readvertisement": false,
"node-sid": true,
"explicit-null": false,
"algorithm": "shortest-path-first"
}
},
"origin": {
"value": "igp"
},
"as-path": {},
"local-pref": {
"pref": 100
}
},
"identifier": 0,
"protocol-id": "isis-level2"
}
]
},
"attributes": {
"uptodate": true
}
}
]
}
]
}
3. This results in below error
{ "errors": { "error": [ { "error-type": "application", "error-tag": "operation-failed", "error-message": "canCommit encountered an unexpected failure", "error-info": "Node (urn:opendaylight:params:xml:ns:yang:bgp-linkstate?revision=2018-03-29)flags is not a valid child of (urn:opendaylight:params:xml:ns:yang:bgp-linkstate?revision=2018-03-29)sr-prefix according to the schema." } ] }}
2019-09-08T16:37:52,148 | WARN | opendaylight-cluster-data-akka.actor.default-dispatcher-3 | LocalThreePhaseCommitCohort | 171 - org.opendaylight.controller.sal-distributed-datastore - 1.11.0.SNAPSHOT | Failed to prepare transaction member-1-datastore-config-fe-0-txn-15-0 on backend
org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaValidationFailedException: Node (urn:opendaylight:params:xml:ns:yang:bgp-linkstate?revision=2018-03-29)flags is not a valid child of (urn:opendaylight:params:xml:ns:yang:bgp-linkstate?revision=2018-03-29)sr-prefix according to the schema.
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.verifyValueChildren(AbstractNodeContainerModificationStrategy.java:122) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.fullVerifyStructure(SchemaAwareApplyOperation.java:145) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.verifyValueChildren(AbstractNodeContainerModificationStrategy.java:120) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.fullVerifyStructure(SchemaAwareApplyOperation.java:145) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.verifyValueChildren(AbstractNodeContainerModificationStrategy.java:120) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.fullVerifyStructure(SchemaAwareApplyOperation.java:145) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.verifyValueChildren(AbstractNodeContainerModificationStrategy.java:120) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.fullVerifyStructure(SchemaAwareApplyOperation.java:145) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.verifyValueChildren(AbstractNodeContainerModificationStrategy.java:120) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.fullVerifyStructure(SchemaAwareApplyOperation.java:145) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.verifyValueChildren(AbstractNodeContainerModificationStrategy.java:120) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.fullVerifyStructure(SchemaAwareApplyOperation.java:145) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.verifyValueChildren(AbstractNodeContainerModificationStrategy.java:120) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.fullVerifyStructure(SchemaAwareApplyOperation.java:145) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.verifyValueChildren(AbstractNodeContainerModificationStrategy.java:120) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.fullVerifyStructure(SchemaAwareApplyOperation.java:145) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.verifyValueChildren(AbstractNodeContainerModificationStrategy.java:120) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.fullVerifyStructure(SchemaAwareApplyOperation.java:145) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.verifyValueChildren(AbstractNodeContainerModificationStrategy.java:120) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.fullVerifyStructure(SchemaAwareApplyOperation.java:145) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.verifyValueChildren(AbstractNodeContainerModificationStrategy.java:120) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.fullVerifyStructure(SchemaAwareApplyOperation.java:145) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.verifyValueChildren(AbstractNodeContainerModificationStrategy.java:120) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.fullVerifyStructure(SchemaAwareApplyOperation.java:145) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.ModifiedNode.seal(ModifiedNode.java:288) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractReadyIterator.process(AbstractReadyIterator.java:47) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeModification.ready(InMemoryDataTreeModification.java:298) ~[237:org.opendaylight.yangtools.yang-data-impl:3.0.4]
at org.opendaylight.mdsal.dom.spi.store.SnapshotBackedWriteTransaction.ready(SnapshotBackedWriteTransaction.java:151) ~[196:org.opendaylight.mdsal.dom-spi:4.0.4]
at org.opendaylight.controller.cluster.datastore.LocalTransactionFactoryImpl.onTransactionReady(LocalTransactionFactoryImpl.java:86) ~[171:org.opendaylight.controller.sal-distributed-datastore:1.11.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.LocalTransactionContext.ready(LocalTransactionContext.java:82) ~[171:org.opendaylight.controller.sal-distributed-datastore:1.11.0.SNAPSHOT]
Models in question are below and data seem valid as per those:
|
| Comments |
| Comment by Ajay Lele [ 13/Sep/19 ] |
|
From [0], the grouping prefix-flags is duplicated in isis and ospf case and it is clearly in violation of Yang spec [1]. I will push a patch to fix the model on bgpcep side, but keeping this ticket open to see if this violation can be detected and error reported while generating java classes from the yang file The identifiers of all these child nodes MUST be unique within all cases in a choice |
| Comment by Robert Varga [ 16/Sep/19 ] |
|
ajayslele thanks for tracking this down. We should be catching these, but we did not do that due to Config Subsystem having a wrong structure. I thought this was already fixed once CSS went away. I will dig around to see what happened. |