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

Unexpected error while processing submodule references

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Medium Medium
    • 10.0.0, 8.0.7, 9.0.1
    • 9.0.0, 8.0.5, 7.0.17
    • parser
    • None

      Building effective model fails for some OpenConfig models because of unresolved EFFECTIVE_MODEL modifiers cause by VerifyException.

      For example, yang-model-validator generates the following errors for openconfig-network-instance.yang:

      $ java -jar "$YANGTOOLS/tools/yang-model-validator/target/yang-model-validator-9.0.0-SNAPSHOT-jar-with-dependencies.jar" \
       --recursive --path "$OPENCONFIG/release/models:$YANG_MODELS/standard/iana:$YANG_MODELS/standard/ietf" \
      "$OPENCONFIG/release/models/network-instance/openconfig-network-instance.yang"
      
      22:36:43.765 [main] WARN org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext - Unexpected error processing source SourceIdentifier [openconfig-network-instance@2022-04-20]. Please file an issue with this model attached.
      com.google.common.base.VerifyException: expected a non-null reference
      	at com.google.common.base.Verify.verifyNotNull(Verify.java:503)
      	at com.google.common.base.Verify.verifyNotNull(Verify.java:479)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.AbstractResumedStatement.mutableDeclaredSubstatements(AbstractResumedStatement.java:65)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.RootStatementContext.mutableDeclaredSubstatements(RootStatementContext.java:49)
      	at org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext$Mutable.declaredSubstatements(StmtContext.java:236)
      	at org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.getRootModuleQName(StmtContextUtils.java:560)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.moduleName(ReactorStmtCtx.java:240)
      	at org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment.AbstractAugmentStatementSupport.lambda$new$0(AbstractAugmentStatementSupport.java:57)
      	at org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport$StatementPolicy$EqualSemantics.canReuseCurrent(StatementSupport.java:171)
      	at org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport.canReuseCurrent(StatementSupport.java:276)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.tryToReusePrototype(InferredStatementContext.java:239)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.createEffective(InferredStatementContext.java:219)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase.createEffective(StatementContextBase.java:426)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.loadEffective(ReactorStmtCtx.java:389)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.buildEffective(ReactorStmtCtx.java:385)
      	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
      	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
      	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
      	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
      	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
      	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
      	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
      	at org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport.buildEffectiveSubstatements(AbstractStatementSupport.java:139)
      	at org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport.createEffective(AbstractStatementSupport.java:83)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.AbstractResumedStatement.createEffective(AbstractResumedStatement.java:125)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.AbstractResumedStatement.createInferredEffective(AbstractResumedStatement.java:132)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.createInferredEffective(InferredStatementContext.java:230)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.createInferredEffective(InferredStatementContext.java:223)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.tryToReuseSubstatements(InferredStatementContext.java:307)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.tryToReusePrototype(InferredStatementContext.java:240)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.createEffective(InferredStatementContext.java:219)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase.createEffective(StatementContextBase.java:426)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.loadEffective(ReactorStmtCtx.java:389)
      	at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.buildEffective(ReactorStmtCtx.java:385)
      	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
      	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
      	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
      	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
      	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
      	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
      	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
          ...
      

      $YANGTOOLS: path for yangtools repository
      $OPENCONFIG: path for OpenConfig public repository
      $YANG_MODELS: path for YangModels yang repository

      Attached is the DEBUG output of the command.

      A couple observations:

      • This build issue depends on the environment. Even with the same container image with Maven & JDK pre-installed on top of RHEL8 UBI (Universal Base Image), validation result was not consistent across different container hosts. For example, openconfig-network-instance.yang was built successfully on Alpine Linux (Linux 5.15.32) VM on macOS but not on RHEL 7 (Linux 3.10.0) or RHEL 8 (Linux 4.18.0) VM.
      • This inconsistent behavior was found for master, 8.0.x & 7.0.x branches but not for 6.0.x.

            rovarga Robert Varga
            sangwookha Sangwook Ha
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: