Do not use RpcService in bgp-rib-impl 00/108400/4
authorlubos-cicut <lubos.cicut@pantheon.tech>
Fri, 13 Oct 2023 14:02:33 +0000 (16:02 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 19 Oct 2023 20:02:31 +0000 (22:02 +0200)
Migrated usage of RpcService to Rpc<?,?> for bgp-rib-impl.

JIRA: BGPCEP-1027
Change-Id: Ic0452314f060fdb9146873c5c2fc0912d6a608de
Signed-off-by: lubos-cicut <lubos.cicut@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPPeer.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BgpPeerRpc.java

index cafce4a4e8253292be06bd01a974ed4bbb2b52af..7ea1f2e41d15adff1c59ccdd5ec966e42216accb 100644 (file)
@@ -16,6 +16,7 @@ import com.google.common.base.Stopwatch;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
@@ -85,7 +86,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 +96,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.binding.Rpc;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.slf4j.Logger;
@@ -143,7 +146,7 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener {
     private AdjRibInWriter ribWriter;
     @GuardedBy("this")
     private EffectiveRibInWriter effRibInWriter;
-    private ObjectRegistration<BgpPeerRpcService> rpcRegistration;
+    private Registration rpcRegistration;
     private ImmutableMap<TablesKey, SendReceive> addPathTableMaps = ImmutableMap.of();
     // FIXME: This should be a constant co-located with ApplicationPeer.peerId
     private YangInstanceIdentifier peerPath;
@@ -416,8 +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(
+                final var bgpPeerHandler = new BgpPeerRpc(this, session, tables);
+                rpcRegistration = rpcRegistry.registerRpcImplementations(
+                    ImmutableClassToInstanceMap.<Rpc<?, ?>>builder()
+                        .put(ResetSession.class, bgpPeerHandler::resetSession)
+                        .put(RestartGracefully.class, bgpPeerHandler::restartGracefully)
+                        .put(RouteRefreshRequest.class, bgpPeerHandler::routeRefreshRequest)
+                        .build(),
+                    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))));
             }
index 378e8a5117f29e6f8a8be4fb409c342bfee4c796..d89bb43f9516e35dffc0166e18537f97534d4eaa 100644 (file)
@@ -18,9 +18,7 @@ import io.netty.channel.ChannelFuture;
 import java.util.Set;
 import org.opendaylight.protocol.bgp.rib.spi.BGPSession;
 import org.opendaylight.protocol.bgp.rib.spi.PeerRPCs;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.RouteRefresh;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.RouteRefreshBuilder;
-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.ResetSessionInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.peer.rpc.rev180329.ResetSessionOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.peer.rpc.rev180329.ResetSessionOutputBuilder;
@@ -37,11 +35,8 @@ import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class BgpPeerRpc implements BgpPeerRpcService {
-
+final class BgpPeerRpc {
     private static final Logger LOG = LoggerFactory.getLogger(BgpPeerRpc.class);
-    private static final String FAILURE_MSG = "Failed to send Route Refresh message";
-    private static final String FAILURE_RESET_SESSION_MSG = "Failed to reset session";
 
     private final BGPSession session;
     private final Set<TablesKey> supportedFamilies;
@@ -53,21 +48,18 @@ public class BgpPeerRpc implements BgpPeerRpcService {
         this.supportedFamilies = requireNonNull(supportedFamilies);
     }
 
-    @Override
-    public ListenableFuture<RpcResult<ResetSessionOutput>> resetSession(final ResetSessionInput input) {
-        final ListenableFuture<?> f = peerRPCs.releaseConnection();
-        return Futures.transform(f, input1 -> {
-            if (f.isDone()) {
-                return RpcResultBuilder.success(new ResetSessionOutputBuilder().build()).build();
-            }
-            return RpcResultBuilder.<ResetSessionOutput>failed().withError(ErrorType.RPC, FAILURE_RESET_SESSION_MSG)
-                    .build();
-        }, MoreExecutors.directExecutor());
+    ListenableFuture<RpcResult<ResetSessionOutput>> resetSession(final ResetSessionInput input) {
+        final var f = peerRPCs.releaseConnection();
+        return Futures.transform(f,
+            input1 -> f.isDone() ? RpcResultBuilder.success(new ResetSessionOutputBuilder().build()).build()
+                : RpcResultBuilder.<ResetSessionOutput>failed()
+                    .withError(ErrorType.RPC, "Failed to reset session")
+                    .build(),
+            MoreExecutors.directExecutor());
     }
 
-    @Override
-    public ListenableFuture<RpcResult<RestartGracefullyOutput>> restartGracefully(final RestartGracefullyInput input) {
-        final SettableFuture<RpcResult<RestartGracefullyOutput>> ret = SettableFuture.create();
+    ListenableFuture<RpcResult<RestartGracefullyOutput>> restartGracefully(final RestartGracefullyInput input) {
+        final var ret = SettableFuture.<RpcResult<RestartGracefullyOutput>>create();
         Futures.addCallback(peerRPCs.restartGracefully(input.getSelectionDeferralTime().toJava()),
             new FutureCallback<Object>() {
                 @Override
@@ -85,22 +77,20 @@ public class BgpPeerRpc implements BgpPeerRpcService {
         return ret;
     }
 
-    @Override
-    public ListenableFuture<RpcResult<RouteRefreshRequestOutput>> routeRefreshRequest(
-            final RouteRefreshRequestInput input) {
-        final ChannelFuture f = sendRRMessage(input);
+    ListenableFuture<RpcResult<RouteRefreshRequestOutput>> routeRefreshRequest(final RouteRefreshRequestInput input) {
+        final var f = sendRRMessage(input);
         if (f == null) {
             return RpcResultBuilder.<RouteRefreshRequestOutput>failed().withError(ErrorType.RPC,
-                FAILURE_MSG + " due to unsupported address families.").buildFuture();
+                "Failed to send Route Refresh message due to unsupported address families.").buildFuture();
         }
 
-        final SettableFuture<RpcResult<RouteRefreshRequestOutput>> ret = SettableFuture.create();
-        f.addListener(future -> {
-            ret.set(future.isSuccess()
-                ? RpcResultBuilder.success(new RouteRefreshRequestOutputBuilder().build()).build()
-                        : RpcResultBuilder.<RouteRefreshRequestOutput>failed().withError(ErrorType.RPC, FAILURE_MSG)
-                        .build());
-        });
+        final var ret = SettableFuture.<RpcResult<RouteRefreshRequestOutput>>create();
+        f.addListener(future -> ret.set(future.isSuccess()
+            ? RpcResultBuilder.success(new RouteRefreshRequestOutputBuilder().build()).build()
+                : RpcResultBuilder.<RouteRefreshRequestOutput>failed()
+                    .withError(ErrorType.RPC, "Failed to send Route Refresh message")
+                    .build())
+        );
         return ret;
     }
 
@@ -109,7 +99,7 @@ public class BgpPeerRpc implements BgpPeerRpcService {
             LOG.info("Unsupported afi/safi: {}, {}.", input.getAfi(), input.getSafi());
             return null;
         }
-        final RouteRefresh msg = new RouteRefreshBuilder().setAfi(input.getAfi()).setSafi(input.getSafi()).build();
-        return ((BGPSessionImpl) session).getLimiter().writeAndFlush(msg);
+        return ((BGPSessionImpl) session).getLimiter()
+            .writeAndFlush(new RouteRefreshBuilder().setAfi(input.getAfi()).setSafi(input.getSafi()).build());
     }
 }