[YANGTOOLS-795] Yangtools throws org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException while parsing yang files Created: 07/Jul/17  Updated: 10/Apr/22  Resolved: 07/Aug/17

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

Type: Bug
Reporter: Geng Xingyuan Assignee: Unassigned
Resolution: Cannot Reproduce Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


Attachments: File test-augment-statement1.yang     File test-augment-statement2.yang     File test-augment-statement3.yang    
External issue ID: 8817

 Description   

Including content like below in yang files:
augment "/stateful:pcrpt/stateful:pcrpt-message/stateful:reports/stateful:path"

{ ext:augment-identifier zte-rpt-endpoints; uses pcep:endpoints-object; }

augment "/stateful:pcrpt/stateful:pcrpt-message/stateful:reports/stateful:path/endpoints-obj/address-family" {
ext:augment-identifier rpt-generalized-endpoint-obj;
case generalized-endpoint-obj

{ uses gmpls:generalized-endpoint-object; }

}

Exception:
[ERROR] yang-to-sources: Unable to parse yang files from D:\SDNCODE\Gerrit\tunnel\ipsdn\function\pcep\pcep-adapter-model\src\main\yang
org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException: Some of EFFECTIVE_MODEL modifiers for statements were not resolved.
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.addSourceExceptions(BuildGlobalContext.java:303)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.completePhaseActions(BuildGlobalContext.java:343)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.buildEffective(BuildGlobalContext.java:200)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:128)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:145)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.processYang(YangToSourcesProcessor.java:191)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.execute(YangToSourcesProcessor.java:95)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.conditionalExecute(YangToSourcesProcessor.java:118)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesMojo.execute(YangToSourcesMojo.java:119)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
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.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException: Yang model processing phase EFFECTIVE_MODEL failed [at META-INF\yang\pcep-message-adapter.yang:1:0]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.failModifiers(SourceSpecificContext.java:306)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.addSourceExceptions(BuildGlobalContext.java:268)
... 30 more
Suppressed: org.opendaylight.yangtools.yang.pars

er.spi.meta.InferenceException: Augment target 'Absolute

{path=[(urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful?revision=2013-12-22)pcrpt, (urn:opendaylight:params:xml:ns:yang:pcep:ietf:s tateful?revision=2013-12-22)pcrpt-message, (urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful?revision=2013-12-22)reports, (urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful?revision=2013-12-22)path, (urn:zte.ngip.ipsdn:pcep-message-adapter ?revision=2016-05-30)endpoints-obj, (urn:zte.ngip.ipsdn:pcep-message-adapter?revision=2016-05-30)address-family]}

' not found [at META-INF\yang\pcep-message-adapter.yang:81:4]
at org.opendaylight.yangtools.yang.parser.stmt.rfc6020.AugmentStatementImpl$Definition$1.prerequisiteFailed(AugmentStatementImpl.java:185)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl.failModifier(ModifierImpl.java:93)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.failModifiers(SourceSpecificContext.java:294)
... 31 more
Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException: Augment target 'Absolute

{path=[(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)network-topology, (urn:TBD:params:xml:ns:yang:network-topology?revision=201 3-10-21)topology, (urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)node, (urn:opendaylight:params:xml:ns:yang:topology:pcep?revision=2013-10-24)path-computation-client, (urn:opendaylight:params:xml:ns:yang:topology:pcep?revision=2013- 10-24)reported-lsp, (urn:opendaylight:params:xml:ns:yang:topology:pcep?revision=2013-10-24)path, (urn:zte.ngip.ipsdn:pcep-message-adapter?revision=2016-05-30)endpoints-obj, (urn:zte.ngip.ipsdn:pcep-message-adapter?revision=2016-05-30)address-family]}

' not found [at META-INF\yang\pcep-message-adapter.yang:93:4]
at org.opendaylight.yangtools.yang.parser.stmt.rfc6020.AugmentStatementImpl$Definition$1.prerequisiteFailed(AugmentStatementImpl.java:185)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl.failModifier(ModifierImpl.java:93)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.failModifiers(SourceSpecificContext.java:294)
... 31 more



 Comments   
Comment by Peter Kajsa [ 07/Jul/17 ]

Please can you also attach yang models causing this issue or at least all parts from them required to replication of the bug.

Thanks.

Comment by Jie Han [ 10/Jul/17 ]

Attachment test-augment-statement1.yang has been added with description: test-augment-statement1.yang

Comment by Jie Han [ 10/Jul/17 ]

Attachment test-augment-statement2.yang has been added with description: test-augment-statement2.yang

Comment by Jie Han [ 10/Jul/17 ]

Attachment test-augment-statement3.yang has been added with description: test-augment-statement3.yang

Comment by Jie Han [ 10/Jul/17 ]

Hi guys,
I have pushed three sample yang models.

Comment by Igor Foltin [ 10/Jul/17 ]

Hi,

I looked at the 3 sample YANGs you provided and here's what's wrong with them.

The problem lies in the module test-augment-statement3 in the augment target path:

augment "/s1:top/s1:bar2" {
container cont-s3-aug {
}
}

The bar2 node should actually be prefixed with s2. This node was augmented into the s1:top container node from the test-augment-statement2 module
which means it is bound to that module's namespace. So you have to use the prefix of the test-augment-statement2 module.

Comment by Jie Han [ 10/Jul/17 ]

Thanks, that's my mistake. I just did not notice the prefix of the augmented node.
So it seems the same problem of GengXingyuan's yang model,
in:
"augment "/stateful:pcrpt/stateful:pcrpt-message/stateful:reports/stateful:path/endpoints-obj/address-family""
properly before endpoints-obj and address-family, there should be added with the prefix "pcep:".

Comment by Igor Foltin [ 11/Jul/17 ]

Could you please confirm that the problem was solved ? If yes, I would like to close this bug.

Comment by Geng Xingyuan [ 12/Jul/17 ]

Problem remain after using the right prefix.

Comment by Geng Xingyuan [ 26/Jul/17 ]

Because of our maven-repo's error.

Comment by Geng Xingyuan [ 28/Jul/17 ]

module pcep-test {
yang-version 1;

namespace "urn:pcep:test:augment:statement1";
prefix pmsg;
organization "pcep.test.type.org";

import yang-ext

{ prefix ext; revision-date 2013-07-09; }

import pcep-types

{ prefix pcep; revision-date 2013-10-05; }

import odl-pcep-ietf-stateful07

{ prefix stateful; revision-date 2013-12-22; }

revision "2017-07-10";

augment "/stateful:pcrpt/stateful:pcrpt-message/stateful:reports/stateful:path"

{ ext:augment-identifier ext-rpt-endpoints; uses pcep:endpoints-object; }

augment "/stateful:pcrpt/stateful:pcrpt-message/stateful:reports/stateful:path/pcep:endpoints-obj/pcep:address-family" {
ext:augment-identifier rpt-generalized-endpoint-obj;
case pcep-topology-provider {
container pcepaug {
leaf aaa

{ type string; }

}
}
}
}

Comment by Geng Xingyuan [ 28/Jul/17 ]

module pcep-test {
yang-version 1;

namespace "urn:pcep:test:augment:statement1";
prefix pmsg;
organization "pcep.test.type.org";

import yang-ext

{ prefix ext; revision-date 2013-07-09; }

import pcep-types

{ prefix pcep; revision-date 2013-10-05; }

import odl-pcep-ietf-stateful07

{ prefix stateful; revision-date 2013-12-22; }

revision "2017-07-10";

augment "/stateful:pcrpt/stateful:pcrpt-message/stateful:reports/stateful:path"

{ ext:augment-identifier ext-rpt-endpoints; uses pcep:endpoints-object; }

augment "/stateful:pcrpt/stateful:pcrpt-message/stateful:reports/stateful:path/endpoints-obj/address-family" {
ext:augment-identifier rpt-generalized-endpoint-obj;
case pcep-topology-provider {
container pcepaug {
leaf aaa

{ type string; }

}
}
}
}

Comment by Geng Xingyuan [ 28/Jul/17 ]

Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException: Augment target 'Absolute

{path=[(urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful?revision=2013-12-22)pcrpt, (urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful?revision=2013-12-22)pcrpt-message, (urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful?revision=2013-12-22)reports, (urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful?revision=2013-12-22)path, (urn:pcep:test:augment:statement1?revision=2017-07-10)endpoints-obj, (urn:pcep:test:augment:statement1?revision=2017-07-10)address-family]}

' not found [at META-INF/yang/pcep-test.yang:19:4]
at org.opendaylight.yangtools.yang.parser.stmt.rfc6020.AugmentStatementImpl$Definition$1.prerequisiteFailed(AugmentStatementImpl.java:187)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl.failModifier(ModifierImpl.java:87)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.failModifiers(SourceSpecificContext.java:341)
... 35 more

code is stable/carbon branch

Comment by Geng Xingyuan [ 28/Jul/17 ]

[ERROR] yang-to-sources: Unable to parse yang files from E:\oscp\netconf\opendaylight\netconf\models\ietf-netconf\src\main\yang
org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException: Some of EFFECTIVE_MODEL modifiers for statements were not resolved.
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.addSourceExceptions(BuildGlobalContext.java:303)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.completePhaseActions(BuildGlobalContext.java:343)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.buildEffective(BuildGlobalContext.java:200)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:128)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:145)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.processYang(YangToSourcesProcessor.java:191)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.execute(YangToSourcesProcessor.java:95)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.conditionalExecute(YangToSourcesProcessor.java:118)
at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesMojo.execute(YangToSourcesMojo.java:119)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
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:497)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException: Yang model processing phase EFFECTIVE_MODEL failed [at META-INF\yang\pcep-test.yang:1:0]
at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.failModifiers(SourceSpecificContext.java:306)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.addSourceExceptions(BuildGlobalContext.java:268)
... 30 more
Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException: Augment target 'Absolute

{path=[(urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful?revision=2013-12-22)pcrpt, (urn:op endaylight:params:xml:ns:yang:pcep:ietf:stateful?revision=2013-12-22)pcrpt-message, (urn:opendaylight:params:xml:ns:yang:pcep:ietf:stateful?revision=2013-12-22)reports, (urn:opendaylight:params:xml:ns :yang:pcep:ietf:stateful?revision=2013-12-22)path, (urn:pcep:test:augment:statement1?revision=2017-07-10)endpoints-obj]}

' not found [at META-INF\yang\pcep-test.yang:19:4]
at org.opendaylight.yangtools.yang.parser.stmt.rfc6020.AugmentStatementImpl$Definition$1.prerequisiteFailed(AugmentStatementImpl.java:185)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl.failModifier(ModifierImpl.java:93)
at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.failModifiers(SourceSpecificContext.java:294)

Comment by Geng Xingyuan [ 28/Jul/17 ]

This is because choice address-family's mandatory is true in pcep-types.yang
after delete "mandatory true;",it's ok.

grouping endpoints {
choice address-family {
mandatory true;

case ipv4-case {
container ipv4 {
leaf source-ipv4-address

{ type inet:ipv4-address; mandatory true; }

leaf destination-ipv4-address

{ type inet:ipv4-address; mandatory true; }

}
}
case ipv6-case {
container ipv6 {
leaf source-ipv6-address

{ type inet:ipv6-address; mandatory true; }

leaf destination-ipv6-address

{ type inet:ipv6-address; mandatory true; }

}
}
}
}

Comment by Peter Kajsa [ 07/Aug/17 ]

So then the first augment below is invalid, because it is augment of the mandatory choice "address-family" into the target node (stateful:path) in another module. Therefore the augment is not performed (please see log, there should be an error or a warn about this)

augment "/stateful:pcrpt/stateful:pcrpt-message/stateful:reports/stateful:path"

{ ext:augment-identifier zte-rpt-endpoints; uses pcep:endpoints-object; }

and in consequence the following second augment below is not resolved, because the choice has not been added by the first augment and the exception was thrown:

augment "/stateful:pcrpt/stateful:pcrpt-message/stateful:reports/stateful:path/endpoints-obj/address-family" {
ext:augment-identifier rpt-generalized-endpoint-obj;
case generalized-endpoint-obj

{ uses gmpls:generalized-endpoint-object; }

}

For more info please see: https://tools.ietf.org/html/rfc6020#section-7.15
"If the target node is in another module, then nodes added by the
augmentation MUST NOT be mandatory nodes (see Section 3.1)."

Therefore I am closing this bug as invalid.

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