X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgp%2Fpath-selection-mode%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fbgp%2Fmode%2Fimpl%2Fadd%2FAddPathAbstractRouteEntry.java;h=56eab86aeff32fc1cba342d1f7821663efb1e930;hb=0fdeddbe3d072a88428599421191f0f60b2864e4;hp=c73d63c23580c0221acdcd1327ca2a00661e1d39;hpb=25ef3d478a6c6291503a8526dad11b884d7b3e19;p=bgpcep.git diff --git a/bgp/path-selection-mode/src/main/java/org/opendaylight/protocol/bgp/mode/impl/add/AddPathAbstractRouteEntry.java b/bgp/path-selection-mode/src/main/java/org/opendaylight/protocol/bgp/mode/impl/add/AddPathAbstractRouteEntry.java index c73d63c235..56eab86aef 100644 --- a/bgp/path-selection-mode/src/main/java/org/opendaylight/protocol/bgp/mode/impl/add/AddPathAbstractRouteEntry.java +++ b/bgp/path-selection-mode/src/main/java/org/opendaylight/protocol/bgp/mode/impl/add/AddPathAbstractRouteEntry.java @@ -18,7 +18,6 @@ import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; -import javax.annotation.concurrent.NotThreadSafe; import org.opendaylight.protocol.bgp.mode.api.RouteEntry; import org.opendaylight.protocol.bgp.mode.impl.BestPathStateImpl; import org.opendaylight.protocol.bgp.rib.spi.RIBSupport; @@ -27,7 +26,7 @@ import org.opendaylight.protocol.bgp.rib.spi.entry.ActualBestPathRoutes; import org.opendaylight.protocol.bgp.rib.spi.entry.AdvertizedRoute; import org.opendaylight.protocol.bgp.rib.spi.entry.RouteEntryInfo; import org.opendaylight.protocol.bgp.rib.spi.entry.StaleBestPathRoute; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.PathId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.PathId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.Route; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes; @@ -36,33 +35,70 @@ import org.opendaylight.yangtools.yang.binding.ChoiceIn; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.Identifiable; import org.opendaylight.yangtools.yang.binding.Identifier; +import org.opendaylight.yangtools.yang.common.Uint32; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * A single route entry inside a route table. Maintains the attributes of - * from all contributing peers. The information is stored in arrays with a - * shared map of offsets for peers to allow lookups. This is needed to - * maintain low memory overhead in face of large number of routes and peers, - * where individual object overhead becomes the dominating factor. + * A single route entry inside a route table. Maintains the attributes from all contributing peers. The information is + * stored in arrays with a shared map of offsets for peers to allow lookups. This is needed to maintain low memory + * overhead in face of large number of routes and peers, where individual object overhead becomes the dominating factor. + * + *

+ * This class is NOT thread-safe. */ -@NotThreadSafe public abstract class AddPathAbstractRouteEntry, - S extends ChildOf, - R extends Route & ChildOf & Identifiable, I extends Identifier> + S extends ChildOf, R extends Route & ChildOf & Identifiable, I extends Identifier> implements RouteEntry { + private static final class Stale, + S extends ChildOf, R extends Route & ChildOf & Identifiable, + I extends Identifier> extends StaleBestPathRoute { + private final List addPathRouteKeyIdentifier; + private final List staleRouteKeyIdentifier; + private final boolean isNonAddPathBestPathNew; + + Stale(final RIBSupport ribSupport, final String routeKey, final List staleRoutesPathIds, + final List withdrawalRoutePathIds, final boolean isNonAddPathBestPathNew) { + super(ribSupport.createRouteListKey(routeKey)); + this.isNonAddPathBestPathNew = isNonAddPathBestPathNew; + + this.staleRouteKeyIdentifier = staleRoutesPathIds.stream() + .map(pathId -> ribSupport.createRouteListKey(pathId, routeKey)).collect(Collectors.toList()); + if (withdrawalRoutePathIds != null) { + this.addPathRouteKeyIdentifier = withdrawalRoutePathIds.stream() + .map(pathId -> ribSupport.createRouteListKey(pathId, routeKey)).collect(Collectors.toList()); + } else { + this.addPathRouteKeyIdentifier = Collections.emptyList(); + } + } + + @Override + public List getStaleRouteKeyIdentifiers() { + return this.staleRouteKeyIdentifier; + } + + @Override + public List getAddPathRouteKeyIdentifiers() { + return addPathRouteKeyIdentifier; + } + + @Override + public boolean isNonAddPathBestPathNew() { + return isNonAddPathBestPathNew; + } + } private static final Logger LOG = LoggerFactory.getLogger(AddPathAbstractRouteEntry.class); - private static final Long[] EMPTY_PATHS_ID = new Long[0]; + private static final Uint32[] EMPTY_PATHS_ID = new Uint32[0]; private static final Route[] EMPTY_VALUES = new Route[0]; private RouteKeyOffsets offsets = RouteKeyOffsets.EMPTY; private R[] values = (R[]) EMPTY_VALUES; - private Long[] pathsId = EMPTY_PATHS_ID; + private Uint32[] pathsId = EMPTY_PATHS_ID; private List bestPath; private List bestPathRemoved; private List newBestPathToBeAdvertised; - private List removedPathsId; + private List removedPathsId; private long pathIdCounter = 0L; private boolean isNonAddPathBestPathNew; @@ -75,18 +111,18 @@ public abstract class AddPathAbstractRouteEntry stalePaths; if (bestPathRemoved != null && !bestPathRemoved.isEmpty()) { - stalePaths = bestPathRemoved.stream().map(AddPathBestPath::getPathId) + stalePaths = bestPathRemoved.stream().map(AddPathBestPath::getPathIdLong) .map(AddPathAbstractRouteEntry::pathIdObj).collect(Collectors.toList()); bestPathRemoved = null; } else { @@ -129,8 +165,7 @@ public abstract class AddPathAbstractRouteEntry(ribSupport, routeKey, stalePaths, - removedPaths, this.isNonAddPathBestPathNew)); + : Optional.of(new Stale<>(ribSupport, routeKey, stalePaths, removedPaths, isNonAddPathBestPathNew)); } @Override @@ -186,7 +221,7 @@ public abstract class AddPathAbstractRouteEntry