private static final Logger LOG = LoggerFactory.getLogger(NetconfTopologyImpl.class);
private Registration dtclReg;
- private Registration rpcReg;
+ private NetconfTopologyRPCProvider rpcProvider;
@Inject
@Activate
LOG.debug("Registering datastore listener");
dtclReg = dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(
LogicalDatastoreType.CONFIGURATION, createTopologyListPath(topologyId).child(Node.class)), this);
- final var nodeTopologyRpcs = new NetconfTopologyRPCProvider(dataBroker, encryptionService, topologyId);
- rpcReg = rpcProviderService.registerRpcImplementations(nodeTopologyRpcs.getRpcClassToInstanceMap());
+ rpcProvider = new NetconfTopologyRPCProvider(rpcProviderService, dataBroker, encryptionService, topologyId);
}
@PreDestroy
@Deactivate
@Override
public void close() {
- if (rpcReg != null) {
- rpcReg.close();
- rpcReg = null;
+ if (rpcProvider != null) {
+ rpcProvider.close();
+ rpcProvider = null;
}
// close all existing connectors, delete whole topology in datastore?
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.concepts.Registration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.Uint16;
import org.osgi.service.component.annotations.Activate;
private final String topologyId;
private final Duration writeTxIdleTimeout;
private final DOMMountPointService mountPointService;
- private final AAAEncryptionService encryptionService;
- private final RpcProviderService rpcProviderService;
private final DeviceActionFactory deviceActionFactory;
private final NetconfClientConfigurationBuilderFactory builderFactory;
private final SchemaResourceManager resourceManager;
private ListenerRegistration<NetconfTopologyManager> dataChangeListenerRegistration;
- private Registration rpcReg;
+ private NetconfTopologyRPCProvider rpcProvider;
@Activate
public NetconfTopologyManager(@Reference final BaseNetconfSchemas baseSchemas,
this.topologyId = requireNonNull(topologyId);
writeTxIdleTimeout = Duration.ofSeconds(writeTransactionIdleTimeout.toJava());
this.mountPointService = mountPointService;
- this.encryptionService = requireNonNull(encryptionService);
- this.rpcProviderService = requireNonNull(rpcProviderService);
this.deviceActionFactory = requireNonNull(deviceActionFactory);
this.resourceManager = requireNonNull(resourceManager);
this.builderFactory = requireNonNull(builderFactory);
dataChangeListenerRegistration = registerDataTreeChangeListener();
- final var nodeTopologyRpcs = new NetconfTopologyRPCProvider(dataBroker, encryptionService, topologyId);
- rpcReg = rpcProviderService.registerRpcImplementations(nodeTopologyRpcs.getRpcClassToInstanceMap());
+ rpcProvider = new NetconfTopologyRPCProvider(rpcProviderService, dataBroker, encryptionService, topologyId);
}
@Override
@Deactivate
@Override
public void close() {
- if (rpcReg != null) {
- rpcReg.close();
- rpcReg = null;
+ if (rpcProvider != null) {
+ rpcProvider.close();
+ rpcProvider = null;
}
if (dataChangeListenerRegistration != null) {
dataChangeListenerRegistration.close();
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
import org.opendaylight.yangtools.util.concurrent.FluentFutures;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
private static final String TEST_DEFAULT_SUBDIR = "test-schema";
@Mock private RpcProviderService mockRpcProviderService;
+ @Mock private Registration mockRpcReg;
@Mock private NetconfClientDispatcher mockClientDispatcher;
@Mock private AAAEncryptionService mockEncryptionService;
@Mock private ScheduledExecutorService mockKeepaliveExecutor;
builderFactory = new DefaultNetconfClientConfigurationBuilderFactory(mockEncryptionService, credentialProvider,
sslHandlerFactoryProvider);
+ doReturn(mockRpcReg).when(mockRpcProviderService).registerRpcImplementations(any());
+
setupMaster();
setupSlave();
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
import org.opendaylight.yangtools.yang.common.Uint16;
@Mock
private ClusterSingletonServiceProvider clusterSingletonServiceProvider;
-
@Mock
private ListenerRegistration<?> mockListenerReg;
+ @Mock
+ private Registration mockRpcReg;
private DataBroker dataBroker;
doNothing().when(mockListenerReg).close();
doReturn(mockListenerReg).when(dataBroker).registerDataTreeChangeListener(any(), any());
+ doReturn(mockRpcReg).when(rpcProviderService).registerRpcImplementations(any());
netconfTopologyManager = new NetconfTopologyManager(BASE_SCHEMAS, dataBroker, clusterSingletonServiceProvider,
keepaliveExecutor, processingService, actorSystem, eventExecutor, clientDispatcher,
import static java.util.Objects.requireNonNull;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.ImmutableClassToInstanceMap;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.ListenableFuture;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.aaa.encrypt.AAAEncryptionService;
import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
import org.opendaylight.mdsal.binding.api.WriteTransaction;
import org.opendaylight.mdsal.common.api.CommitInfo;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+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.slf4j.LoggerFactory;
@Deprecated
-public class NetconfTopologyRPCProvider {
+public final class NetconfTopologyRPCProvider implements AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(NetconfTopologyRPCProvider.class);
private final @NonNull InstanceIdentifier<Topology> topologyPath;
private final @NonNull AAAEncryptionService encryptionService;
private final @NonNull DataBroker dataBroker;
- public NetconfTopologyRPCProvider(final DataBroker dataBroker, final AAAEncryptionService encryptionService,
- final String topologyId) {
+ private final Registration reg;
+
+ public NetconfTopologyRPCProvider(final RpcProviderService rpcProviderService, final DataBroker dataBroker,
+ final AAAEncryptionService encryptionService, final String topologyId) {
this.dataBroker = requireNonNull(dataBroker);
this.encryptionService = requireNonNull(encryptionService);
topologyPath = InstanceIdentifier.builder(NetworkTopology.class)
.child(Topology.class, new TopologyKey(new TopologyId(topologyId)))
.build();
+ reg = rpcProviderService.registerRpcImplementations(ImmutableClassToInstanceMap.<Rpc<?, ?>>builder()
+ .put(CreateDevice.class, this::createDevice)
+ .put(DeleteDevice.class, this::deleteDevice)
+ .build());
}
- protected final @NonNull InstanceIdentifier<Topology> topologyPath() {
+ protected @NonNull InstanceIdentifier<Topology> topologyPath() {
return topologyPath;
}
+ @Override
+ public void close() {
+ reg.close();
+ }
+
private ListenableFuture<RpcResult<CreateDeviceOutput>> createDevice(final CreateDeviceInput input) {
final NetconfNode node = encryptPassword(input);
final SettableFuture<RpcResult<CreateDeviceOutput>> futureResult = SettableFuture.create();
}
}, MoreExecutors.directExecutor());
}
-
- public ClassToInstanceMap<Rpc<?, ?>> getRpcClassToInstanceMap() {
- return ImmutableClassToInstanceMap.<Rpc<?, ?>>builder()
- .put(CreateDevice.class, this::createDevice)
- .put(DeleteDevice.class, this::deleteDevice)
- .build();
- }
}
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import org.junit.Before;
import org.mockito.junit.MockitoJUnitRunner;
import org.opendaylight.aaa.encrypt.AAAEncryptionService;
import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.CreateDeviceInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNode;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yangtools.concepts.Registration;
import org.opendaylight.yangtools.yang.common.Uint16;
@RunWith(MockitoJUnitRunner.StrictStubs.class)
private static final String TEST_PWD = "test";
private static final String ENC_PWD = "4o9/Hn3Pi4150YrP12N/1g==";
+ @Mock
+ private RpcProviderService rpcProviderService;
+ @Mock
+ private Registration rpcReg;
@Mock
private DataBroker dataBroker;
-
@Mock
private AAAEncryptionService encryptionService;
@Before
public void setUp() {
doReturn(ENC_PWD).when(encryptionService).encrypt(TEST_PWD);
- rpcProvider = new NetconfTopologyRPCProvider(dataBroker, encryptionService, TOPOLOGY_ID);
+ doReturn(rpcReg).when(rpcProviderService).registerRpcImplementations(any());
+ rpcProvider = new NetconfTopologyRPCProvider(rpcProviderService, dataBroker, encryptionService, TOPOLOGY_ID);
}
@Test