[BGPCEP-420] This exception cause TransationChain Broken,be similar to BGPCEP-393! Created: 24/Mar/16  Updated: 03/Mar/19  Resolved: 12/May/16

Status: Resolved
Project: bgpcep
Component/s: BGP
Affects Version/s: Bugzilla Migration
Fix Version/s: Bugzilla Migration

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

Operating System: Windows
Platform: All


Attachments: Text File ODL框架分析及实战详解.txt    
External issue ID: 5600

 Description   

2016-03-22 19:52:58,757 | WARN | ult-dispatcher-4 | SimpleShardDataTreeCohort | 158 - org.opendaylight.controller.sal-distributed-datastore - 1.2.3.Lithium-SR3 | Store Tx member-1-chn-21-txn-5: Data validation failed for path /(urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2013-09-25)bgp-rib/rib/rib[

{(urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2013-09-25)id=example-bgp-rib}

]/peer/peer[

{(urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2013-09-25)peer-id=bgp://1.1.1.7}

]/adj-rib-out/tables/tables[

{(urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2013-09-25)afi=(urn:opendaylight:params:xml:ns:yang:bgp-linkstate?revision=2015-02-10)linkstate-address-family, (urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2013-09-25)safi=(urn:opendaylight:params:xml:ns:yang:bgp-linkstate?revision=2015-02-10)linkstate-subsequent-address-family}

].
org.opendaylight.yangtools.yang.data.api.schema.tree.ModifiedNodeDoesNotExistException: Node /(urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2013-09-25)bgp-rib/rib/rib[

{(urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2013-09-25)id=example-bgp-rib}

]/peer/peer[

{(urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2013-09-25)peer-id=bgp://1.1.1.7}

]/adj-rib-out/tables/tables[

{(urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2013-09-25)afi=(urn:opendaylight:params:xml:ns:yang:bgp-linkstate?revision=2015-02-10)linkstate-address-family, (urn:opendaylight:params:xml:ns:yang:bgp-rib?revision=2013-09-25)safi=(urn:opendaylight:params:xml:ns:yang:bgp-linkstate?revision=2015-02-10)linkstate-subsequent-address-family}

] does not exist. Cannot apply modification to its children.
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:181)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:124)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:204)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:188)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:124)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:204)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:188)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:124)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:204)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:188)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:124)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:204)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:188)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:124)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:204)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:188)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:124)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:204)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:188)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:124)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:204)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:188)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:124)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkChildPreconditions(AbstractNodeContainerModificationStrategy.java:204)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractNodeContainerModificationStrategy.checkTouchApplicable(AbstractNodeContainerModificationStrategy.java:188)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.checkApplicable(SchemaAwareApplyOperation.java:124)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.RootModificationApplyOperation.checkApplicable(RootModificationApplyOperation.java:72)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.AbstractDataTreeTip.validate(AbstractDataTreeTip.java:38)[64:org.opendaylight.yangtools.yang-data-impl:0.7.3.Lithium-SR3]
at org.opendaylight.controller.cluster.datastore.SimpleShardDataTreeCohort.canCommit(SimpleShardDataTreeCohort.java:48)[158:org.opendaylight.controller.sal-distributed-datastore:1.2.3.Lithium-SR3]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator$CohortEntry.canCommit(ShardCommitCoordinator.java:610)[158:org.opendaylight.controller.sal-distributed-datastore:1.2.3.Lithium-SR3]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.doCanCommit(ShardCommitCoordinator.java:323)[158:org.opendaylight.controller.sal-distributed-datastore:1.2.3.Lithium-SR3]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.handleCanCommit(ShardCommitCoordinator.java:284)[158:org.opendaylight.controller.sal-distributed-datastore:1.2.3.Lithium-SR3]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.handleReadyLocalTransaction(ShardCommitCoordinator.java:256)[158:org.opendaylight.controller.sal-distributed-datastore:1.2.3.Lithium-SR3]
at org.opendaylight.controller.cluster.datastore.Shard.handleReadyLocalTransaction(Shard.java:476)[158:org.opendaylight.controller.sal-distributed-datastore:1.2.3.Lithium-SR3]
at org.opendaylight.controller.cluster.datastore.Shard.onReceiveCommand(Shard.java:231)[158:org.opendaylight.controller.sal-distributed-datastore:1.2.3.Lithium-SR3]
at akka.persistence.UntypedPersistentActor.onReceive(Eventsourced.scala:430)[148:com.typesafe.akka.persistence.experimental:2.3.10]
at org.opendaylight.controller.cluster.common.actor.MeteringBehavior.apply(MeteringBehavior.java:97)[150:org.opendaylight.controller.sal-clustering-commons:1.2.3.Lithium-SR3]
at akka.actor.ActorCell$$anonfun$become$1.applyOrElse(ActorCell.scala:534)[143:com.typesafe.akka.actor:2.3.10]
at akka.persistence.Recovery$State$class.process(Recovery.scala:30)[148:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.ProcessorImpl$$anon$2.process(Processor.scala:103)[148:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.ProcessorImpl$$anon$2.aroundReceive(Processor.scala:114)[148:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.Recovery$class.aroundReceive(Recovery.scala:265)[148:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.UntypedPersistentActor.akka$persistence$Eventsourced$$super$aroundReceive(Eventsourced.scala:428)[148:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.Eventsourced$$anon$2.doAroundReceive(Eventsourced.scala:82)[148:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.Eventsourced$$anon$2.aroundReceive(Eventsourced.scala:78)[148:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.Eventsourced$class.aroundReceive(Eventsourced.scala:369)[148:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.UntypedPersistentActor.aroundReceive(Eventsourced.scala:428)[148:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)[143:com.typesafe.akka.actor:2.3.10]
at akka.actor.ActorCell.invoke(ActorCell.scala:487)[143:com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254)[143:com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.run(Mailbox.scala:221)[143:com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.exec(Mailbox.scala:231)[143:com.typesafe.akka.actor:2.3.10]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)[140:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)[140:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[140:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[140:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
2016-03-22 19:52:58,759 | ERROR | lt-dispatcher-17 | LocalThreePhaseCommitCohort | 158 - org.opendaylight.controller.sal-distributed-datastore - 1.2.3.Lithium-SR3 | Failed to prepare transaction member-1-chn-21-txn-5 on backend



 Comments   
Comment by Milos Fabian [ 24/Mar/16 ]

Could you please retry with latest Lithium SR4 release?
Could you please provide steps to reproduce?

Comment by Geng Xingyuan [ 24/Mar/16 ]

(In reply to Milos Fabian from comment #1)
> Could you please retry with latest Lithium SR4 release?
> Could you please provide steps to reproduce?

Bug still exists in Lithium SR4 & Beryllium!
Cotroller build two bgp neighbors, one enable bgp ls, then exception occur!

I have modified file LocRibWriter.java to avoid this exception,but it's not a good solution!

modified method:
private void fillAdjRibsOut(final DOMDataWriteTransaction tx, final AbstractRouteEntry entry, final NormalizedNode<?, ?> value, final RouteUpdateKey key) {
/*

  • We need to keep track of routers and populate adj-ribs-out, too. If we do not, we need to
  • expose from which client a particular route was learned from in the local RIB, and have
  • the listener perform filtering.
    *
  • We walk the policy set in order to minimize the amount of work we do for multiple peers:
  • if we have two eBGP peers, for example, there is no reason why we should perform the translation
  • multiple times.
    */
    for (final PeerRole role : PeerRole.values()) {
    if(PeerRole.Internal.equals(role)) { continue; }

    final PeerExportGroup peerGroup = this.peerPolicyTracker.getPeerGroup(role);
    if (peerGroup != null) {
    final ContainerNode attributes = entry == null ? null : entry.attributes();
    final PeerId peerId = key.getPeerId();
    final ContainerNode effectiveAttributes = peerGroup.effectiveAttributes(peerId, attributes);
    for (final Entry<PeerId, YangInstanceIdentifier> pid : peerGroup.getPeers()) {
    final YangInstanceIdentifier routeTarget = this.ribSupport.routePath(pid.getValue().node(AdjRibOut.QNAME).node(Tables.QNAME).node(this.tableKey).node(Routes.QNAME), key.getRouteId());
    if (effectiveAttributes != null && value != null && !peerId.equals(pid.getKey())) {
    LOG.debug("Write route {} to peers AdjRibsOut {}", value, pid.getKey());
    ensureParentsByMerge(tx,LogicalDatastoreType.OPERATIONAL, routeTarget);
    tx.put(LogicalDatastoreType.OPERATIONAL, routeTarget, value);
    ensureParentsByMerge(tx,LogicalDatastoreType.OPERATIONAL, routeTarget.node(this.attributesIdentifier));
    tx.put(LogicalDatastoreType.OPERATIONAL, routeTarget.node(this.attributesIdentifier), effectiveAttributes);
    } else {
    LOG.trace("Removing {} from transaction for peer {}", routeTarget, pid.getKey());
    ensureParentsByMerge(tx,LogicalDatastoreType.OPERATIONAL, routeTarget);
    tx.delete(LogicalDatastoreType.OPERATIONAL, routeTarget);
    }
    }
    }
    }
    }
    added method:
    private void ensureParentsByMerge(final DOMDataWriteTransaction tx,final LogicalDatastoreType store,final YangInstanceIdentifier normalizedPath) {
    List<PathArgument> currentArguments = new ArrayList<>();
    DataNormalizationOperation<?> currentOp = legacyToNormalized.getRootOperation();
    Iterator<PathArgument> iterator = normalizedPath.getPathArguments().iterator();
    while (iterator.hasNext()) {
    PathArgument currentArg = iterator.next();
    try

    { currentOp = currentOp.getChild(currentArg); }

    catch (DataNormalizationException e)

    { throw new IllegalArgumentException("Invalid child encountered in path ", e); }

    currentArguments.add(currentArg);
    YangInstanceIdentifier currentPath = YangInstanceIdentifier.create(currentArguments);

tx.merge(store, currentPath, currentOp.createDefault(currentArg));
}
}

Comment by Milos Fabian [ 05/Apr/16 ]

Could you please provide exact steps to reproduce the bug? Thanks.

Comment by Geng Xingyuan [ 13/Apr/16 ]

Attachment ODL框架分析及实战详解.txt has been added with description: wiki

Comment by Ajay L [ 26/Apr/16 ]

Hi Geng,

Can you please provide steps to repro this issue? I notice you added an attachment on 4/13, but it seems to be a wiki page. Did you mean to attach the repro steps as Milos had requested earlier?

You mentioned 2 BGP peers, with one sending BGP-LS info. Can you please attach packet capture on port 179 from the controller host, starting from the time BGP peering is established to the time the error occurs. Also please attach your 41-bgp-example.xml and karaf.log

Thanks
Ajay

Comment by Geng Xingyuan [ 12/May/16 ]

This exception happened occasionally!
We did our best to debug the code, cannot find underlying cause.

If this bug(exception) occur later,I will attach the log.

Comment by Geng Xingyuan [ 12/May/16 ]

It maybe OK while ODL runs on Linux,I dont know the reason.

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