import com.google.common.annotations.VisibleForTesting;
import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.dom.api.DOMMountPointService;
import org.opendaylight.mdsal.dom.api.DOMNotification;
-import org.opendaylight.netconf.dom.api.NetconfDataTreeService;
import org.opendaylight.netconf.sal.connect.api.RemoteDeviceHandler;
import org.opendaylight.netconf.sal.connect.api.RemoteDeviceServices;
import org.opendaylight.netconf.sal.connect.netconf.NetconfDeviceSchema;
import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities;
import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.NetconfNodeFieldsOptional;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.netconf.node.fields.optional.Topology;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.netconf.node.fields.optional.TopologyKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.netconf.node.fields.optional.topology.Node;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.netconf.node.fields.optional.topology.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev190614.netconf.node.fields.optional.topology.node.DatastoreLock;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private final RemoteDeviceId id;
private final NetconfDeviceSalProvider salProvider;
- private final DataBroker dataBroker;
- private final String topologyId;
-
- private ListenerRegistration<LockChangeListener> listenerRegistration = null;
+ private final boolean lockDatastore;
public NetconfDeviceSalFacade(final RemoteDeviceId id, final DOMMountPointService mountPointService,
- final DataBroker dataBroker, final String topologyId) {
- this(id, new NetconfDeviceSalProvider(id, mountPointService, dataBroker), dataBroker, topologyId);
+ final DataBroker dataBroker, final boolean lockDatastore) {
+ this(id, new NetconfDeviceSalProvider(id, mountPointService, dataBroker), lockDatastore);
}
@VisibleForTesting
NetconfDeviceSalFacade(final RemoteDeviceId id, final NetconfDeviceSalProvider salProvider,
- final DataBroker dataBroker, final String topologyId) {
+ final boolean lockDatastore) {
this.id = id;
this.salProvider = salProvider;
- this.dataBroker = dataBroker;
- this.topologyId = topologyId;
+ this.lockDatastore = lockDatastore;
}
@Override
final var modelContext = mountContext.getEffectiveModelContext();
final var deviceRpc = services.rpcs();
- final var netconfDataTree = AbstractNetconfDataTreeService.of(id, mountContext, deviceRpc, sessionPreferences);
- final var netconfDataBroker = new NetconfDeviceDataBroker(id, mountContext, deviceRpc, sessionPreferences);
- registerLockListener(netconfDataBroker, netconfDataTree);
+
+ final var netconfDataTree = AbstractNetconfDataTreeService.of(id, mountContext, deviceRpc, sessionPreferences,
+ lockDatastore);
+ final var netconfDataBroker = new NetconfDeviceDataBroker(id, mountContext, deviceRpc, sessionPreferences,
+ lockDatastore);
salProvider.getMountInstance().onTopologyDeviceConnected(modelContext, services, netconfDataBroker,
netconfDataTree);
public synchronized void onDeviceDisconnected() {
salProvider.getTopologyDatastoreAdapter().updateDeviceData(false, NetconfDeviceCapabilities.empty());
salProvider.getMountInstance().onTopologyDeviceDisconnected();
- closeLockChangeListener();
}
@Override
public synchronized void onDeviceFailed(final Throwable throwable) {
salProvider.getTopologyDatastoreAdapter().setDeviceAsFailed(throwable);
salProvider.getMountInstance().onTopologyDeviceDisconnected();
- closeLockChangeListener();
}
@Override
public synchronized void close() {
closeGracefully(salProvider);
- closeLockChangeListener();
}
@SuppressWarnings("checkstyle:IllegalCatch")
}
}
}
-
- private void closeLockChangeListener() {
- if (listenerRegistration != null) {
- listenerRegistration.close();
- }
- }
-
- private void registerLockListener(final NetconfDeviceDataBroker netconfDeviceDataBroker,
- final NetconfDataTreeService netconfDataTreeService) {
- listenerRegistration = dataBroker.registerDataTreeChangeListener(
- DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
- InstanceIdentifier.create(NetconfNodeFieldsOptional.class)
- .child(Topology.class, new TopologyKey(new TopologyId(topologyId)))
- .child(Node.class, new NodeKey(new NodeId(id.getName())))
- .child(DatastoreLock.class)),
- new LockChangeListener(netconfDeviceDataBroker, netconfDataTreeService));
- }
}