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

Reactor failure with OpenROADM models

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Highest Highest
    • 7.0.4
    • 7.0.0, 7.0.3
    • parser

      The reference counting machinery introduced in yang-parser-reactor seems to have a hole triggered by OpenROADM models.

      This is evident in https://git.opendaylight.org/gerrit/c/transportpce/+/96939 , where we end up with the following splat:

      [WARNING] Unexpected error processing source RevisionSourceIdentifier [name=org-openroadm-de-operations@2020-05-29]. Please file an issue with this model attached.
      com.google.common.base.VerifyException: Attempted to access reference count of SubstatementContext{definition=StatementDefinitionContext{statement=(urn:ietf:params:xml:ns:yang:yin:1)type}, rawArgument=string}
          at com.google.common.base.Verify.verify (Verify.java:181)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.incRef (ReactorStmtCtx.java:686)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReplicaStatementContext.<init> (ReplicaStatementContext.java:42)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase.replicaAsChildOf (StatementContextBase.java:825)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.lambda$reusePrototypeReplicas$5 (InferredStatementContext.java:312)
          at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:195)
          at java.util.stream.ReferencePipeline$2$1.accept (ReferencePipeline.java:177)
          at java.util.Iterator.forEachRemaining (Iterator.java:133)
          at java.util.Spliterators$IteratorSpliterator.forEachRemaining (Spliterators.java:1801)
          at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:484)
          at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:474)
          at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining (StreamSpliterators.java:312)
          at com.google.common.collect.CollectSpliterators$FlatMapSpliterator.lambda$forEachRemaining$1 (CollectSpliterators.java:361)
          at java.util.Spliterators$ArraySpliterator.forEachRemaining (Spliterators.java:948)
          at com.google.common.collect.CollectSpliterators$FlatMapSpliterator.forEachRemaining (CollectSpliterators.java:357)
          at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:484)
          at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:474)
          at java.util.stream.ReduceOps$ReduceOp.evaluateSequential (ReduceOps.java:913)
          at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
          at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:578)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.reusePrototypeReplicas (InferredStatementContext.java:316)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.reusePrototypeReplicas (InferredStatementContext.java:306)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.tryToReuseSubstatements (InferredStatementContext.java:287)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.tryToReusePrototype (InferredStatementContext.java:228)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.InferredStatementContext.createEffective (InferredStatementContext.java:217)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase.createEffective (StatementContextBase.java:412)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.loadEffective (ReactorStmtCtx.java:382)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.buildEffective (ReactorStmtCtx.java:372)
          at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:195)
          at java.util.ArrayList$ArrayListSpliterator.forEachRemaining (ArrayList.java:1655)
          at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:484)
          at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:474)
          at java.util.stream.ReduceOps$ReduceOp.evaluateSequential (ReduceOps.java:913)
          at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
          at java.util.stream.ReferencePipeline.collect (ReferencePipeline.java:578)
          at org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport.buildEffectiveSubstatements (AbstractStatementSupport.java:141)
          at org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport.createEffective (AbstractStatementSupport.java:85)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase.createEffective (StatementContextBase.java:426)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase.createEffective (StatementContextBase.java:420)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase.createEffective (StatementContextBase.java:412)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.loadEffective (ReactorStmtCtx.java:382)
          at org.opendaylight.yangtools.yang.parser.stmt.reactor.ReactorStmtCtx.buildEffective (ReactorStmtCtx.java:372)
      

      i.e. we are trying to increment reference count on a statement which has had its processing completed:

              verify(current >= REFCOUNT_NONE, "Attempted to access reference count of %s", this);
      

      The error reproduces most of the time, but the reported model may differ. With some luck the assembly may even finish without an issue.

            rovarga Robert Varga
            rovarga Robert Varga
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: