import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import java.util.Collections;
+import com.google.common.util.concurrent.FluentFuture;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryImportParameters;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.AfiSafiType;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.policy.types.rev151009.MatchSetOptionsRestrictedType;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.OpenconfigRoutingPolicyData;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.generic.defined.sets.NeighborSets;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.neighbor.set.NeighborSet;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.neighbor.set.NeighborSetKey;
*/
public final class MatchBgpNeighborSetHandler
implements BgpConditionsAugmentationPolicy<MatchBgpNeighborCondition, Void> {
- private static final InstanceIdentifier<NeighborSets> NEIGHBOR_SET_IID
- = InstanceIdentifier.create(RoutingPolicy.class)
+ private static final InstanceIdentifier<NeighborSets> NEIGHBOR_SET_IID =
+ InstanceIdentifier.builderOfInherited(OpenconfigRoutingPolicyData.class, RoutingPolicy.class).build()
.child(DefinedSets.class)
.child(NeighborSets.class);
private final DataBroker dataBroker;
private final LoadingCache<String, List<PeerId>> peerSets = CacheBuilder.newBuilder()
- .build(new CacheLoader<String, List<PeerId>>() {
+ .build(new CacheLoader<>() {
@Override
public List<PeerId> load(final String key) throws ExecutionException, InterruptedException {
return loadRoleSets(key);
this.dataBroker = requireNonNull(dataBroker);
}
- @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",
- justification = "https://github.com/spotbugs/spotbugs/issues/811")
private List<PeerId> loadRoleSets(final String key) throws ExecutionException, InterruptedException {
- final ReadTransaction tr = this.dataBroker.newReadOnlyTransaction();
- final Optional<NeighborSet> result = tr.read(LogicalDatastoreType.CONFIGURATION,
- NEIGHBOR_SET_IID.child(NeighborSet.class, new NeighborSetKey(key))).get();
- if (!result.isPresent()) {
- return Collections.emptyList();
+ final FluentFuture<Optional<NeighborSet>> future;
+ try (ReadTransaction tr = dataBroker.newReadOnlyTransaction()) {
+ future = tr.read(LogicalDatastoreType.CONFIGURATION,
+ NEIGHBOR_SET_IID.child(NeighborSet.class, new NeighborSetKey(key)));
+
}
- return result.get().getNeighbor().values().stream()
- .map(nei -> RouterIds.createPeerId(nei.getAddress()))
- .collect(Collectors.toList());
+ return future.get().map(neighboursSet -> neighboursSet.getNeighbor().values().stream()
+ .map(nei -> RouterIds.createPeerId(nei.getAddress()))
+ .collect(Collectors.toUnmodifiableList())).orElse(List.of());
}
@Override
public boolean matchImportCondition(
- final Class<? extends AfiSafiType> afiSafi,
+ final AfiSafiType afiSafi,
final RouteEntryBaseAttributes routeEntryInfo,
final BGPRouteEntryImportParameters importParameters,
final Void nonAttributres,
@Override
public boolean matchExportCondition(
- final Class<? extends AfiSafiType> afiSafi,
+ final AfiSafiType afiSafi,
final RouteEntryBaseAttributes routeEntryInfo,
final BGPRouteEntryExportParameters exportParameters,
final Void nonAttributres,
final String neighborSetName,
final PeerId peerId,
final MatchSetOptionsRestrictedType matchSetOptions) {
- final List<PeerId> roles = this.peerSets.getUnchecked(StringUtils
+ final List<PeerId> roles = peerSets.getUnchecked(StringUtils
.substringBetween(neighborSetName, "=\"", "\""));
final boolean found = roles.contains(peerId);