[YANGTOOLS-1139] random failure to create schemaContext - invalid YangNamespaceContext created Created: 07/Oct/20  Updated: 07/Oct/20  Resolved: 07/Oct/20

Status: Resolved
Project: yangtools
Component/s: parser
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Medium
Reporter: Miroslav Kovac Assignee: Unassigned
Resolution: Duplicate Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Duplicate
duplicates YANGTOOLS-1138 Intermittent failure to resolve prefi... Resolved

 Description   

when parsing module ietf-ipv6-unicast-routing it contains some of the when statements like this:

when "derived-from-or-self(../../rt:address-family, "
       + "'v6ur:ipv6-unicast')" {

parsing this module gives me following error

java.lang.IllegalStateException: Failed to assemble SchemaContext	at org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseSources(YangParserTestUtils.java:366)
	at org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseYangFiles(YangParserTestUtils.java:204)
	at org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseYangFiles(YangParserTestUtils.java:190)
	at org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseYangResourceDirectory(YangParserTestUtils.java:263)
	at org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseYangResourceDirectory(YangParserTestUtils.java:228)
	at org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseYangResourceDirectory(YangParserTestUtils.java:216)
	at org.opendaylight.yangtools.yang.model.util.ut.YT1111Test.testFindDataSchemaNode(YT1111Test.java:18)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: org.opendaylight.yangtools.yang.model.parser.api.YangParserException: Failed to assemble sources
	at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.decodeReactorException(YangParserImpl.java:110)
	at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.buildEffectiveModel(YangParserImpl.java:104)
	at org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseSources(YangParserTestUtils.java:364)
	... 31 more
Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException: Some of FULL_DECLARATION modifiers for statements were not resolved.
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.propagateException(BuildGlobalContext.java:259)
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.loadPhaseStatementsFor(BuildGlobalContext.java:325)
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.loadPhaseStatements(BuildGlobalContext.java:315)
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.executePhases(BuildGlobalContext.java:221)
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.buildEffective(BuildGlobalContext.java:233)
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:232)
	at org.opendaylight.yangtools.yang.parser.impl.YangParserImpl.buildEffectiveModel(YangParserImpl.java:102)
	... 32 more
Caused by: org.opendaylight.yangtools.yang.parser.spi.source.SourceException: Argument "derived-from-or-self(../../rt:address-family, 'v6ur:ipv6-unicast')" is not valid XPath string [at /home/miroslav/projects/java/yangtools/yang/yang-model-util-ut/target/test-classes/1111/ietf-ipv6-unicast-routing@2018-03-13.yang:81:4]
	at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.XPathSupport.parseXPath(XPathSupport.java:42)
	at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.when.WhenStatementSupport.parseArgumentValue(WhenStatementSupport.java:46)
	at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.when.WhenStatementSupport.parseArgumentValue(WhenStatementSupport.java:25)
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementDefinitionContext.parseArgumentValue(StatementDefinitionContext.java:47)
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.SubstatementContext.<init>(SubstatementContext.java:37)
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.AbstractResumedStatement.createSubstatement(AbstractResumedStatement.java:149)
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.createDeclaredChild(SourceSpecificContext.java:142)
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextWriter.startStatement(StatementContextWriter.java:70)
	at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processNewStatement(StatementContextVisitor.java:110)
	at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processStatement(StatementContextVisitor.java:96)
	at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.doProcessStatement(StatementContextVisitor.java:119)
	at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processNewStatement(StatementContextVisitor.java:111)
	at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processStatement(StatementContextVisitor.java:96)
	at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.doProcessStatement(StatementContextVisitor.java:119)
	at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processNewStatement(StatementContextVisitor.java:111)
	at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processStatement(StatementContextVisitor.java:96)
	at org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.visit(StatementContextVisitor.java:46)
	at org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource.writeFull(YangStatementStreamSource.java:126)
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.loadStatements(SourceSpecificContext.java:369)
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.loadPhaseStatementsFor(BuildGlobalContext.java:323)
	... 37 more
