Do not use RpcService in TPCE networkmodel module 98/107998/4
authorGilles Thouenon <gilles.thouenon@orange.com>
Wed, 27 Sep 2023 15:59:37 +0000 (17:59 +0200)
committerGilles Thouenon <gilles.thouenon@orange.com>
Fri, 29 Sep 2023 09:57:41 +0000 (11:57 +0200)
Migrate usage of RpcService to the new style yang.binding.Rpc-based
implementation for networkmodel module.

JIRA: TRNSPRTPCE-752
Signed-off-by: Gilles Thouenon <gilles.thouenon@orange.com>
Change-Id: Ia0e3e31b59b9b319b7431ff9d739274a2dfaccf5

lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkModelProviderTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImplTest.java [new file with mode: 0644]

index f3b37acb46f2b8c189072049dfc344db3ed1880a..f0f17c0a74011d303db83b4eda3499da448d547c 100644 (file)
@@ -123,14 +123,13 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
         new PortMappingListener(networkModelService);
         var lgServRPS = lightyServices.getRpcProviderService();
         var lgServNS = lightyServices.getNotificationService();
+        new NetworkUtilsImpl(lgServBDB, lgServRPS);
         networkModelProvider = new NetworkModelProvider(
                 networkTransaction,
                 lgServBDB,
-                lgServRPS,
                 networkModelService, deviceTransactionManager, portMapping,
                 lgServNS,
-                new FrequenciesServiceImpl(lgServBDB),
-                new NetworkUtilsImpl(lgServBDB));
+                new FrequenciesServiceImpl(lgServBDB));
 
         LOG.info("Creating PCE beans ...");
         // TODO: pass those parameters through command line
index 0eafd00f110bdccfff67998b72a647e4278a1ac1..d1ef447cb756fc213f5448b6426428917c9710a7 100644 (file)
@@ -9,11 +9,9 @@ package org.opendaylight.transportpce.networkmodel;
 
 import java.util.ArrayList;
 import java.util.List;
-import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.NotificationService;
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.InstanceIdentifiers;
 import org.opendaylight.transportpce.common.NetworkUtils;
@@ -25,7 +23,6 @@ import org.opendaylight.transportpce.networkmodel.listeners.ServiceHandlerListen
 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
 import org.opendaylight.transportpce.networkmodel.util.TpceNetwork;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.TransportpceServicehandlerListener;
@@ -50,11 +47,8 @@ public class NetworkModelProvider {
         .child(Mapping.class);
 
     private final DataBroker dataBroker;
-    private final RpcProviderService rpcProviderService;
-    private final TransportpceNetworkutilsService networkutilsService;
     private final NetConfTopologyListener topologyListener;
     private List<Registration> listeners;
-    private @NonNull Registration networkutilsServiceRpcRegistration;
     private TpceNetwork tpceNetwork;
     private ListenerRegistration<TransportpceServicehandlerListener> serviceHandlerListenerRegistration;
     private NotificationService notificationService;
@@ -64,19 +58,15 @@ public class NetworkModelProvider {
     @Activate
     public NetworkModelProvider(@Reference NetworkTransactionService networkTransactionService,
             @Reference final DataBroker dataBroker,
-            @Reference final RpcProviderService rpcProviderService,
             @Reference final NetworkModelService networkModelService,
             @Reference DeviceTransactionManager deviceTransactionManager,
             @Reference PortMapping portMapping,
             @Reference NotificationService notificationService,
-            @Reference FrequenciesService frequenciesService,
-            @Reference TransportpceNetworkutilsService networkUtils) {
+            @Reference FrequenciesService frequenciesService) {
         this.dataBroker = dataBroker;
-        this.rpcProviderService = rpcProviderService;
         this.notificationService = notificationService;
         this.frequenciesService = frequenciesService;
         this.listeners = new ArrayList<>();
-        this.networkutilsService = networkUtils;
         this.topologyListener = new NetConfTopologyListener(networkModelService, dataBroker, deviceTransactionManager,
             portMapping);
         this.tpceNetwork = new TpceNetwork(networkTransactionService);
@@ -98,8 +88,6 @@ public class NetworkModelProvider {
                 InstanceIdentifiers.NETCONF_TOPOLOGY_II.child(Node.class)), topologyListener));
         listeners.add(dataBroker.registerDataTreeChangeListener(
                 DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, MAPPING_II), portMappingListener));
