From 4493d1c0c0e16a522532a49a14638e2dbdc2f90d Mon Sep 17 00:00:00 2001 From: Gilles Thouenon Date: Wed, 27 Sep 2023 17:59:37 +0200 Subject: [PATCH] Do not use RpcService in TPCE networkmodel module Migrate usage of RpcService to the new style yang.binding.Rpc-based implementation for networkmodel module. JIRA: TRNSPRTPCE-752 Signed-off-by: Gilles Thouenon Change-Id: Ia0e3e31b59b9b319b7431ff9d739274a2dfaccf5 --- .../tpce/module/TransportPCEImpl.java | 5 +-- .../networkmodel/NetworkModelProvider.java | 17 +------ .../networkmodel/NetworkUtilsImpl.java | 44 ++++++++++++++----- .../NetworkModelProviderTest.java | 12 +---- .../networkmodel/NetworkUtilsImplTest.java | 34 ++++++++++++++ 5 files changed, 72 insertions(+), 40 deletions(-) create mode 100644 networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImplTest.java diff --git a/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java b/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java index f3b37acb4..f0f17c0a7 100644 --- a/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java +++ b/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java @@ -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 diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java index 0eafd00f1..d1ef447cb 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java @@ -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 listeners; - private @NonNull Registration networkutilsServiceRpcRegistration; private TpceNetwork tpceNetwork; private ListenerRegistration 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(); } } diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java index df63d4bea..e464f75c7 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java @@ -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> deleteLink(DeleteLinkInput input) { + @Deactivate + public void close() { + rpcReg.close(); + LOG.info("{} closed", getClass().getSimpleName()); + } + + private ListenableFuture> 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> initRoadmNodes(InitRoadmNodesInput input) { + private ListenableFuture> 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> initXpdrRdmLinks(InitXpdrRdmLinksInput input) { + private ListenableFuture> 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> initRdmXpdrLinks(InitRdmXpdrLinksInput input) { + private ListenableFuture> 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.failed().buildFuture(); } } + + public final ClassToInstanceMap> getRpcClassToInstanceMap() { + return ImmutableClassToInstanceMap.>builder() + .put(DeleteLink.class, this::deleteLink) + .put(InitRoadmNodes.class, this::initRoadmNodes) + .put(InitXpdrRdmLinks.class, this::initXpdrRdmLinks) + .put(InitRdmXpdrLinks.class, this::initRdmXpdrLinks) + .build(); + } } diff --git a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkModelProviderTest.java b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkModelProviderTest.java index c0ff6ecca..14c8f3ce0 100644 --- a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkModelProviderTest.java +++ b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkModelProviderTest.java @@ -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 index 000000000..a1fca452f --- /dev/null +++ b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImplTest.java @@ -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()); + } +} -- 2.36.6