[YANGTOOLS-1514] Failed to process YANGs containing refine of a if-feature'd target Created: 01/Jun/23 Updated: 12/Jun/23 Resolved: 03/Jun/23 |
|
| Status: | Resolved |
| Project: | yangtools |
| Component/s: | parser |
| Affects Version/s: | 9.0.0, 10.0.0, 7.0.18, 8.0.10, 9.0.8, 10.0.7 |
| Fix Version/s: | 11.0.0, 10.0.8, 9.0.9 |
| Type: | Bug | Priority: | High |
| Reporter: | Robert Varga | Assignee: | Robert Varga |
| Resolution: | Done | Votes: | 0 |
| Labels: | pt | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||||||||||||||||||||||
| Description |
|
This is detected in feature-aware MD-SAL SchemaService in conjuction with a partially-implemented ietf-keystore used through ietf-ssh-server:
Caused by: org.opendaylight.yangtools.yang.parser.spi.source.SourceException: Leaf is missing a 'type' statement [at [{name=(urn:ietf:params:xml:ns:yang:ietf-keystore?revision=2022-12-12)ietf-keystore}]:246:9]
at org.opendaylight.yangtools.yang.parser.spi.source.SourceException.throwIfNull(SourceException.java:205) ~[?:?]
at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.LeafStatementSupport.validateEffective(LeafStatementSupport.java:107) ~[?:?]
at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.LeafStatementSupport.createEffective(LeafStatementSupport.java:93) ~[?:?]
at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.LeafStatementSupport.createEffective(LeafStatementSupport.java:45) ~[?:?]
at org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport.createEffective(AbstractStatementSupport.java:85) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.AbstractResumedStatement.createEffective(AbstractResumedStatement.java:131) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.AbstractResumedStatement.createInferredEffective(AbstractResumedStatement.java:138) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.createInferredEffective(InferredStatementContext.java:236) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.createInferredEffective(InferredStatementContext.java:229) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.createEffective(InferredStatementContext.java:225) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase.createEffective(StatementContextBase.java:426) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.loadEffective(ReactorStmtCtx.java:375) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.buildEffective(ReactorStmtCtx.java:371) ~[?:?]
at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.refine.RefineStatementSupport.createEffective(RefineStatementSupport.java:96) ~[?:?]
at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.refine.RefineStatementSupport.createEffective(RefineStatementSupport.java:34) ~[?:?]
at org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport.createEffective(AbstractStatementSupport.java:85) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.AbstractResumedStatement.createEffective(AbstractResumedStatement.java:131) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.AbstractResumedStatement.createEffective(AbstractResumedStatement.java:116) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase.createEffective(StatementContextBase.java:426) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.loadEffective(ReactorStmtCtx.java:375) ~[?:?]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.buildEffective(ReactorStmtCtx.java:371) ~[?:?]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) ~[?:?]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[?:?]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[?:?]
at org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport.buildEffectiveSubstatements(AbstractStatementSupport.java:139) ~[?:?]
[...]
The problem stems from InferredStatementContext.isSupportedByFeatures() not working correctly due to it having empty declared substatements, which is what checkFeatureSupport() checks. The second problem is that UsesStatementSupport.performRefine() does not consult isSupportedByFeatures(). |