-        networkutilsServiceRpcRegistration = rpcProviderService
-            .registerRpcImplementation(TransportpceNetworkutilsService.class, networkutilsService);
         TransportpceServicehandlerListener serviceHandlerListner = new ServiceHandlerListener(frequenciesService);
         serviceHandlerListenerRegistration = notificationService.registerNotificationListener(serviceHandlerListner);
     }
@@ -112,9 +100,6 @@ public class NetworkModelProvider {
         LOG.info("NetworkModelProvider Closed");
         listeners.forEach(lis -> lis.close());
         listeners.clear();
-        if (networkutilsServiceRpcRegistration != null) {
-            networkutilsServiceRpcRegistration.close();
-        }
         serviceHandlerListenerRegistration.close();
     }
 }
index df63d4beafa803364375af0cec809b5fa5808524..e464f75c768dd52aa99d29aed9f6a461ff730d08 100644 (file)
@@ -7,27 +7,33 @@
  */
 package org.opendaylight.transportpce.networkmodel;
 
+import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLink;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLinkInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLinkOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLinkOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinks;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinksInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinksOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinksOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodes;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinks;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinksInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinksOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinksOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
@@ -36,29 +42,39 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.Rpc;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Component
-public class NetworkUtilsImpl implements TransportpceNetworkutilsService {
+public class NetworkUtilsImpl {
 
     private static final Logger LOG = LoggerFactory.getLogger(NetworkUtilsImpl.class);
     private final DataBroker dataBroker;
+    private final Registration rpcReg;
 
     @Activate
-    public NetworkUtilsImpl(@Reference DataBroker dataBroker) {
+    public NetworkUtilsImpl(@Reference DataBroker dataBroker, @Reference RpcProviderService rpcProvider) {
         this.dataBroker = dataBroker;
+        rpcReg = rpcProvider.registerRpcImplementations(getRpcClassToInstanceMap());
         LOG.info("NetworkUtilsImpl instanciated");
     }
 
-    @Override
-    public ListenableFuture<RpcResult<DeleteLinkOutput>> deleteLink(DeleteLinkInput input) {
+    @Deactivate
+    public void close() {
+        rpcReg.close();
+        LOG.info("{} closed", getClass().getSimpleName());
+    }
+
+    private ListenableFuture<RpcResult<DeleteLinkOutput>> deleteLink(DeleteLinkInput input) {
 
         LinkId linkId = new LinkId(input.getLinkId());
         // Building link instance identifier
@@ -99,8 +115,7 @@ public class NetworkUtilsImpl implements TransportpceNetworkutilsService {
         }
     }
 
-    @Override
-    public ListenableFuture<RpcResult<InitRoadmNodesOutput>> initRoadmNodes(InitRoadmNodesInput input) {
+    private ListenableFuture<RpcResult<InitRoadmNodesOutput>> initRoadmNodes(InitRoadmNodesInput input) {
         boolean createRdmLinks = OrdLink.createRdm2RdmLinks(input, this.dataBroker);
         if (createRdmLinks) {
             return RpcResultBuilder
@@ -113,8 +128,7 @@ public class NetworkUtilsImpl implements TransportpceNetworkutilsService {
         }
     }
 
-    @Override
-    public ListenableFuture<RpcResult<InitXpdrRdmLinksOutput>> initXpdrRdmLinks(InitXpdrRdmLinksInput input) {
+    private ListenableFuture<RpcResult<InitXpdrRdmLinksOutput>> initXpdrRdmLinks(InitXpdrRdmLinksInput input) {
         // Assigns user provided input in init-network-view RPC to nodeId
         LOG.info("Xpdr to Roadm links rpc called");
         boolean createXpdrRdmLinks = Rdm2XpdrLink.createXpdrRdmLinks(input.getLinksInput(), this.dataBroker);
@@ -130,8 +144,7 @@ public class NetworkUtilsImpl implements TransportpceNetworkutilsService {
         }
     }
 
-    @Override
-    public ListenableFuture<RpcResult<InitRdmXpdrLinksOutput>> initRdmXpdrLinks(InitRdmXpdrLinksInput input) {
+    private ListenableFuture<RpcResult<InitRdmXpdrLinksOutput>> initRdmXpdrLinks(InitRdmXpdrLinksInput input) {
         LOG.info("Roadm to Xpdr links rpc called");
         boolean createRdmXpdrLinks = Rdm2XpdrLink.createRdmXpdrLinks(input.getLinksInput(), this.dataBroker);
         if (createRdmXpdrLinks) {
@@ -145,4 +158,13 @@ public class NetworkUtilsImpl implements TransportpceNetworkutilsService {
             return RpcResultBuilder.<InitRdmXpdrLinksOutput>failed().buildFuture();
         }
     }
+
+    public final ClassToInstanceMap<Rpc<?, ?>> getRpcClassToInstanceMap() {
+        return ImmutableClassToInstanceMap.<Rpc<?, ?>>builder()
+            .put(DeleteLink.class, this::deleteLink)
+            .put(InitRoadmNodes.class, this::initRoadmNodes)
+            .put(InitXpdrRdmLinks.class, this::initXpdrRdmLinks)
+            .put(InitRdmXpdrLinks.class, this::initRdmXpdrLinks)
+            .build();
+    }
 }
index c0ff6eccac8859694be50cfa848b1ee6d886b684..14c8f3ce0bd79e4ebb04b8f8e8ee65e966d03667 100644 (file)
@@ -21,14 +21,12 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.stubbing.Answer;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.NotificationService;
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
 
 @ExtendWith(MockitoExtension.class)
 public class NetworkModelProviderTest {
@@ -37,8 +35,6 @@ public class NetworkModelProviderTest {
     @Mock
     DataBroker dataBroker;
     @Mock
-    RpcProviderService rpcProviderService;
-    @Mock
     NetworkModelService networkModelService;
     @Mock
     DeviceTransactionManager deviceTransactionManager;
@@ -50,8 +46,6 @@ public class NetworkModelProviderTest {
     NotificationService notificationService;
     @Mock
     FrequenciesService frequenciesService;
-    @Mock
-    TransportpceNetworkutilsService networkUtils;
 
     @Test
     void networkmodelProviderInitTest() {
@@ -65,11 +59,9 @@ public class NetworkModelProviderTest {
         };
         when(networkTransactionService.commit()).then(answer);
 
-        new NetworkModelProvider(networkTransactionService, dataBroker, rpcProviderService, networkModelService,
-                deviceTransactionManager, portMapping, notificationService, frequenciesService, networkUtils);
+        new NetworkModelProvider(networkTransactionService, dataBroker, networkModelService, deviceTransactionManager,
+                portMapping, notificationService, frequenciesService);
 
-        verify(rpcProviderService, times(1))
-            .registerRpcImplementation(any(), any(TransportpceNetworkutilsService.class));
         verify(dataBroker, times(2)).registerDataTreeChangeListener(any(), any());
     }
 }
diff --git a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImplTest.java b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImplTest.java
new file mode 100644 (file)
index 0000000..a1fca45
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright © 2023 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.networkmodel;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
+
+@ExtendWith(MockitoExtension.class)
+class NetworkUtilsImplTest {
+    @Mock
+    DataBroker dataBroker;
+    @Mock
+    RpcProviderService rpcProvider;
+
+    @Test
+    void networkUtilsInitTest() {
+        new NetworkUtilsImpl(dataBroker, rpcProvider);
+
+        verify(rpcProvider, times(1)).registerRpcImplementations(any());
+    }
+}