[YANGTOOLS-1435] Module name space collision with YANG modules with submodules and groupings from the submodules Created: 20/May/22  Updated: 22/Nov/22

Status: Confirmed
Project: yangtools
Component/s: parser
Affects Version/s: 8.0.5, 7.0.17
Fix Version/s: None

Type: Bug Priority: Low
Reporter: Sangwook Ha Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

When building EffectiveSchemaContext for YANG modules, one with submodules and the other with groupings imported from the submodules, the process may fail with module name space collision.

Following is such an example. There are 2 modules (foo & bar): foo has two submodules (foo-a & foo-b) and bar uses groupings from foo defined in its submodules.

module foo {
    namespace "urn:foo";
    prefix "foo";

    include foo-a;
    include foo-b;

    container foo {
        uses foo-a;
        uses foo-b;
    }
}
submodule foo-a {
    belongs-to foo {
        prefix "foo";
    }

    grouping foo-a {
        leaf a {
            type string;
        }
    }
}
submodule foo-b {
    belongs-to foo {
        prefix "foo";
    }

    grouping foo-b {
        leaf b {
            type string;
        }
    }
}
module bar {
    namespace "urn:bar";
    prefix "bar";

    import foo { prefix "foo"; }

    container bar {
        uses foo:foo-a;
        uses foo:foo-b;
    }
}

Error message while compiling foo and bar:

Caused by: org.opendaylight.yangtools.yang.parser.spi.source.SourceException: Module namespace collision: urn:foo. At /home/jenkins/OpenDaylight/yangtools/parser/yang-parser-rfc7950/target/test-classes/bugs/YT1435/foo.yang:1:1 [at /home/jenkins/OpenDaylight/yangtools/parser/yang-parser-rfc7950/target/test-classes/bugs/YT1435/foo.yang:1:1]
	at org.opendaylight.yangtools.yang.parser.rfc7950@9.0.0-SNAPSHOT/org.opendaylight.yangtools.yang.parser.rfc7950.stmt.module.ModuleStatementSupport.onLinkageDeclared(ModuleStatementSupport.java:173)
	at org.opendaylight.yangtools.yang.parser.reactor@9.0.0-SNAPSHOT/org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementDefinitionContext.onDeclarationFinished(StatementDefinitionContext.java:76)
	at org.opendaylight.yangtools.yang.parser.reactor@9.0.0-SNAPSHOT/org.opendaylight.yangtools.yang.parser.stmt.reactor.OriginalStmtCtx.finishDeclaration(OriginalStmtCtx.java:161)
	at org.opendaylight.yangtools.yang.parser.reactor@9.0.0-SNAPSHOT/org.opendaylight.yangtools.yang.parser.stmt.reactor.AbstractResumedStatement.exitStatement(AbstractResumedStatement.java:227)
	at org.opendaylight.yangtools.yang.parser.reactor@9.0.0-SNAPSHOT/org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextWriter.endStatement(StatementContextWriter.java:79)
	at org.opendaylight.yangtools.yang.parser.rfc7950@9.0.0-SNAPSHOT/org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.doProcessStatement(StatementContextVisitor.java:125)
	at org.opendaylight.yangtools.yang.parser.rfc7950@9.0.0-SNAPSHOT/org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processNewStatement(StatementContextVisitor.java:111)
	at org.opendaylight.yangtools.yang.parser.rfc7950@9.0.0-SNAPSHOT/org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.processStatement(StatementContextVisitor.java:96)
	at org.opendaylight.yangtools.yang.parser.rfc7950@9.0.0-SNAPSHOT/org.opendaylight.yangtools.yang.parser.rfc7950.repo.StatementContextVisitor.visit(StatementContextVisitor.java:46)
	at org.opendaylight.yangtools.yang.parser.rfc7950@9.0.0-SNAPSHOT/org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource.writeLinkage(YangStatementStreamSource.java:104)
	at org.opendaylight.yangtools.yang.parser.reactor@9.0.0-SNAPSHOT/org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.loadStatements(SourceSpecificContext.java:414)
	at org.opendaylight.yangtools.yang.parser.reactor@9.0.0-SNAPSHOT/org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.loadPhaseStatementsFor(BuildGlobalContext.java:300)
	... 46 more


 Comments   
Comment by Sangwook Ha [ 20/May/22 ]

Reproducers

master

Initially all 4 tests passed initially:
https://jenkins.opendaylight.org/releng/job/yangtools-maven-verify-master-mvn38-openjdk17/387/

13:42:18 [INFO] Running org.opendaylight.yangtools.yang.stmt.YT1435Test
13:42:18 [INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.025 s - in org.opendaylight.yangtools.yang.stmt.YT1435Test

However, 2 tests failed in the second build with the last test case skipped:
https://jenkins.opendaylight.org/releng/job/yangtools-maven-verify-master-mvn38-openjdk17/388/

14:09:12 [INFO] Running org.opendaylight.yangtools.yang.stmt.YT1435Test
14:09:12 [ERROR] Tests run: 4, Failures: 0, Errors: 2, Skipped: 1, Time elapsed: 0.022 s <<< FAILURE! - in org.opendaylight.yangtools.yang.stmt.YT1435Test

8.0.x

Initially 3 tests out of 4 failed:
https://jenkins.opendaylight.org/releng/job/yangtools-maven-verify-8.0.x-mvn38-openjdk11/26/

13:41:01 [INFO] Running org.opendaylight.yangtools.yang.stmt.YT1435Test
13:41:01 [ERROR] Tests run: 4, Failures: 0, Errors: 3, Skipped: 0, Time elapsed: 0.035 s <<< FAILURE! - in org.opendaylight.yangtools.yang.stmt.YT1435Test

But 2 tests failed in the second build without any change:
https://jenkins.opendaylight.org/releng/job/yangtools-maven-verify-8.0.x-mvn38-openjdk11/27/

14:04:24 [INFO] Running org.opendaylight.yangtools.yang.stmt.YT1435Test
14:04:25 [ERROR] Tests run: 4, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.03 s <<< FAILURE! - in org.opendaylight.yangtools.yang.stmt.YT1435Test
Comment by Robert Varga [ 25/May/22 ]

So the assumption here is that a source is either in library or main source, with nominally no overlap between the two. Reactor is not equipped to handle multiple sources for a particular

{module,submodule}

+revision – that is a higher-level construct in yang.repo.api, which picks one of the sources based on availability.
I agree the failures should be consistent, though.

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