[MDSAL-518] leafref path outside of augmented scope can not be resolved Created: 28/Feb/20  Updated: 11/Dec/23  Resolved: 11/Dec/23

Status: Resolved
Project: mdsal
Component/s: Binding codegen
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Medium
Reporter: Miroslav Kovac Assignee: Robert Varga
Resolution: Won't Do Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Relates
relates to MDSAL-426 Specialize relative leafref types dur... Resolved
relates to MDSAL-528 Failed to find leafref target using s... Resolved

 Description   

The following two models:

module a {
  yang-version 1.1;
  namespace "a";
  prefix a;

  container a-cont {
    leaf a-leaf-cont {
      type string;
    }
    container a-cont2 {
      leaf a-leaf-cont2 {
        type string;
      }
    }
  }
}


module b {
  yang-version 1.1;
  namespace "b";
  prefix b;
  import a {
    prefix a;
  }

  augment "/a:a-cont/a:a-cont2" {
    description
      "An augmentation of a leafref typed leaf with path to outside
       of the augmented scope and back to the module a";
    container b-cont {
      leaf b-aug-leaf {
        type leafref {
          path "../../../a-leaf-cont";
        }
      }
    }
  }
}

result in AbstractTypeProvider.provideTypeForLeafref() failing

 
[ERROR] yang-to-sources: Unable to generate sources with org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl generator
 java.lang.IllegalArgumentException: Failed to find leafref target: ../../../a-leaf-cont in module a (QNameModule{ns=b})
 at com.google.common.base.Preconditions.checkArgument (Preconditions.java:459)
 at org.opendaylight.mdsal.binding.yang.types.AbstractTypeProvider.provideTypeForLeafref (AbstractTypeProvider.java:550)
 at org.opendaylight.mdsal.binding.yang.types.AbstractTypeProvider.javaTypeForLeafrefOrIdentityRef (AbstractTypeProvider.java:299)
 at org.opendaylight.mdsal.binding.yang.types.AbstractTypeProvider.javaTypeForSchemaDefinitionType (AbstractTypeProvider.java:193)
 at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.resolveLeafSchemaNodeAsMethod (AbstractTypeGenerator.java:1350)
 at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.addSchemaNodeToBuilderAsMethod (AbstractTypeGenerator.java:1051)
 at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.resolveDataSchemaNodes (AbstractTypeGenerator.java:1004)
 at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.containerToGenType (AbstractTypeGenerator.java:302)
 at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.addSchemaNodeToBuilderAsMethod (AbstractTypeGenerator.java:1055)
 at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.augSchemaNodeToMethods (AbstractTypeGenerator.java:1032)
 at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.addRawAugmentGenTypeDefinition (AbstractTypeGenerator.java:936)
 at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.addRawAugmentGenTypeDefinition (AbstractTypeGenerator.java:950)
 at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.augmentationToGenTypes (AbstractTypeGenerator.java:801)
 at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.allAugmentsToGenTypes (AbstractTypeGenerator.java:375)
 at java.util.ArrayList.forEach (ArrayList.java:1257)
 at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.<init> (AbstractTypeGenerator.java:203)
 at org.opendaylight.mdsal.binding.generator.impl.CodegenTypeGenerator.<init> (CodegenTypeGenerator.java:32)
 at org.opendaylight.mdsal.binding.generator.impl.BindingGeneratorImpl.generateTypes (BindingGeneratorImpl.java:64)
 at org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl.generateSources (CodeGeneratorImpl.java:70)
 at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.generateSourcesWithOneGenerator (YangToSourcesProcessor.java:383)
 at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.generateSources (YangToSourcesProcessor.java:332)
 at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.conditionalExecute (YangToSourcesProcessor.java:159)
 at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesMojo.execute (YangToSourcesMojo.java:127)
 at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)


 Comments   
Comment by Robert Varga [ 28/Feb/20 ]

Hmm, is that actually a correct YANG model?

      leaf b-aug-leaf {
        type leafref {
          path "../../../a-leaf-cont";
        }
      }

should really be:

      leaf b-aug-leaf {
        type leafref {
          path "../../../a:a-leaf-cont";
        }
      }

i.e. the way it is written it points to b:a-leaf-cont, which obviously does not exist

Comment by Robert Varga [ 11/Dec/23 ]

This is actually a bug in the model. It really points to '../../../b:a-leaf-cont', which does not exist.

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