Uploaded image for project: 'yangtools'
  1. yangtools
  2. YANGTOOLS-756

Yang parser fails with cryptic message when same source is added multiple times

    XMLWordPrintable

Details

    • Bug
    • Status: Resolved
    • Resolution: Done
    • None
    • None
    • None
    • None
    • Operating System: All
      Platform: All

    • 7954

    Description

      Our addressing of YANGTOOLS-728 ensures we do not allow duplicate children to exist. This has an unfortunate side-effect that if we add the same model from multiple sources, like done in sal-rest-connector tests, we fail with:

      org.opendaylight.restconf.jersey.providers.JsonBodyReaderTest Time elapsed: 0.043 sec <<< ERROR!
      org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException: Some of STATEMENT_DEFINITION modifiers for statements were not resolved.
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.propagateException(BuildGlobalContext.java:237)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.loadPhaseStatementsFor(BuildGlobalContext.java:289)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.loadPhaseStatements(BuildGlobalContext.java:280)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.executePhases(BuildGlobalContext.java:199)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.buildEffective(BuildGlobalContext.java:211)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:189)
      at org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseYangSources(YangParserTestUtils.java:123)
      at org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseYangSources(YangParserTestUtils.java:196)
      at org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseYangSources(YangParserTestUtils.java:264)
      at org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseYangSources(YangParserTestUtils.java:246)
      at org.opendaylight.yangtools.yang.test.util.YangParserTestUtils.parseYangSources(YangParserTestUtils.java:212)
      at org.opendaylight.restconf.jersey.providers.JsonBodyReaderTest.initialization(JsonBodyReaderTest.java:75)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
      at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
      at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
      at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
      at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283)
      at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173)
      at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
      at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128)
      at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203)
      at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155)
      at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
      Caused by: org.opendaylight.yangtools.yang.parser.spi.source.SourceException: Error in module 'ietf-yang-library': cannot add '(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2016-06-21)modules-state'. Node name collision: '(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2016-06-21)modules-state' already declared at /home/user/odl/netconf/restconf/sal-rest-connector/target/test-classes/modules/ietf-yang-library@2016-06-21.yang:174:2 [at /home/user/odl/netconf/restconf/sal-rest-connector/target/test-classes/invoke-rpc/ietf-yang-library@2016-06-21.yang:174:2]
      at org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes.addTo(ChildSchemaNodes.java:61)
      at org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes.addTo(ChildSchemaNodes.java:26)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.SimpleNamespaceContext.addTo(SimpleNamespaceContext.java:42)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.NamespaceStorageSupport.addToNs(NamespaceStorageSupport.java:65)
      at org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ContainerStatementImpl$Definition.onStatementAdded(ContainerStatementImpl.java:76)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementDefinitionContext.onStatementAdded(StatementDefinitionContext.java:48)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase.createSubstatement(StatementContextBase.java:368)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.createDeclaredChild(SourceSpecificContext.java:180)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextWriter.startStatement(StatementContextWriter.java:32)
      at org.opendaylight.yangtools.yang.parser.impl.YangStatementParserListenerImpl.enterStatement(YangStatementParserListenerImpl.java:100)
      at org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser$StatementContext.enterRule(YangStatementParser.java:113)
      at org.antlr.v4.runtime.tree.ParseTreeWalker.enterRule(ParseTreeWalker.java:66)
      at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:49)
      at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
      at org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl.writeLinkageAndStatementDefinitions(YangStatementSourceImpl.java:98)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.loadStatements(SourceSpecificContext.java:400)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.loadPhaseStatementsFor(BuildGlobalContext.java:287)
      ... 26 more

      This indicates some amount of disconnect between namespace handling and sources: each source is expected to have its own namespace (or be a submodule).

      We need to check for these kinds of problems and either report a clear message pointing to those sources, or recover by ensuring they are unique (i.e. excluding some of them).

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              ifoltin Igor Foltin
              rovarga Robert Varga
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: