[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: 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: 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: 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: 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. |