Caused by: javax.xml.xpath.XPathExpressionException: java.lang.IllegalArgumentException: Prefix rt is not bound
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseExpr(AntlrXPathParser.java:277)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser$Qualified.parseExpression(AntlrXPathParser.java:151)
	at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.XPathSupport.parseXPath(XPathSupport.java:40)
	... 56 more
Caused by: java.lang.IllegalArgumentException: Prefix rt is not bound
	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:217)
	at org.opendaylight.yangtools.yang.common.YangNamespaceContext.createQName(YangNamespaceContext.java:63)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser$Qualified.createQName(AntlrXPathParser.java:158)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser$Qualified.createStep(AntlrXPathParser.java:164)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser$Qualified.createStep(AntlrXPathParser.java:141)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.createStep(AntlrXPathParser.java:248)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseStep(AntlrXPathParser.java:620)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseLocationPathSteps(AntlrXPathParser.java:462)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseLocationPath(AntlrXPathParser.java:375)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parsePathExpr(AntlrXPathParser.java:409)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseUnion(AntlrXPathParser.java:503)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseUnary(AntlrXPathParser.java:491)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseMultiplicative(AntlrXPathParser.java:391)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseAdditive(AntlrXPathParser.java:306)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseRelational(AntlrXPathParser.java:449)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseEquality(AntlrXPathParser.java:324)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseAnd(AntlrXPathParser.java:313)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseExpr(AntlrXPathParser.java:295)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseFunctionCall(AntlrXPathParser.java:352)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parsePrimary(AntlrXPathParser.java:439)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseFilter(AntlrXPathParser.java:330)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parsePathExpr(AntlrXPathParser.java:412)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseUnion(AntlrXPathParser.java:503)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseUnary(AntlrXPathParser.java:491)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseMultiplicative(AntlrXPathParser.java:391)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseAdditive(AntlrXPathParser.java:306)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseRelational(AntlrXPathParser.java:449)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseEquality(AntlrXPathParser.java:324)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseAnd(AntlrXPathParser.java:313)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseExpr(AntlrXPathParser.java:295)
	at org.opendaylight.yangtools.yang.xpath.impl.AntlrXPathParser.parseExpr(AntlrXPathParser.java:275)
	... 58 more

which is saying that it can not parse XPath String because it doesn t know what rt is. We have this import in a yang file

  import ietf-routing {
    prefix "rt";
    description
      "An 'ietf-routing' module version that is compatible with
       the Network Management Datastore Architecture (NMDA)
       is required.";
  }

Weird thing is that this does not happen always. If I run test 10 times it will sometimes pass and most of the times fail.

When I tried to debug it I found out that interface YangNamespaceContextNamespace has following code

    static @NonNull YangNamespaceContext computeIfAbsent(final StmtContext<?, ?, ?> ctx) {
        final StmtContext<?, ?, ?> root = ctx.getRoot();
        YangNamespaceContext ret = root.getFromNamespace(YangNamespaceContextNamespace.class, Empty.getInstance());
        if (ret == null) {
            verify(ctx instanceof Mutable, "Cannot populate namespace context to %s", ctx);
            ret = new StmtNamespaceContext(ctx);
            ((Mutable<?, ?, ?>)ctx).addToNs(YangNamespaceContextNamespace.class, Empty.getInstance(), ret);
        }
        return ret;
    }

which sometimes returns YangNamespaceContext for module ietf-ipv6-unicast-routing with moduleToPrefix

{QNameModule@2999} "QNameModule{ns=urn:ietf:params:xml:ns:yang:ietf-inet-types, rev=2013-07-15}" -> inet
{QNameModule@3001} "QNameModule{ns=urn:ietf:params:xml:ns:yang:ietf-ip, rev=2018-02-22}" -> ip
{QNameModule@3003} "QNameModule{ns=urn:ietf:params:xml:ns:yang:ietf-interfaces, rev=2018-02-20}" -> if

this is when it failes and sometimes it returns only

{QNameModule@3008} "QNameModule{ns=urn:ietf:params:xml:ns:yang:ietf-inet-types, rev=2013-07-15}" -> inet
{QNameModule@3011} "QNameModule{ns=urn:ietf:params:xml:ns:yang:ietf-routing, rev=2018-03-13}" -> rt

where we have our rt and parsing will run fine..

 


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