From: Claudio D. Gasparini Date: Tue, 8 Jan 2019 22:22:39 +0000 (+0100) Subject: Verify dataobject is Route X-Git-Tag: release/neon~29 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=1b2c04efed876b964f4e728067dd5750b67e6a18;p=bgpcep.git Verify dataobject is Route before casting when mapping from Normalized node Change-Id: I4b28b50c42de2c577d325b1f42bd4c435c14592d Signed-off-by: Claudio D. Gasparini --- diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/EffectiveRibInWriter.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/EffectiveRibInWriter.java index 74ec29e975..3d38a30367 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/EffectiveRibInWriter.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/EffectiveRibInWriter.java @@ -257,16 +257,18 @@ final class EffectiveRibInWriter implements PrefixesReceivedCounters, PrefixesIn final YangInstanceIdentifier routesPath = effectiveTablePath.node(childIdentifier); switch (child.getModificationType()) { case DELETE: - case DISAPPEARED: - processDeleteRouteTables(child, childIdentifier, ribSupport, routesPath); - tx.delete(LogicalDatastoreType.OPERATIONAL, routesPath); LOG.debug("Route deleted. routeId={}", routesPath); + processTableChildenDelete(child, childIdentifier, tx, ribSupport, routesPath); + break; + case DISAPPEARED: + LOG.debug("Route disappeared. routeId={}", routesPath); + processTableChildenDelete(child, childIdentifier, tx, ribSupport, routesPath); break; case UNMODIFIED: // No-op break; case SUBTREE_MODIFIED: - processModifiedRouteTables(child, childIdentifier,tx, ribSupport, routesPath, childDataAfter); + processModifiedRouteTables(child, childIdentifier, tx, ribSupport, routesPath, childDataAfter); break; case APPEARED: case WRITE: @@ -279,6 +281,16 @@ final class EffectiveRibInWriter implements PrefixesReceivedCounters, PrefixesIn } } + private void processTableChildenDelete( + final DataTreeCandidateNode child, + final PathArgument childIdentifier, + final DOMDataWriteTransaction tx, + final RIBSupport ribSupport, + final YangInstanceIdentifier routesPath) { + processDeleteRouteTables(child, childIdentifier, ribSupport, routesPath); + tx.delete(LogicalDatastoreType.OPERATIONAL, routesPath); + } + private void processDeleteRouteTables( final DataTreeCandidateNode child, final PathArgument childIdentifier, diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupport.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupport.java index 7e1625f7da..2a5e8e6125 100644 --- a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupport.java +++ b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupport.java @@ -7,6 +7,7 @@ */ package org.opendaylight.protocol.bgp.rib.spi; +import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; @@ -524,7 +525,9 @@ public abstract class AbstractRIBSupport< @Override public R fromNormalizedNode(final YangInstanceIdentifier routePath, final NormalizedNode normalizedNode) { - return (R) this.mappingService.fromNormalizedNode(routePath, normalizedNode).getValue(); + final DataObject node = this.mappingService.fromNormalizedNode(routePath, normalizedNode).getValue(); + verify(node instanceof Route, "node %s is not a Route", node); + return (R) node; } @Override