X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fnetconf-topology-singleton%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Ftopology%2Fsingleton%2Fimpl%2FSlaveSalFacade.java;h=9f4ae7ac8424a225952f09cd12ad047ca34b8b7f;hb=1dba5b2651d7fc60af0263cc0640d5ebeda8e454;hp=92d7e1a36ac6f8228075935ae6d32d0515c2a366;hpb=9c18390ba25a0635f994b5bffd899306fd7c1e6c;p=netconf.git diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/SlaveSalFacade.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/SlaveSalFacade.java index 92d7e1a36a..9f4ae7ac84 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/SlaveSalFacade.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/SlaveSalFacade.java @@ -5,74 +5,59 @@ * 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.netconf.topology.singleton.impl; import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.util.Timeout; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; -import org.opendaylight.controller.sal.core.api.Broker; -import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceNotificationService; -import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceSalProvider; -import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import java.util.concurrent.atomic.AtomicBoolean; +import org.opendaylight.mdsal.dom.api.DOMMountPointService; +import org.opendaylight.netconf.sal.connect.api.RemoteDeviceId; +import org.opendaylight.netconf.sal.connect.api.RemoteDeviceServices; +import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceMount; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SlaveSalFacade { - private static final Logger LOG = LoggerFactory.getLogger(SlaveSalFacade.class); + private final AtomicBoolean registered = new AtomicBoolean(false); private final RemoteDeviceId id; - private final NetconfDeviceSalProvider salProvider; - + private final NetconfDeviceMount mount; private final ActorSystem actorSystem; private final Timeout actorResponseWaitTime; public SlaveSalFacade(final RemoteDeviceId id, - final Broker domBroker, final ActorSystem actorSystem, - final Timeout actorResponseWaitTime) { + final Timeout actorResponseWaitTime, + final DOMMountPointService mountPointService) { this.id = id; - this.salProvider = new NetconfDeviceSalProvider(id); this.actorSystem = actorSystem; this.actorResponseWaitTime = actorResponseWaitTime; - - registerToSal(domBroker); - } - - private void registerToSal(final Broker domRegistryDependency) { - domRegistryDependency.registerProvider(salProvider); - + mount = new NetconfDeviceMount(id, mountPointService, NetconfDeviceMount.defaultTopologyMountPath(id)); } - public void registerSlaveMountPoint(final SchemaContext remoteSchemaContext, final DOMRpcService deviceRpc, - final ActorRef masterActorRef) { - final NetconfDeviceNotificationService notificationService = new NetconfDeviceNotificationService(); - - final ProxyDOMDataBroker netconfDeviceDataBroker = - new ProxyDOMDataBroker(actorSystem, id, masterActorRef, actorResponseWaitTime); + public void registerSlaveMountPoint(final EffectiveModelContext remoteSchemaContext, final ActorRef masterActorRef, + final RemoteDeviceServices services) { + if (!registered.compareAndSet(false, true)) { + LOG.info("Mount point {} already registered, skipping registation", id); + return; + } - salProvider.getMountInstance().onTopologyDeviceConnected(remoteSchemaContext, netconfDeviceDataBroker, - deviceRpc, notificationService); + final var netconfDeviceDataBroker = new ProxyDOMDataBroker(id, masterActorRef, + actorSystem.dispatcher(), actorResponseWaitTime); + final var proxyNetconfService = new ProxyNetconfDataTreeService(id, masterActorRef, + actorSystem.dispatcher(), actorResponseWaitTime); + mount.onDeviceConnected(remoteSchemaContext, services, netconfDeviceDataBroker, proxyNetconfService); LOG.info("{}: Slave mount point registered.", id); } - public void unregisterSlaveMountPoint() { - salProvider.getMountInstance().onTopologyDeviceDisconnected(); - } - public void close() { - unregisterSlaveMountPoint(); - try { - salProvider.getMountInstance().close(); - } catch (final Exception exception) { - LOG.warn("{}: Exception in closing slave sal facade: {}", id, exception); + if (registered.compareAndSet(true, false)) { + mount.onDeviceDisconnected(); + LOG.info("{}: Slave mount point unregistered.", id); } - } - - }