X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgp%2Frib-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fbgp%2Frib%2Fimpl%2FBGPPeer.java;h=d62e6498cc8dfb3a9b09d2034a13f4c74c6b4544;hb=22895faa7e282c28a06ef4f1b95d431697774958;hp=858de61cce58f879ca5ce845624c7259a31bc4a5;hpb=fe8217050d67666bb2ffd8d6ee3bdcfd52867d6d;p=bgpcep.git diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPPeer.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPPeer.java index 858de61cce..d62e6498cc 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPPeer.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPPeer.java @@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.google.common.util.concurrent.FluentFuture; +import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @@ -39,9 +40,6 @@ import org.checkerframework.checker.lock.qual.Holding; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.api.RpcProviderService; import org.opendaylight.mdsal.common.api.CommitInfo; -import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction; -import org.opendaylight.mdsal.dom.api.DOMTransactionChain; -import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener; import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer; import org.opendaylight.protocol.bgp.parser.BGPDocumentedException; import org.opendaylight.protocol.bgp.parser.BGPError; @@ -85,7 +83,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mult import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.attributes.unreach.mp.unreach.nlri.WithdrawnRoutesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapability; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.add.path.capability.AddressFamilies; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.peer.rpc.rev180329.BgpPeerRpcService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.peer.rpc.rev180329.ResetSession; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.peer.rpc.rev180329.RestartGracefully; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.peer.rpc.rev180329.RouteRefreshRequest; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.PeerRole; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.rib.PeerKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey; @@ -93,10 +93,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.type import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.RouteTarget; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily; -import org.opendaylight.yangtools.concepts.ObjectRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.opendaylight.yangtools.yang.binding.Notification; +import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.slf4j.Logger; @@ -143,7 +143,7 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener { private AdjRibInWriter ribWriter; @GuardedBy("this") private EffectiveRibInWriter effRibInWriter; - private ObjectRegistration rpcRegistration; + private Registration rpcRegistration; private ImmutableMap addPathTableMaps = ImmutableMap.of(); // FIXME: This should be a constant co-located with ApplicationPeer.peerId private YangInstanceIdentifier peerPath; @@ -167,12 +167,14 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener { final Set afiSafisGracefulAdvertized, final Map llGracefulTablesAdvertised, final BgpPeer bgpPeer) { - super(rib, Ipv4Util.toStringIP(neighborAddress), peerGroupName, role, clusterId, - localAs, neighborAddress, afiSafisAdvertized, afiSafisGracefulAdvertized, llGracefulTablesAdvertised); + super(rib, Ipv4Util.toStringIP(neighborAddress), peerGroupName, role, clusterId, localAs, neighborAddress, + afiSafisAdvertized, afiSafisGracefulAdvertized, llGracefulTablesAdvertised); this.tableTypeRegistry = requireNonNull(tableTypeRegistry); this.rib = requireNonNull(rib); this.rpcRegistry = rpcRegistry; this.bgpPeer = bgpPeer; + + createDomChain(); } private static Attributes nextHopToAttribute(final Attributes attrs, final MpReachNlri mpReach) { @@ -364,15 +366,16 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener { currentSession = session; sessionUp = true; - ribOutChain = rib.createPeerDOMChain(new DOMTransactionChainListener() { + final var chain = rib.createPeerDOMChain(); + ribOutChain = chain; + chain.addCallback(new FutureCallback() { @Override - public void onTransactionChainSuccessful(final DOMTransactionChain chain) { + public void onSuccess(final Empty result) { LOG.debug("RibOut transaction chain {} successful.", chain); } @Override - public void onTransactionChainFailed(final DOMTransactionChain chain, - final DOMDataTreeTransaction transaction, final Throwable cause) { + public void onFailure(final Throwable cause) { onRibOutChainFailed(cause); } }); @@ -416,10 +419,14 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener { tables, addPathTableMaps); if (rpcRegistry != null) { - rpcRegistration = rpcRegistry.registerRpcImplementation(BgpPeerRpcService.class, - new BgpPeerRpc(this, session, tables), ImmutableSet.of(rib.getInstanceIdentifier().child( - org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.rib - .Peer.class, new PeerKey(peerId)))); + final var bgpPeerHandler = new BgpPeerRpc(this, session, tables); + rpcRegistration = rpcRegistry.registerRpcImplementations(List.of( + (ResetSession) bgpPeerHandler::resetSession, + (RestartGracefully) bgpPeerHandler::restartGracefully, + (RouteRefreshRequest) bgpPeerHandler::routeRefreshRequest), ImmutableSet.of( + rib.getInstanceIdentifier().child( + org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib + .rib.Peer.class, new PeerKey(peerId)))); } } else { final Set forwardingTables; @@ -490,10 +497,10 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener { } private synchronized void createEffRibInWriter() { - effRibInWriter = new EffectiveRibInWriter(this, rib, - rib.createPeerDOMChain(this), - peerPath, tables, tableTypeRegistry, - rtMemberships, + final var chain = rib.createPeerDOMChain(); + chain.addCallback(this); + + effRibInWriter = new EffectiveRibInWriter(this, rib, chain, peerPath, tables, tableTypeRegistry, rtMemberships, rtCache); } @@ -513,10 +520,8 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener { // not particularly nice if (ribSupport != null && currentSession instanceof BGPSessionImpl bgpSession) { - final ChannelOutputLimiter limiter = bgpSession.getLimiter(); - final AdjRibOutListener adjRibOut = AdjRibOutListener.create(peerId, key, - rib.getYangRibId(), rib.getCodecsRegistry(), ribSupport, - rib.getService(), limiter, mpSupport); + final AdjRibOutListener adjRibOut = AdjRibOutListener.create(peerId, rib.getYangRibId(), + rib.getCodecsRegistry(), ribSupport, rib.getService(), bgpSession.getLimiter(), mpSupport); adjRibOutListenerSet.put(key, adjRibOut); registerPrefixesSentCounter(key, adjRibOut); } @@ -683,8 +688,7 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener { } @Override - public synchronized void onTransactionChainFailed(final DOMTransactionChain chain, - final DOMDataTreeTransaction transaction, final Throwable cause) { + public synchronized void onFailure(final Throwable cause) { LOG.error("Transaction domChain failed.", cause); releaseConnection(true); }