Attempt netconf remount regardless of error-type
[netconf.git] / netconf / sal-netconf-connector / src / main / java / org / opendaylight / netconf / sal / connect / netconf / sal / NetconfDeviceSalFacade.java
index 829487a409a232c7ab040fbe6eee013047b7c613..aaf7db911f4ca16e011395cc58609892b8e80ef6 100644 (file)
@@ -7,17 +7,23 @@
  */
 package org.opendaylight.netconf.sal.connect.netconf.sal;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
+import java.util.ArrayList;
 import java.util.List;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMNotification;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.core.api.Broker;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMActionService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker;
+import org.opendaylight.mdsal.dom.api.DOMMountPointService;
+import org.opendaylight.mdsal.dom.api.DOMNotification;
+import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.netconf.sal.connect.api.RemoteDeviceHandler;
 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.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -28,18 +34,18 @@ public final class NetconfDeviceSalFacade implements AutoCloseable, RemoteDevice
 
     private final RemoteDeviceId id;
     private final NetconfDeviceSalProvider salProvider;
+    private final List<AutoCloseable> salRegistrations = new ArrayList<>();
 
-    private final List<AutoCloseable> salRegistrations = Lists.newArrayList();
-
-    public NetconfDeviceSalFacade(final RemoteDeviceId id, final Broker domBroker, final BindingAwareBroker bindingBroker) {
+    public NetconfDeviceSalFacade(final RemoteDeviceId id, final DOMMountPointService mountPointService,
+            final DataBroker dataBroker) {
         this.id = id;
-        this.salProvider = new NetconfDeviceSalProvider(id);
-        registerToSal(domBroker, bindingBroker);
+        this.salProvider = new NetconfDeviceSalProvider(id, mountPointService, dataBroker);
     }
 
-    public void registerToSal(final Broker domRegistryDependency, final BindingAwareBroker bindingBroker) {
-        domRegistryDependency.registerProvider(salProvider);
-        bindingBroker.registerProvider(salProvider);
+    @VisibleForTesting
+    NetconfDeviceSalFacade(final RemoteDeviceId id, final NetconfDeviceSalProvider salProvider) {
+        this.id = id;
+        this.salProvider = salProvider;
     }
 
     @Override
@@ -49,14 +55,25 @@ public final class NetconfDeviceSalFacade implements AutoCloseable, RemoteDevice
 
     @Override
     public synchronized void onDeviceConnected(final SchemaContext schemaContext,
-                                               final NetconfSessionPreferences netconfSessionPreferences, final DOMRpcService deviceRpc) {
+                                               final NetconfSessionPreferences netconfSessionPreferences,
+                                               final DOMRpcService deviceRpc, final DOMActionService deviceAction) {
 
-        final DOMDataBroker domBroker = new NetconfDeviceDataBroker(id, schemaContext, deviceRpc, netconfSessionPreferences);
+        final DOMDataBroker domBroker =
+                new NetconfDeviceDataBroker(id, schemaContext, deviceRpc, netconfSessionPreferences);
 
         final NetconfDeviceNotificationService notificationService = new NetconfDeviceNotificationService();
 
-        salProvider.getMountInstance().onTopologyDeviceConnected(schemaContext, domBroker, deviceRpc, notificationService);
-        salProvider.getTopologyDatastoreAdapter().updateDeviceData(true, netconfSessionPreferences.getNetconfDeviceCapabilities());
+        salProvider.getMountInstance()
+                .onTopologyDeviceConnected(schemaContext, domBroker, deviceRpc, notificationService, deviceAction);
+        salProvider.getTopologyDatastoreAdapter()
+                .updateDeviceData(true, netconfSessionPreferences.getNetconfDeviceCapabilities());
+    }
+
+    @Override
+    public synchronized void onDeviceReconnected(final NetconfSessionPreferences netconfSessionPreferences,
+            final NetconfNode node) {
+        this.salProvider.getTopologyDatastoreAdapter().updateDeviceData(ConnectionStatus.Connecting,
+                netconfSessionPreferences.getNetconfDeviceCapabilities(), LogicalDatastoreType.CONFIGURATION, node);
     }
 
     @Override
@@ -79,6 +96,7 @@ public final class NetconfDeviceSalFacade implements AutoCloseable, RemoteDevice
         closeGracefully(salProvider);
     }
 
+    @SuppressWarnings("checkstyle:IllegalCatch")
     private void closeGracefully(final AutoCloseable resource) {
         if (resource != null) {
             try {