From b4657f9d04a5e0d30fa6d275ef933c420d9016c8 Mon Sep 17 00:00:00 2001 From: Ajay Date: Fri, 2 Sep 2016 06:10:59 +0000 Subject: [PATCH] Bug-6621: ModifiedNodeDoesNotExistException encountered while building Linkstate topology - added null check in BGP topology builder removeObject() method to gracefully handle issue created by BUG-6577 - when destroying operational topology to recover from a failure, flush the internally stored topology info as well so that both are in sync Change-Id: Id239d74738d43dd63177aa3b2ba1d3d9136c3338 Signed-off-by: Ajay --- .../provider/AbstractReachabilityTopologyBuilder.java | 10 ++++++++++ .../bgp/topology/provider/AbstractTopologyBuilder.java | 3 +++ .../topology/provider/LinkstateTopologyBuilder.java | 10 ++++++++++ 3 files changed, 23 insertions(+) diff --git a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractReachabilityTopologyBuilder.java b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractReachabilityTopologyBuilder.java index 2914a3ec06..111f48ca82 100644 --- a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractReachabilityTopologyBuilder.java +++ b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractReachabilityTopologyBuilder.java @@ -142,6 +142,11 @@ abstract class AbstractReachabilityTopologyBuilder extends Abst @Override protected final void removeObject(final ReadWriteTransaction trans, final InstanceIdentifier id, final T value) { + if (value == null) { + LOG.error("Empty before-data received in delete data change notification for instance id {}", id); + return; + } + final NodeId ni = advertizingNode(getAttributes(value)); if (ni == null) { return; @@ -174,4 +179,9 @@ abstract class AbstractReachabilityTopologyBuilder extends Abst } } } + + @Override + protected void clearTopology() { + this.nodes.clear(); + } } diff --git a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractTopologyBuilder.java b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractTopologyBuilder.java index 356060becc..de1070ab83 100644 --- a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractTopologyBuilder.java +++ b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractTopologyBuilder.java @@ -140,6 +140,8 @@ public abstract class AbstractTopologyBuilder implements AutoCl protected abstract void removeObject(ReadWriteTransaction trans, InstanceIdentifier id, T value); + protected abstract void clearTopology(); + @Override public final InstanceIdentifier getInstanceIdentifier() { return this.topology; @@ -259,6 +261,7 @@ public abstract class AbstractTopologyBuilder implements AutoCl } catch (final TransactionCommitFailedException e) { LOG.error("Unable to reset operational topology {} (transaction {})", this.topology, trans.getIdentifier(), e); } + clearTopology(); } /** diff --git a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateTopologyBuilder.java b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateTopologyBuilder.java index 05b727481a..97434d7916 100644 --- a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateTopologyBuilder.java +++ b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateTopologyBuilder.java @@ -925,6 +925,11 @@ public class LinkstateTopologyBuilder extends AbstractTopologyBuilder id, final LinkstateRoute value) { + if (value == null) { + LOG.error("Empty before-data received in delete data change notification for instance id {}", id); + return; + } + final UriBuilder base = new UriBuilder(value); final ObjectType t = value.getObjectType(); @@ -944,4 +949,9 @@ public class LinkstateTopologyBuilder extends AbstractTopologyBuilder getRouteWildcard(final InstanceIdentifier tablesId) { return tablesId.child((Class)LinkstateRoutes.class).child(LinkstateRoute.class); } + + @Override + protected void clearTopology() { + this.nodes.clear(); + } } -- 2.36.6