Bug 8032 - Initialization in sal failed, disconnecting from device 74/54874/13
authormiroslav.kovac <miroslav.kovac@pantheon.tech>
Tue, 4 Apr 2017 13:27:06 +0000 (15:27 +0200)
committermiroslav.kovac <miroslav.kovac@pantheon.tech>
Fri, 28 Apr 2017 11:56:54 +0000 (13:56 +0200)
MountpointService is initialized with blueprint and therefore it
should never throw null pointer exception anymore.

All the binding and dom broker are deleted because they are
not needed any more.

Change-Id: I9aa9064752043819bc73043f7b667b4ea2c0fd0a
Signed-off-by: miroslav.kovac <miroslav.kovac@pantheon.tech>
29 files changed:
netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/BaseCallHomeTopology.java
netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/CallHomeMountDispatcher.java
netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/CallHomeTopology.java
netconf/callhome-provider/src/main/resources/org/opendaylight/blueprint/callhome-topology.xml
netconf/callhome-provider/src/test/java/org/opendaylight/netconf/callhome/mount/CallHomeMountDispatcherTest.java
netconf/netconf-topology-config/src/main/resources/org/opendaylight/blueprint/netconf-topology.xml
netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/MasterSalFacade.java
netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeManager.java
netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyContext.java
netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManager.java
netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImpl.java
netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/SlaveSalFacade.java
netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfNodeActor.java
netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/utils/NetconfTopologySetup.java
netconf/netconf-topology-singleton/src/main/resources/org/opendaylight/blueprint/netconf-topology-singleton.xml
netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java
netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManagerTest.java
netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java
netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/TestingRemoteDeviceConnectorImpl.java
netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ReadOnlyTransactionTest.java
netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ReadWriteTransactionTest.java
netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/WriteOnlyTransactionTest.java
netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/AbstractNetconfTopology.java
netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImpl.java
netconf/netconf-topology/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalFacade.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalProvider.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalFacadeTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalProviderTest.java

index 0b1972a3ef559bdbcd504886a81618c2f6f60125..f2d01b753ef4f3e3aa08f3f39b2d87ee051edbaf 100644 (file)
@@ -13,8 +13,6 @@ import org.opendaylight.controller.config.threadpool.ScheduledThreadPool;
 import org.opendaylight.controller.config.threadpool.ThreadPool;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.core.api.Broker;
 import org.opendaylight.netconf.client.NetconfClientDispatcher;
 import org.opendaylight.netconf.topology.AbstractNetconfTopology;
 import org.opendaylight.netconf.topology.api.SchemaRepositoryProvider;
@@ -23,17 +21,15 @@ abstract class BaseCallHomeTopology extends AbstractNetconfTopology {
 
     protected DOMMountPointService mountPointService = null;
 
-    BaseCallHomeTopology(String topologyId, NetconfClientDispatcher clientDispatcher,
-                         BindingAwareBroker bindingAwareBroker,
-                         Broker domBroker,
-                         EventExecutor eventExecutor,
-                         ScheduledThreadPool keepaliveExecutor,
-                         ThreadPool processingExecutor,
-                         SchemaRepositoryProvider schemaRepositoryProvider,
-                         DataBroker dataBroker,
-                         DOMMountPointService mountPointService) {
-        super(topologyId, clientDispatcher, bindingAwareBroker, domBroker, eventExecutor, keepaliveExecutor,
-                processingExecutor, schemaRepositoryProvider, dataBroker);
+    BaseCallHomeTopology(final String topologyId, final NetconfClientDispatcher clientDispatcher,
+                         final EventExecutor eventExecutor,
+                         final ScheduledThreadPool keepaliveExecutor,
+                         final ThreadPool processingExecutor,
+                         final SchemaRepositoryProvider schemaRepositoryProvider,
+                         final DataBroker dataBroker,
+                         final DOMMountPointService mountPointService) {
+        super(topologyId, clientDispatcher, eventExecutor, keepaliveExecutor,
+                processingExecutor, schemaRepositoryProvider, dataBroker, mountPointService);
         this.mountPointService = mountPointService;
     }
 }
index ee1790ce4514166372743c25787759335652b1fb..2241d6995ae2b93c7fe90df7b13e5a2740b602fe 100644 (file)
@@ -16,8 +16,6 @@ import org.opendaylight.controller.config.threadpool.ScheduledThreadPool;
 import org.opendaylight.controller.config.threadpool.ThreadPool;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.core.api.Broker;
 import org.opendaylight.netconf.callhome.mount.CallHomeMountSessionContext.CloseCallback;
 import org.opendaylight.netconf.callhome.protocol.CallHomeChannelActivator;
 import org.opendaylight.netconf.callhome.protocol.CallHomeNetconfSubsystemListener;
@@ -38,12 +36,10 @@ public class CallHomeMountDispatcher implements NetconfClientDispatcher, CallHom
     private final static Logger LOG = LoggerFactory.getLogger(CallHomeMountDispatcher.class);
 
     private final String topologyId;
-    private final BindingAwareBroker bindingAwareBroker;
     private final EventExecutor eventExecutor;
     private final ScheduledThreadPool keepaliveExecutor;
     private final ThreadPool processingExecutor;
     private final SchemaRepositoryProvider schemaRepositoryProvider;
-    private final org.opendaylight.controller.sal.core.api.Broker domBroker;
     private final CallHomeMountSessionManager sessionManager;
     private final DataBroker dataBroker;
     private final DOMMountPointService mountService;
@@ -52,44 +48,42 @@ public class CallHomeMountDispatcher implements NetconfClientDispatcher, CallHom
 
     private final CloseCallback onCloseHandler = new CloseCallback() {
         @Override
-        public void onClosed(CallHomeMountSessionContext deviceContext) {
+        public void onClosed(final CallHomeMountSessionContext deviceContext) {
             LOG.info("Removing {} from Netconf Topology.", deviceContext.getId());
             topology.disconnectNode(deviceContext.getId());
         }
     };
 
-    public CallHomeMountDispatcher(String topologyId, BindingAwareBroker bindingAwareBroker,
-                                   EventExecutor eventExecutor,
-                                   ScheduledThreadPool keepaliveExecutor,
-                                   ThreadPool processingExecutor,
-                                   SchemaRepositoryProvider schemaRepositoryProvider,
-                                   Broker domBroker, DataBroker dataBroker,
-                                   DOMMountPointService mountService) {
+    public CallHomeMountDispatcher(final String topologyId,
+                                   final EventExecutor eventExecutor,
+                                   final ScheduledThreadPool keepaliveExecutor,
+                                   final ThreadPool processingExecutor,
+                                   final SchemaRepositoryProvider schemaRepositoryProvider,
+                                   final DataBroker dataBroker,
+                                   final DOMMountPointService mountService) {
         this.topologyId = topologyId;
-        this.bindingAwareBroker = bindingAwareBroker;
         this.eventExecutor = eventExecutor;
         this.keepaliveExecutor = keepaliveExecutor;
         this.processingExecutor = processingExecutor;
         this.schemaRepositoryProvider = schemaRepositoryProvider;
-        this.domBroker = domBroker;
         this.sessionManager = new CallHomeMountSessionManager();
         this.dataBroker = dataBroker;
         this.mountService = mountService;
     }
 
     @Override
-    public Future<NetconfClientSession> createClient(NetconfClientConfiguration clientConfiguration) {
+    public Future<NetconfClientSession> createClient(final NetconfClientConfiguration clientConfiguration) {
         return activateChannel(clientConfiguration);
     }
 
     @Override
-    public Future<Void> createReconnectingClient(NetconfReconnectingClientConfiguration clientConfiguration) {
+    public Future<Void> createReconnectingClient(final NetconfReconnectingClientConfiguration clientConfiguration) {
         return activateChannel(clientConfiguration);
     }
 
-    private <V> Future<V> activateChannel(NetconfClientConfiguration conf) {
-        InetSocketAddress remoteAddr = conf.getAddress();
-        CallHomeMountSessionContext context = getSessionManager().getByAddress(remoteAddr);
+    private <V> Future<V> activateChannel(final NetconfClientConfiguration conf) {
+        final InetSocketAddress remoteAddr = conf.getAddress();
+        final CallHomeMountSessionContext context = getSessionManager().getByAddress(remoteAddr);
         LOG.info("Activating NETCONF channel for ip {} device context {}", remoteAddr, context);
         if (context == null) {
             return new FailedFuture<>(eventExecutor, new NullPointerException());
@@ -98,16 +92,16 @@ public class CallHomeMountDispatcher implements NetconfClientDispatcher, CallHom
     }
 
     void createTopology() {
-        this.topology = new CallHomeTopology(topologyId, this, bindingAwareBroker, domBroker, eventExecutor,
+        this.topology = new CallHomeTopology(topologyId, this, eventExecutor,
                 keepaliveExecutor, processingExecutor, schemaRepositoryProvider, dataBroker, mountService);
     }
 
     @Override
-    public void onNetconfSubsystemOpened(CallHomeProtocolSessionContext session,
-                                         CallHomeChannelActivator activator) {
-        CallHomeMountSessionContext deviceContext = getSessionManager().createSession(session, activator, onCloseHandler);
-        NodeId nodeId = deviceContext.getId();
-        Node configNode = deviceContext.getConfigNode();
+    public void onNetconfSubsystemOpened(final CallHomeProtocolSessionContext session,
+                                         final CallHomeChannelActivator activator) {
+        final CallHomeMountSessionContext deviceContext = getSessionManager().createSession(session, activator, onCloseHandler);
+        final NodeId nodeId = deviceContext.getId();
+        final Node configNode = deviceContext.getConfigNode();
         LOG.info("Provisioning fake config {}", configNode);
         topology.connectNode(nodeId, configNode);
     }
index fc774b0a81eac29bdd57c837a51c4d29a8a81e42..71a7af1340fe6a82d1f878cfa232543baa60b64a 100644 (file)
@@ -13,8 +13,6 @@ import org.opendaylight.controller.config.threadpool.ScheduledThreadPool;
 import org.opendaylight.controller.config.threadpool.ThreadPool;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.core.api.Broker;
 import org.opendaylight.netconf.client.NetconfClientDispatcher;
 import org.opendaylight.netconf.sal.connect.api.RemoteDeviceHandler;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
@@ -25,21 +23,18 @@ import org.opendaylight.netconf.topology.api.SchemaRepositoryProvider;
 
 public class CallHomeTopology extends BaseCallHomeTopology {
 
-    public CallHomeTopology(String topologyId, NetconfClientDispatcher clientDispatcher,
-                            BindingAwareBroker bindingAwareBroker,
-                            Broker domBroker, EventExecutor eventExecutor,
-                            ScheduledThreadPool keepaliveExecutor, ThreadPool processingExecutor,
-                            SchemaRepositoryProvider schemaRepositoryProvider,
-                            DataBroker dataBroker, DOMMountPointService mountPointService) {
-        super(topologyId, clientDispatcher, bindingAwareBroker, domBroker, eventExecutor,
+    public CallHomeTopology(final String topologyId, final NetconfClientDispatcher clientDispatcher,
+                            final EventExecutor eventExecutor,
+                            final ScheduledThreadPool keepaliveExecutor, final ThreadPool processingExecutor,
+                            final SchemaRepositoryProvider schemaRepositoryProvider,
+                            final DataBroker dataBroker, final DOMMountPointService mountPointService) {
+        super(topologyId, clientDispatcher, eventExecutor,
                 keepaliveExecutor, processingExecutor, schemaRepositoryProvider,
                 dataBroker, mountPointService);
     }
 
     @Override
-    protected RemoteDeviceHandler<NetconfSessionPreferences> createSalFacade(RemoteDeviceId id,
-                                                                             Broker domBroker,
-                                                                             BindingAwareBroker bindingBroker) {
-        return new NetconfDeviceSalFacade(id, domBroker, bindingAwareBroker);
+    protected RemoteDeviceHandler<NetconfSessionPreferences> createSalFacade(final RemoteDeviceId id) {
+        return new NetconfDeviceSalFacade(id, mountPointService, dataBroker);
     }
 }
index 831980c33ebf3f3c726a113fec855d6ea968ec8f..d97360476ee12d7dc746e53c2c0b6650699eafa3 100755 (executable)
            xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
            odl:use-default-for-reference-types="true">
 
-    <reference id="bindingAwareBroker"
-               interface="org.opendaylight.controller.sal.binding.api.BindingAwareBroker"/>
     <reference id="keepAliveExecutor"
                interface="org.opendaylight.controller.config.threadpool.ScheduledThreadPool"
                odl:type="global-netconf-ssh-scheduled-executor"/>
     <reference id="processingExecutor"
                interface="org.opendaylight.controller.config.threadpool.ThreadPool"
                odl:type="global-netconf-processing-executor"/>
-    <reference id="domBroker"
-               interface="org.opendaylight.controller.sal.core.api.Broker"/>
     <reference id="eventExecutor"
                interface="io.netty.util.concurrent.EventExecutor"
                odl:type="global-event-executor"/>
 
     <bean id="callhomeDispatcher" class="org.opendaylight.netconf.callhome.mount.CallHomeMountDispatcher">
         <argument value="topology-netconf"/>
-        <argument ref="bindingAwareBroker"/>
         <argument ref="eventExecutor"/>
         <argument ref="keepAliveExecutor"/>
         <argument ref="processingExecutor"/>
         <argument ref="schemaRepository"/>
-        <argument ref="domBroker"/>
         <argument ref="dataBroker"/>
         <argument ref="domMountPointService"/>
     </bean>
index c426471997de110d270cc0e2c6f5d33d428bcb50..cca8f5de3d56e1352e776333433abacaa518a526 100644 (file)
@@ -11,8 +11,8 @@ package org.opendaylight.netconf.callhome.mount;
 import static org.junit.Assert.assertFalse;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
@@ -20,15 +20,12 @@ import io.netty.util.concurrent.EventExecutor;
 import io.netty.util.concurrent.Future;
 import java.net.InetSocketAddress;
 import java.net.UnknownHostException;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.controller.config.threadpool.ScheduledThreadPool;
 import org.opendaylight.controller.config.threadpool.ThreadPool;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.core.api.Broker;
 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
 import org.opendaylight.netconf.callhome.protocol.CallHomeChannelActivator;
 import org.opendaylight.netconf.callhome.protocol.CallHomeProtocolSessionContext;
@@ -44,12 +41,10 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 
 public class CallHomeMountDispatcherTest {
     private String topologyId;
-    private BindingAwareBroker mockBroker;
     private EventExecutor mockExecutor;
     private ScheduledThreadPool mockKeepAlive;
     private ThreadPool mockProcessingExecutor;
     private SchemaRepositoryProvider mockSchemaRepoProvider;
-    private Broker mockDomBroker;
 
     private CallHomeMountDispatcher instance;
     private DataBroker mockDataBroker;
@@ -62,20 +57,18 @@ public class CallHomeMountDispatcherTest {
     @Before
     public void setup() {
         topologyId = "";
-        mockBroker = mock(BindingAwareBroker.class);
         mockExecutor = mock(EventExecutor.class);
         mockKeepAlive = mock(ScheduledThreadPool.class);
         mockProcessingExecutor = mock(ThreadPool.class);
         mockSchemaRepoProvider = mock(SchemaRepositoryProvider.class);
-        mockDomBroker = mock(Broker.class);
         mockDataBroker = mock(DataBroker.class);
         mockMount = mock(DOMMountPointService.class);
         mockSessMgr = mock(CallHomeMountSessionManager.class);
         mockTopology = mock(CallHomeTopology.class);
         mockProtoSess = mock(CallHomeProtocolSessionContext.class);
 
-        instance = new CallHomeMountDispatcher(topologyId, mockBroker, mockExecutor, mockKeepAlive,
-                mockProcessingExecutor, mockSchemaRepoProvider, mockDomBroker, mockDataBroker, mockMount) {
+        instance = new CallHomeMountDispatcher(topologyId, mockExecutor, mockKeepAlive,
+                mockProcessingExecutor, mockSchemaRepoProvider, mockDataBroker, mockMount) {
             @Override
             public CallHomeMountSessionManager getSessionManager() {
                 return mockSessMgr;
@@ -87,15 +80,15 @@ public class CallHomeMountDispatcherTest {
         };
     }
 
-    NetconfClientConfiguration someConfiguration(InetSocketAddress address) {
+    NetconfClientConfiguration someConfiguration(final InetSocketAddress address) {
         // NetconfClientConfiguration has mostly final methods, making it un-mock-able
 
-        NetconfClientConfiguration.NetconfClientProtocol protocol =
+        final NetconfClientConfiguration.NetconfClientProtocol protocol =
                 NetconfClientConfiguration.NetconfClientProtocol.SSH;
-        NetconfHelloMessageAdditionalHeader additionalHeader = mock(NetconfHelloMessageAdditionalHeader.class);
-        NetconfClientSessionListener sessionListener = mock(NetconfClientSessionListener.class);
-        ReconnectStrategy reconnectStrategy = mock(ReconnectStrategy.class);
-        AuthenticationHandler authHandler = mock(AuthenticationHandler.class);
+        final NetconfHelloMessageAdditionalHeader additionalHeader = mock(NetconfHelloMessageAdditionalHeader.class);
+        final NetconfClientSessionListener sessionListener = mock(NetconfClientSessionListener.class);
+        final ReconnectStrategy reconnectStrategy = mock(ReconnectStrategy.class);
+        final AuthenticationHandler authHandler = mock(AuthenticationHandler.class);
 
         return NetconfClientConfigurationBuilder.create().withProtocol(protocol).withAddress(address)
                 .withConnectionTimeoutMillis(0).withAdditionalHeader(additionalHeader)
@@ -106,11 +99,11 @@ public class CallHomeMountDispatcherTest {
     @Test
     public void canCreateASessionFromAConfiguration() {
         // given
-        CallHomeMountSessionContext mockContext = mock(CallHomeMountSessionContext.class);
-        InetSocketAddress someAddress = InetSocketAddress.createUnresolved("1.2.3.4", 123);
+        final CallHomeMountSessionContext mockContext = mock(CallHomeMountSessionContext.class);
+        final InetSocketAddress someAddress = InetSocketAddress.createUnresolved("1.2.3.4", 123);
         doReturn(mockContext).when(mockSessMgr).getByAddress(eq(someAddress));
 
-        NetconfClientConfiguration someCfg = someConfiguration(someAddress);
+        final NetconfClientConfiguration someCfg = someConfiguration(someAddress);
         // when
         instance.createClient(someCfg);
         // then
@@ -120,10 +113,10 @@ public class CallHomeMountDispatcherTest {
     @Test
     public void noSessionIsCreatedWithoutAContextAvailableForAGivenAddress() {
         // given
-        InetSocketAddress someAddress = InetSocketAddress.createUnresolved("1.2.3.4", 123);
-        NetconfClientConfiguration someCfg = someConfiguration(someAddress);
+        final InetSocketAddress someAddress = InetSocketAddress.createUnresolved("1.2.3.4", 123);
+        final NetconfClientConfiguration someCfg = someConfiguration(someAddress);
         // when
-        Future<NetconfClientSession> future = instance.createClient(someCfg);
+        final Future<NetconfClientSession> future = instance.createClient(someCfg);
         // then
         assertFalse(future.isSuccess());
     }
@@ -131,14 +124,14 @@ public class CallHomeMountDispatcherTest {
     @Test
     public void nodeIsInsertedIntoTopologyWhenSubsystemIsOpened() throws UnknownHostException {
         // given
-        NodeId mockNodeId = mock(NodeId.class);
-        Node mockNode = mock(Node.class);
-        CallHomeMountSessionContext mockDevCtxt = mock(CallHomeMountSessionContext.class);
+        final NodeId mockNodeId = mock(NodeId.class);
+        final Node mockNode = mock(Node.class);
+        final CallHomeMountSessionContext mockDevCtxt = mock(CallHomeMountSessionContext.class);
         doReturn(mockNodeId).when(mockDevCtxt).getId();
         doReturn(mockNode).when(mockDevCtxt).getConfigNode();
         doReturn(mockDevCtxt).when(mockSessMgr).createSession(any(CallHomeProtocolSessionContext.class),
                 any(CallHomeChannelActivator.class), any(CallHomeMountSessionContext.CloseCallback.class));
-        CallHomeChannelActivator activator = mock(CallHomeChannelActivator.class);
+        final CallHomeChannelActivator activator = mock(CallHomeChannelActivator.class);
         instance.createTopology();
         // when
         instance.onNetconfSubsystemOpened(mockProtoSess, activator);
index 8728ce2f4e5c281903317f0a901f8559b5c9f6d3..11e922f34d9220a3f153a3bfce9671f7fbd2f52e 100755 (executable)
     <reference id="clientDispatcherDependency"
                interface="org.opendaylight.netconf.client.NetconfClientDispatcher"
                odl:type="netconf-client-dispatcher"/>
-    <reference id="bindingAwareBroker"
-               interface="org.opendaylight.controller.sal.binding.api.BindingAwareBroker"/>
     <reference id="keepAliveExecutor"
                interface="org.opendaylight.controller.config.threadpool.ScheduledThreadPool"
                odl:type="global-netconf-ssh-scheduled-executor"/>
     <reference id="processingExecutor"
                interface="org.opendaylight.controller.config.threadpool.ThreadPool"
                odl:type="global-netconf-processing-executor"/>
-    <reference id="domBroker"
-               interface="org.opendaylight.controller.sal.core.api.Broker"/>
     <reference id="eventExecutor"
                interface="io.netty.util.concurrent.EventExecutor"
                odl:type="global-event-executor"/>
     <reference id="dataBroker"
                interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"/>
+    <reference id="mountPointService"
+               interface="org.opendaylight.controller.md.sal.dom.api.DOMMountPointService"
+               odl:type="default"/>
 
     <bean id="schemaRepository" class="org.opendaylight.netconf.topology.impl.SchemaRepositoryProviderImpl">
         <argument value="shared-schema-repository-impl"/>
           destroy-method="close">
         <argument value="topology-netconf"/>
         <argument ref="clientDispatcherDependency"/>
-        <argument ref="bindingAwareBroker"/>
-        <argument ref="domBroker"/>
         <argument ref="eventExecutor"/>
         <argument ref="keepAliveExecutor"/>
         <argument ref="processingExecutor"/>
         <argument ref="schemaRepository"/>
         <argument ref="dataBroker"/>
+        <argument ref="mountPointService"/>
     </bean>
 
     <bean id="netconfConnectorFactory" class="org.opendaylight.netconf.topology.impl.NetconfConnectorFactoryImpl"/>
index 1087df67f3b9947845b45c575252e081efc3d2be..3b04d0fa957f6ec6f09de077241137f733c2464e 100644 (file)
@@ -18,11 +18,11 @@ import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import java.util.List;
 import java.util.stream.Collectors;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 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.netconf.sal.connect.api.RemoteDeviceHandler;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
@@ -45,37 +45,26 @@ class MasterSalFacade implements AutoCloseable, RemoteDeviceHandler<NetconfSessi
 
     private final RemoteDeviceId id;
     private final Timeout actorResponseWaitTime;
+    private final NetconfDeviceSalProvider salProvider;
+    private final ActorRef masterActorRef;
+    private final ActorSystem actorSystem;
 
     private SchemaContext remoteSchemaContext = null;
     private NetconfSessionPreferences netconfSessionPreferences = null;
     private DOMRpcService deviceRpc = null;
-    private final NetconfDeviceSalProvider salProvider;
-
-    private final ActorRef masterActorRef;
-    private final ActorSystem actorSystem;
     private DOMDataBroker deviceDataBroker = null;
 
     MasterSalFacade(final RemoteDeviceId id,
-                    final Broker domBroker,
-                    final BindingAwareBroker bindingBroker,
                     final ActorSystem actorSystem,
                     final ActorRef masterActorRef,
-                    final Timeout actorResponseWaitTime) {
+                    final Timeout actorResponseWaitTime,
+                    final DOMMountPointService mountService,
+                    final DataBroker dataBroker) {
         this.id = id;
-        this.salProvider = new NetconfDeviceSalProvider(id);
+        this.salProvider = new NetconfDeviceSalProvider(id, mountService, dataBroker);
         this.actorSystem = actorSystem;
         this.masterActorRef = masterActorRef;
         this.actorResponseWaitTime = actorResponseWaitTime;
-
-        registerToSal(domBroker, bindingBroker);
-    }
-
-    private void registerToSal(final Broker domRegistryDependency, final BindingAwareBroker bindingBroker) {
-        // TODO: remove use of provider, there is possible directly create mount instance and
-        // TODO: NetconfDeviceTopologyAdapter in constructor = less complexity
-
-        domRegistryDependency.registerProvider(salProvider);
-        bindingBroker.registerProvider(salProvider);
     }
 
     @Override
index 6ec40e5747999159fd2d635216e3645305ab254a..e13c5602af45886679df241d4f814efc80b280c3 100644 (file)
@@ -18,6 +18,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
 import org.opendaylight.netconf.topology.singleton.api.NetconfTopologySingletonService;
 import org.opendaylight.netconf.topology.singleton.impl.actors.NetconfNodeActor;
@@ -45,21 +46,26 @@ class NetconfNodeManager
 
     private static final Logger LOG = LoggerFactory.getLogger(NetconfNodeManager.class);
 
+    private final Timeout actorResponseWaitTime;
+    private final DOMMountPointService mountPointService;
+    private final SchemaSourceRegistry schemaRegistry;
+    private final SchemaRepository schemaRepository;
+
     private NetconfTopologySetup setup;
     private ListenerRegistration<NetconfNodeManager> dataChangeListenerRegistration;
     private RemoteDeviceId id;
-    private final SchemaSourceRegistry schemaRegistry;
-    private final SchemaRepository schemaRepository;
     private ActorRef slaveActorRef;
-    private final Timeout actorResponseWaitTime;
+
 
     NetconfNodeManager(final NetconfTopologySetup setup,
-                       final RemoteDeviceId id, final Timeout actorResponseWaitTime) {
+                       final RemoteDeviceId id, final Timeout actorResponseWaitTime,
+                       final DOMMountPointService mountPointService) {
         this.setup = setup;
         this.id = id;
         this.schemaRegistry = setup.getSchemaResourcesDTO().getSchemaRegistry();
         this.schemaRepository = setup.getSchemaResourcesDTO().getSchemaRepository();
         this.actorResponseWaitTime = actorResponseWaitTime;
+        this.mountPointService = mountPointService;
     }
 
     @Override
@@ -134,7 +140,7 @@ class NetconfNodeManager
     private void createActorRef() {
         if (slaveActorRef == null) {
             slaveActorRef = setup.getActorSystem().actorOf(NetconfNodeActor.props(setup, id, schemaRegistry,
-                    schemaRepository, actorResponseWaitTime), id.getName());
+                    schemaRepository, actorResponseWaitTime, mountPointService), id.getName());
         }
     }
 
index 8b2ccf66afb6719d21c7b0f56b8de1c0d99f13fa..31a7f64d6cc021e8d99a5c5fdb9883bc91f17f54 100644 (file)
@@ -19,6 +19,7 @@ import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import javax.annotation.Nonnull;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
 import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
@@ -38,28 +39,30 @@ class NetconfTopologyContext implements ClusterSingletonService {
 
     private final ServiceGroupIdentifier serviceGroupIdent;
     private final Timeout actorResponseWaitTime;
+    private final DOMMountPointService mountService;
+
     private NetconfTopologySetup netconfTopologyDeviceSetup;
     private RemoteDeviceId remoteDeviceId;
     private RemoteDeviceConnector remoteDeviceConnector;
     private NetconfNodeManager netconfNodeManager;
+    private ActorRef masterActorRef;
     private boolean finalClose = false;
     private boolean closed = false;
     private boolean isMaster;
 
-    private ActorRef masterActorRef;
-
     NetconfTopologyContext(final NetconfTopologySetup netconfTopologyDeviceSetup,
                            final ServiceGroupIdentifier serviceGroupIdent,
-                           final Timeout actorResponseWaitTime) {
+                           final Timeout actorResponseWaitTime, final DOMMountPointService mountService) {
         this.netconfTopologyDeviceSetup = Preconditions.checkNotNull(netconfTopologyDeviceSetup);
         this.serviceGroupIdent = serviceGroupIdent;
         this.actorResponseWaitTime = actorResponseWaitTime;
+        this.mountService = mountService;
 
         remoteDeviceId = NetconfTopologyUtils.createRemoteDeviceId(netconfTopologyDeviceSetup.getNode().getNodeId(),
                 netconfTopologyDeviceSetup.getNode().getAugmentation(NetconfNode.class));
 
         remoteDeviceConnector = new RemoteDeviceConnectorImpl(netconfTopologyDeviceSetup, remoteDeviceId,
-                actorResponseWaitTime);
+                actorResponseWaitTime, mountService);
 
         netconfNodeManager = createNodeDeviceManager();
     }
@@ -80,7 +83,7 @@ class NetconfTopologyContext implements ClusterSingletonService {
             final String masterAddress = Cluster.get(netconfTopologyDeviceSetup.getActorSystem()).selfAddress().toString();
             masterActorRef = netconfTopologyDeviceSetup.getActorSystem().actorOf(NetconfNodeActor.props(
                     netconfTopologyDeviceSetup, remoteDeviceId, DEFAULT_SCHEMA_REPOSITORY, DEFAULT_SCHEMA_REPOSITORY,
-                    actorResponseWaitTime),
+                    actorResponseWaitTime, mountService),
                     NetconfTopologyUtils.createMasterActorName(remoteDeviceId.getName(), masterAddress));
 
             remoteDeviceConnector.startRemoteDeviceConnection(masterActorRef);
@@ -108,7 +111,7 @@ class NetconfTopologyContext implements ClusterSingletonService {
 
     private NetconfNodeManager createNodeDeviceManager() {
         final NetconfNodeManager ndm =
-                new NetconfNodeManager(netconfTopologyDeviceSetup, remoteDeviceId, actorResponseWaitTime);
+                new NetconfNodeManager(netconfTopologyDeviceSetup, remoteDeviceId, actorResponseWaitTime, mountService);
         ndm.registerDataTreeChangeListener(netconfTopologyDeviceSetup.getTopologyId(),
                 netconfTopologyDeviceSetup.getNode().getKey());
 
@@ -140,7 +143,8 @@ class NetconfTopologyContext implements ClusterSingletonService {
         if (!isMaster) {
             netconfNodeManager.refreshDevice(netconfTopologyDeviceSetup, remoteDeviceId);
         }
-        remoteDeviceConnector = new RemoteDeviceConnectorImpl(netconfTopologyDeviceSetup, remoteDeviceId, actorResponseWaitTime);
+        remoteDeviceConnector = new RemoteDeviceConnectorImpl(netconfTopologyDeviceSetup, remoteDeviceId,
+                actorResponseWaitTime, mountService);
 
         if (isMaster) {
             final Future<Object> future = Patterns.ask(masterActorRef, new RefreshSetupMasterActorData(
index 0ca6325f6293308ff8a11582173d713c4b33770a..ebaafcf8866a3082a138981b6d33d85fe9799c71 100644 (file)
@@ -29,9 +29,8 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-import org.opendaylight.controller.sal.core.api.Broker;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
 import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
@@ -65,40 +64,37 @@ public class NetconfTopologyManager
     private final Map<InstanceIdentifier<Node>, ClusterSingletonServiceRegistration>
             clusterRegistrations = new HashMap<>();
 
-    private ListenerRegistration<NetconfTopologyManager> dataChangeListenerRegistration;
-
     private final DataBroker dataBroker;
     private final RpcProviderRegistry rpcProviderRegistry;
     private final ClusterSingletonServiceProvider clusterSingletonServiceProvider;
-    private final BindingAwareBroker bindingAwareBroker;
     private final ScheduledThreadPool keepaliveExecutor;
     private final ThreadPool processingExecutor;
-    private final Broker domBroker;
     private final ActorSystem actorSystem;
     private final EventExecutor eventExecutor;
     private final NetconfClientDispatcher clientDispatcher;
     private final String topologyId;
     private final Duration writeTxIdleTimeout;
+    private final DOMMountPointService mountPointService;
+
+    private ListenerRegistration<NetconfTopologyManager> dataChangeListenerRegistration;
 
     public NetconfTopologyManager(final DataBroker dataBroker, final RpcProviderRegistry rpcProviderRegistry,
                                   final ClusterSingletonServiceProvider clusterSingletonServiceProvider,
-                                  final BindingAwareBroker bindingAwareBroker,
                                   final ScheduledThreadPool keepaliveExecutor, final ThreadPool processingExecutor,
-                                  final Broker domBroker, final ActorSystemProvider actorSystemProvider,
-                                  final EventExecutor eventExecutor, final NetconfClientDispatcher clientDispatcher,
-                                  final String topologyId, final Config config) {
+                                  final ActorSystemProvider actorSystemProvider, final EventExecutor eventExecutor,
+                                  final NetconfClientDispatcher clientDispatcher, final String topologyId,
+                                  final Config config, final DOMMountPointService mountPointService) {
         this.dataBroker = Preconditions.checkNotNull(dataBroker);
         this.rpcProviderRegistry = Preconditions.checkNotNull(rpcProviderRegistry);
         this.clusterSingletonServiceProvider = Preconditions.checkNotNull(clusterSingletonServiceProvider);
-        this.bindingAwareBroker = Preconditions.checkNotNull(bindingAwareBroker);
         this.keepaliveExecutor = Preconditions.checkNotNull(keepaliveExecutor);
         this.processingExecutor = Preconditions.checkNotNull(processingExecutor);
-        this.domBroker = Preconditions.checkNotNull(domBroker);
         this.actorSystem = Preconditions.checkNotNull(actorSystemProvider).getActorSystem();
         this.eventExecutor = Preconditions.checkNotNull(eventExecutor);
         this.clientDispatcher = Preconditions.checkNotNull(clientDispatcher);
         this.topologyId = Preconditions.checkNotNull(topologyId);
         this.writeTxIdleTimeout = Duration.apply(config.getWriteTransactionIdleTimeout(), TimeUnit.SECONDS);
+        this.mountPointService = mountPointService;
     }
 
     // Blueprint init method
@@ -155,9 +151,9 @@ public class NetconfTopologyManager
 
         final NetconfTopologyContext newNetconfTopologyContext =
                 new NetconfTopologyContext(createSetup(instanceIdentifier, node), serviceGroupIdent,
-                        actorResponseWaitTime);
+                        actorResponseWaitTime, mountPointService);
 
-        final ClusterSingletonServiceRegistration clusterSingletonServiceRegistration  =
+        final ClusterSingletonServiceRegistration clusterSingletonServiceRegistration =
                 clusterSingletonServiceProvider.registerClusterSingletonService(newNetconfTopologyContext);
 
         clusterRegistrations.put(instanceIdentifier, clusterSingletonServiceRegistration);
@@ -219,8 +215,8 @@ public class NetconfTopologyManager
 
         LOG.debug("Registering datastore listener");
         return dataBroker.registerDataTreeChangeListener(
-                        new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
-                                NetconfTopologyUtils.createTopologyListPath(topologyId).child(Node.class)), this);
+                new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
+                        NetconfTopologyUtils.createTopologyListPath(topologyId).child(Node.class)), this);
     }
 
     private void initTopology(final WriteTransaction wtx, final LogicalDatastoreType datastoreType, final String topologyId) {
@@ -240,10 +236,8 @@ public class NetconfTopologyManager
                 .setInstanceIdentifier(instanceIdentifier)
                 .setRpcProviderRegistry(rpcProviderRegistry)
                 .setNode(node)
-                .setBindingAwareBroker(bindingAwareBroker)
                 .setActorSystem(actorSystem)
                 .setEventExecutor(eventExecutor)
-                .setDomBroker(domBroker)
                 .setKeepaliveExecutor(keepaliveExecutor)
                 .setProcessingExecutor(processingExecutor)
                 .setTopologyId(topologyId)
index 9a9ad5e3572a9aca70c1a08c70b7cb0722c50a8e..02f9fe8aba3131a4a6ef86599a2f3511f9ba5a70 100644 (file)
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import javax.annotation.Nullable;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.netconf.api.NetconfMessage;
 import org.opendaylight.netconf.client.NetconfClientSessionListener;
 import org.opendaylight.netconf.client.conf.NetconfClientConfiguration;
@@ -69,21 +70,24 @@ public class RemoteDeviceConnectorImpl implements RemoteDeviceConnector {
 
     private static final Logger LOG = LoggerFactory.getLogger(RemoteDeviceConnectorImpl.class);
 
-    private final Timeout actorResponseWaitTime;
-
     // Initializes default constant instances for the case when the default schema repository
     // directory cache/schema is used.
 
     private final NetconfTopologySetup netconfTopologyDeviceSetup;
     private final RemoteDeviceId remoteDeviceId;
+    private final DOMMountPointService mountService;
+    private final Timeout actorResponseWaitTime;
+
     private NetconfConnectorDTO deviceCommunicatorDTO;
 
     public RemoteDeviceConnectorImpl(final NetconfTopologySetup netconfTopologyDeviceSetup,
-                                     final RemoteDeviceId remoteDeviceId, final Timeout actorResponseWaitTime) {
+                                     final RemoteDeviceId remoteDeviceId, final Timeout actorResponseWaitTime,
+                                     final DOMMountPointService mountService) {
 
         this.netconfTopologyDeviceSetup = Preconditions.checkNotNull(netconfTopologyDeviceSetup);
         this.remoteDeviceId = remoteDeviceId;
         this.actorResponseWaitTime = actorResponseWaitTime;
+        this.mountService = mountService;
     }
 
     @Override
@@ -138,8 +142,8 @@ public class RemoteDeviceConnectorImpl implements RemoteDeviceConnector {
                 ? NetconfTopologyUtils.DEFAULT_RECONNECT_ON_CHANGED_SCHEMA : node.isReconnectOnChangedSchema();
 
         RemoteDeviceHandler<NetconfSessionPreferences> salFacade = new MasterSalFacade(remoteDeviceId,
-                netconfTopologyDeviceSetup.getDomBroker(), netconfTopologyDeviceSetup.getBindingAwareBroker(),
-                netconfTopologyDeviceSetup.getActorSystem(), deviceContextActorRef, actorResponseWaitTime);
+                netconfTopologyDeviceSetup.getActorSystem(), deviceContextActorRef, actorResponseWaitTime,
+                mountService, netconfTopologyDeviceSetup.getDataBroker());
         if (keepaliveDelay > 0) {
             LOG.info("{}: Adding keepalive facade.", remoteDeviceId);
             salFacade = new KeepaliveSalFacade(remoteDeviceId, salFacade,
index 92d7e1a36ac6f8228075935ae6d32d0515c2a366..ed4a27530c807de19270e24d861716765f516c49 100644 (file)
@@ -11,8 +11,8 @@ 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.DOMMountPointService;
 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;
@@ -26,25 +26,17 @@ public class SlaveSalFacade {
 
     private final RemoteDeviceId id;
     private final NetconfDeviceSalProvider salProvider;
-
     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.salProvider = new NetconfDeviceSalProvider(id, mountPointService);
         this.actorSystem = actorSystem;
         this.actorResponseWaitTime = actorResponseWaitTime;
-
-        registerToSal(domBroker);
-    }
-
-    private void registerToSal(final Broker domRegistryDependency) {
-        domRegistryDependency.registerProvider(salProvider);
-
     }
 
     public void registerSlaveMountPoint(final SchemaContext remoteSchemaContext, final DOMRpcService deviceRpc,
index 46eabd0c3fae848fcb8dae9d316b1771f6bd3d85..2d396eb2f37634f1b3fe343559cf913993dbf505 100644 (file)
@@ -27,6 +27,7 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcException;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
@@ -75,6 +76,7 @@ public class NetconfNodeActor extends UntypedActor {
 
     private final SchemaSourceRegistry schemaRegistry;
     private final SchemaRepository schemaRepository;
+    private final DOMMountPointService mountPointService;
     private final Timeout actorResponseWaitTime;
     private final Duration writeTxIdleTimeout;
 
@@ -90,20 +92,24 @@ public class NetconfNodeActor extends UntypedActor {
 
     public static Props props(final NetconfTopologySetup setup,
                               final RemoteDeviceId id, final SchemaSourceRegistry schemaRegistry,
-                              final SchemaRepository schemaRepository, final Timeout actorResponseWaitTime) {
+                              final SchemaRepository schemaRepository, final Timeout actorResponseWaitTime,
+                              final DOMMountPointService mountPointService) {
         return Props.create(NetconfNodeActor.class, () ->
-                new NetconfNodeActor(setup, id, schemaRegistry, schemaRepository, actorResponseWaitTime));
+                new NetconfNodeActor(setup, id, schemaRegistry, schemaRepository, actorResponseWaitTime,
+                        mountPointService));
     }
 
     private NetconfNodeActor(final NetconfTopologySetup setup,
                              final RemoteDeviceId id, final SchemaSourceRegistry schemaRegistry,
-                             final SchemaRepository schemaRepository, final Timeout actorResponseWaitTime) {
+                             final SchemaRepository schemaRepository, final Timeout actorResponseWaitTime,
+                             final DOMMountPointService mountPointService) {
         this.setup = setup;
         this.id = id;
         this.schemaRegistry = schemaRegistry;
         this.schemaRepository = schemaRepository;
         this.actorResponseWaitTime = actorResponseWaitTime;
         this.writeTxIdleTimeout = setup.getIdleTimeout();
+        this.mountPointService = mountPointService;
     }
 
     @Override
@@ -236,7 +242,8 @@ public class NetconfNodeActor extends UntypedActor {
             slaveSalManager.close();
         }
         closeSchemaSourceRegistrations();
-        slaveSalManager = new SlaveSalFacade(id, setup.getDomBroker(), setup.getActorSystem(), actorResponseWaitTime);
+        slaveSalManager = new SlaveSalFacade(id, setup.getActorSystem(), actorResponseWaitTime,
+                mountPointService);
 
         final CheckedFuture<SchemaContext, SchemaResolutionException> remoteSchemaContext =
                 getSchemaContext(masterReference);
index be57ce35aa7b0ae6dcf4608f696653cc8d263e5a..cee8c0d80774b077665c771a27a36142439872b1 100644 (file)
@@ -13,9 +13,7 @@ import io.netty.util.concurrent.EventExecutor;
 import org.opendaylight.controller.config.threadpool.ScheduledThreadPool;
 import org.opendaylight.controller.config.threadpool.ThreadPool;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-import org.opendaylight.controller.sal.core.api.Broker;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
 import org.opendaylight.netconf.client.NetconfClientDispatcher;
 import org.opendaylight.netconf.sal.connect.netconf.NetconfDevice;
@@ -30,10 +28,8 @@ public class NetconfTopologySetup {
     private final DataBroker dataBroker;
     private final InstanceIdentifier<Node> instanceIdentifier;
     private final Node node;
-    private final BindingAwareBroker bindingAwareBroker;
     private final ScheduledThreadPool keepaliveExecutor;
     private final ThreadPool processingExecutor;
-    private final Broker domBroker;
     private final ActorSystem actorSystem;
     private final EventExecutor eventExecutor;
     private final NetconfClientDispatcher netconfClientDispatcher;
@@ -47,10 +43,8 @@ public class NetconfTopologySetup {
         this.dataBroker = builder.getDataBroker();
         this.instanceIdentifier = builder.getInstanceIdentifier();
         this.node = builder.getNode();
-        this.bindingAwareBroker = builder.getBindingAwareBroker();
         this.keepaliveExecutor = builder.getKeepaliveExecutor();
         this.processingExecutor = builder.getProcessingExecutor();
-        this.domBroker = builder.getDomBroker();
         this.actorSystem = builder.getActorSystem();
         this.eventExecutor = builder.getEventExecutor();
         this.netconfClientDispatcher = builder.getNetconfClientDispatcher();
@@ -79,10 +73,6 @@ public class NetconfTopologySetup {
         return node;
     }
 
-    public BindingAwareBroker getBindingAwareBroker() {
-        return bindingAwareBroker;
-    }
-
     public ThreadPool getProcessingExecutor() {
         return processingExecutor;
     }
@@ -91,10 +81,6 @@ public class NetconfTopologySetup {
         return keepaliveExecutor;
     }
 
-    public Broker getDomBroker() {
-        return domBroker;
-    }
-
     public ActorSystem getActorSystem() {
         return actorSystem;
     }
@@ -126,10 +112,8 @@ public class NetconfTopologySetup {
         private DataBroker dataBroker;
         private InstanceIdentifier<Node> instanceIdentifier;
         private Node node;
-        private BindingAwareBroker bindingAwareBroker;
         private ScheduledThreadPool keepaliveExecutor;
         private ThreadPool processingExecutor;
-        private Broker domBroker;
         private ActorSystem actorSystem;
         private EventExecutor eventExecutor;
         private String topologyId;
@@ -190,15 +174,6 @@ public class NetconfTopologySetup {
             return new NetconfTopologySetup(this);
         }
 
-        private BindingAwareBroker getBindingAwareBroker() {
-            return bindingAwareBroker;
-        }
-
-        public NetconfTopologySetupBuilder setBindingAwareBroker(final BindingAwareBroker bindingAwareBroker) {
-            this.bindingAwareBroker = bindingAwareBroker;
-            return this;
-        }
-
         private ScheduledThreadPool getKeepaliveExecutor() {
             return keepaliveExecutor;
         }
@@ -217,15 +192,6 @@ public class NetconfTopologySetup {
             return this;
         }
 
-        private Broker getDomBroker() {
-            return domBroker;
-        }
-
-        public NetconfTopologySetupBuilder setDomBroker(final Broker domBroker) {
-            this.domBroker = domBroker;
-            return this;
-        }
-
         private ActorSystem getActorSystem() {
             return actorSystem;
         }
index 977018f62c57d8689f0f81042e76e3814062137d..8c60682605e6f2534db9cc9bbdcb69cd67369368 100644 (file)
@@ -17,16 +17,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
                interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"/>
     <reference id="clusterSingletonService"
                interface="org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider"/>
-    <reference id="bindingAwareBroker"
-               interface="org.opendaylight.controller.sal.binding.api.BindingAwareBroker"/>
     <reference id="keepAliveExecutor"
                interface="org.opendaylight.controller.config.threadpool.ScheduledThreadPool"
                odl:type="global-netconf-ssh-scheduled-executor"/>
     <reference id="processingExecutor"
                interface="org.opendaylight.controller.config.threadpool.ThreadPool"
                odl:type="global-netconf-processing-executor"/>
-    <reference id="domBroker"
-               interface="org.opendaylight.controller.sal.core.api.Broker"/>
     <reference id="actorSystemProvider"
                interface="org.opendaylight.controller.cluster.ActorSystemProvider"/>
     <reference id="eventExecutor"
@@ -35,6 +31,9 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <reference id="clientDispatcherDependency"
                interface="org.opendaylight.netconf.client.NetconfClientDispatcher"
                odl:type="netconf-client-dispatcher"/>
+    <reference id="mountPointService"
+               interface="org.opendaylight.controller.md.sal.dom.api.DOMMountPointService"
+               odl:type="default"/>
     <odl:clustered-app-config
             id="singletonConfig"
             binding-class="org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.topology.singleton.config.rev170419.Config"
@@ -46,15 +45,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
         <argument ref="dataBroker"/>
         <argument ref="rpcRegistry"/>
         <argument ref="clusterSingletonService"/>
-        <argument ref="bindingAwareBroker"/>
         <argument ref="keepAliveExecutor"/>
         <argument ref="processingExecutor"/>
-        <argument ref="domBroker"/>
         <argument ref="actorSystemProvider"/>
         <argument ref="eventExecutor"/>
         <argument ref="clientDispatcherDependency"/>
         <argument value="topology-netconf"/>
         <argument ref="singletonConfig"/>
+        <argument ref="mountPointService"/>
     </bean>
     <service ref="netconfTopologyManager"
              interface="org.opendaylight.netconf.topology.singleton.api.NetconfTopologySingletonService"/>
index 02e4440dc2a67ab8ed8528f47afca50c3fa1f027..39f8fb4c50bd9b918fcfb60aae55479377898a5b 100644 (file)
@@ -51,12 +51,13 @@ import org.junit.rules.ExpectedException;
 import org.mockito.ArgumentMatcher;
 import org.mockito.Mock;
 import org.opendaylight.controller.cluster.schema.provider.impl.YangTextSchemaSourceSerializationProxy;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcException;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
 import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult;
-import org.opendaylight.controller.sal.core.api.Broker;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
 import org.opendaylight.netconf.topology.singleton.impl.actors.NetconfNodeActor;
 import org.opendaylight.netconf.topology.singleton.impl.utils.ClusteringRpcException;
@@ -103,6 +104,10 @@ public class NetconfNodeActorTest {
 
     @Mock
     private DOMRpcService domRpcService;
+    @Mock
+    private DOMMountPointService mountPointService;
+    @Mock
+    private DataBroker dataBroker;
 
     @Before
     public void setup() throws UnknownHostException {
@@ -113,7 +118,7 @@ public class NetconfNodeActorTest {
         final NetconfTopologySetup setup = mock(NetconfTopologySetup.class);
 
         final Props props = NetconfNodeActor.props(setup, remoteDeviceId, DEFAULT_SCHEMA_REPOSITORY,
-                DEFAULT_SCHEMA_REPOSITORY, TIMEOUT);
+                DEFAULT_SCHEMA_REPOSITORY, TIMEOUT, mountPointService);
 
         system = ActorSystem.create();
 
@@ -136,7 +141,7 @@ public class NetconfNodeActorTest {
 
         final Future<Object> initialDataToActor =
                 Patterns.ask(masterRef, new CreateInitialMasterActorData(domDataBroker, sourceIdentifiers,
-                                domRpcService), TIMEOUT);
+                        domRpcService), TIMEOUT);
 
         final Object success = Await.result(initialDataToActor, TIMEOUT.duration());
         assertTrue(success instanceof MasterActorDataInitialized);
@@ -169,7 +174,7 @@ public class NetconfNodeActorTest {
 
         final Future<Object> initialDataToActor =
                 Patterns.ask(masterRef, new CreateInitialMasterActorData(domDataBroker, sourceIdentifiers,
-                                domRpcService), TIMEOUT);
+                        domRpcService), TIMEOUT);
 
         final Object successInit = Await.result(initialDataToActor, TIMEOUT.duration());
 
@@ -191,7 +196,6 @@ public class NetconfNodeActorTest {
     @Test
     public void testReceiveRegisterMountpoint() throws Exception {
         final NetconfTopologySetup setup = mock(NetconfTopologySetup.class);
-        doReturn(mock(Broker.class)).when(setup).getDomBroker();
         final RevisionSourceIdentifier yang1 = RevisionSourceIdentifier.create("yang1");
         final RevisionSourceIdentifier yang2 = RevisionSourceIdentifier.create("yang2");
         final SchemaSourceRegistry registry = mock(SchemaSourceRegistry.class);
@@ -207,7 +211,8 @@ public class NetconfNodeActorTest {
                 Futures.makeChecked(schemaContextFuture, e -> new SchemaResolutionException("fail", e));
         doReturn(checkedFuture).when(schemaContextFactory).createSchemaContext(any());
         final ActorRef slaveRef =
-                system.actorOf(NetconfNodeActor.props(setup, remoteDeviceId, registry, schemaRepository, TIMEOUT));
+                system.actorOf(NetconfNodeActor.props(setup, remoteDeviceId, registry, schemaRepository, TIMEOUT,
+                        mountPointService));
         final List<SourceIdentifier> sources = ImmutableList.of(yang1, yang2);
         slaveRef.tell(new RegisterMountPoint(sources), masterRef);
 
@@ -226,7 +231,7 @@ public class NetconfNodeActorTest {
         final SchemaRepository schemaRepository = mock(SchemaRepository.class);
         final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("testID", Optional.absent());
         final Props props = NetconfNodeActor.props(mock(NetconfTopologySetup.class), remoteDeviceId,
-                DEFAULT_SCHEMA_REPOSITORY, schemaRepository, TIMEOUT);
+                DEFAULT_SCHEMA_REPOSITORY, schemaRepository, TIMEOUT, mountPointService);
 
         final ActorRef actorRefSchemaRepo = TestActorRef.create(system, props, "master_mocked_schema_repository");
         final ActorContext actorContext = mock(ActorContext.class);
index 060ed0e987c964b666864add576c872dafc26773..ffc52a5f4663184c2d9f01e575f378a9af9b4ba2 100644 (file)
@@ -40,9 +40,8 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-import org.opendaylight.controller.sal.core.api.Broker;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
 import org.opendaylight.netconf.client.NetconfClientDispatcher;
@@ -78,18 +77,17 @@ public class NetconfTopologyManagerTest {
         initMocks(this);
 
         final RpcProviderRegistry rpcProviderRegistry = mock(RpcProviderRegistry.class);
-        final BindingAwareBroker bindingAwareBroker = mock(BindingAwareBroker.class);
         final ScheduledThreadPool keepaliveExecutor = mock(ScheduledThreadPool.class);
         final ThreadPool processingExecutor = mock(ThreadPool.class);
-        final Broker domBroker = mock(Broker.class);
         final ActorSystemProvider actorSystemProvider = mock(ActorSystemProvider.class);
         final EventExecutor eventExecutor = mock(EventExecutor.class);
         final NetconfClientDispatcher clientDispatcher = mock(NetconfClientDispatcher.class);
+        final DOMMountPointService mountPointService = mock(DOMMountPointService.class);
 
         final Config config = new ConfigBuilder().setWriteTransactionIdleTimeout(0).build();
         netconfTopologyManager = new NetconfTopologyManager(dataBroker, rpcProviderRegistry,
-                clusterSingletonServiceProvider, bindingAwareBroker, keepaliveExecutor, processingExecutor, domBroker,
-                actorSystemProvider, eventExecutor, clientDispatcher, topologyId, config);
+                clusterSingletonServiceProvider, keepaliveExecutor, processingExecutor,
+                actorSystemProvider, eventExecutor, clientDispatcher, topologyId, config, mountPointService);
     }
 
     @Test
index fbdde9466d0778239a8fc825cd0b5f42a08b5aaa..74559a0af2e66e6b30ec9a416a3d34ee0904ec3c 100644 (file)
@@ -11,7 +11,10 @@ package org.opendaylight.netconf.topology.singleton.impl;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -20,6 +23,7 @@ import static org.mockito.MockitoAnnotations.initMocks;
 import akka.actor.ActorRef;
 import akka.actor.ActorSystem;
 import akka.util.Timeout;
+import com.google.common.util.concurrent.Futures;
 import io.netty.util.concurrent.EventExecutor;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
@@ -30,10 +34,13 @@ import org.junit.Test;
 import org.mockito.Mock;
 import org.opendaylight.controller.config.threadpool.ScheduledThreadPool;
 import org.opendaylight.controller.config.threadpool.ThreadPool;
+import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-import org.opendaylight.controller.sal.core.api.Broker;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
 import org.opendaylight.netconf.client.NetconfClientDispatcher;
 import org.opendaylight.netconf.client.NetconfClientSessionListener;
@@ -74,18 +81,12 @@ public class RemoteDeviceConnectorImplTest {
     @Mock
     private ClusterSingletonServiceProvider clusterSingletonServiceProvider;
 
-    @Mock
-    private BindingAwareBroker bindingAwareBroker;
-
     @Mock
     private ScheduledThreadPool keepaliveExecutor;
 
     @Mock
     private ThreadPool processingExecutor;
 
-    @Mock
-    private Broker domBroker;
-
     @Mock
     private ActorSystem actorSystem;
 
@@ -95,6 +96,15 @@ public class RemoteDeviceConnectorImplTest {
     @Mock
     private NetconfClientDispatcher clientDispatcher;
 
+    @Mock
+    private DOMMountPointService mountPointService;
+
+    @Mock
+    private BindingTransactionChain txChain;
+
+    @Mock
+    private WriteTransaction writeTx;
+
     private NetconfTopologySetup.NetconfTopologySetupBuilder builder;
     private RemoteDeviceId remoteDeviceId;
 
@@ -105,14 +115,17 @@ public class RemoteDeviceConnectorImplTest {
         remoteDeviceId = new RemoteDeviceId(TOPOLOGY_ID,
                 new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 9999));
 
+        doReturn(txChain).when(dataBroker).createTransactionChain(any(TransactionChainListener.class));
+        doReturn(writeTx).when(txChain).newWriteOnlyTransaction();
+        doNothing().when(writeTx).merge(eq(LogicalDatastoreType.OPERATIONAL), any(), any());
+        doReturn("Some object").when(writeTx).getIdentifier();
+        doReturn(Futures.immediateCheckedFuture(null)).when(writeTx).submit();
         builder = new NetconfTopologySetup.NetconfTopologySetupBuilder();
         builder.setDataBroker(dataBroker);
         builder.setRpcProviderRegistry(rpcProviderRegistry);
         builder.setClusterSingletonServiceProvider(clusterSingletonServiceProvider);
-        builder.setBindingAwareBroker(bindingAwareBroker);
         builder.setKeepaliveExecutor(keepaliveExecutor);
         builder.setProcessingExecutor(processingExecutor);
-        builder.setDomBroker(domBroker);
         builder.setActorSystem(actorSystem);
         builder.setEventExecutor(eventExecutor);
         builder.setNetconfClientDispatcher(clientDispatcher);
@@ -137,11 +150,12 @@ public class RemoteDeviceConnectorImplTest {
         builder.setNode(node);
 
 
-        final NetconfDeviceCommunicator communicator = mock (NetconfDeviceCommunicator.class);
+        final NetconfDeviceCommunicator communicator = mock(NetconfDeviceCommunicator.class);
         final RemoteDeviceHandler salFacade = mock(RemoteDeviceHandler.class);
 
         final TestingRemoteDeviceConnectorImpl remoteDeviceConnection =
-                new TestingRemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, communicator, salFacade, TIMEOUT);
+                new TestingRemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, communicator, salFacade, TIMEOUT,
+                        mountPointService);
 
         final ActorRef masterRef = mock(ActorRef.class);
 
@@ -174,7 +188,7 @@ public class RemoteDeviceConnectorImplTest {
         final Node node = new NodeBuilder().setNodeId(NODE_ID).addAugmentation(NetconfNode.class, netconfNode).build();
         builder.setSchemaResourceDTO(NetconfTopologyUtils.setupSchemaCacheDTO(node));
         final RemoteDeviceConnectorImpl remoteDeviceConnection =
-                new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, TIMEOUT);
+                new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, TIMEOUT, mountPointService);
 
         final ActorRef masterRef = mock(ActorRef.class);
 
@@ -208,7 +222,7 @@ public class RemoteDeviceConnectorImplTest {
         builder.setSchemaResourceDTO(NetconfTopologyUtils.setupSchemaCacheDTO(node));
 
         final RemoteDeviceConnectorImpl remoteDeviceConnection =
-                new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, TIMEOUT);
+                new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, TIMEOUT, mountPointService);
 
         final ActorRef masterRef = mock(ActorRef.class);
 
@@ -235,7 +249,7 @@ public class RemoteDeviceConnectorImplTest {
                 .build();
 
         final RemoteDeviceConnectorImpl remoteDeviceConnection =
-                new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, TIMEOUT);
+                new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, TIMEOUT, mountPointService);
 
         final NetconfReconnectingClientConfiguration defaultClientConfig =
                 remoteDeviceConnection.getClientConfig(listener, testingNode);
index d2a515b1e04db97190bfdea5febfed00ce9af673..96eb505844f9fa8d83743bc7ab6837fc3b6cc8e9 100644 (file)
@@ -14,6 +14,7 @@ import static org.mockito.Mockito.doReturn;
 import akka.actor.ActorRef;
 import akka.util.Timeout;
 import com.google.common.util.concurrent.Futures;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.netconf.sal.connect.api.RemoteDeviceHandler;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
@@ -31,8 +32,9 @@ class TestingRemoteDeviceConnectorImpl extends RemoteDeviceConnectorImpl {
                                      final RemoteDeviceId remoteDeviceId,
                                      final NetconfDeviceCommunicator communicator,
                                      final RemoteDeviceHandler salFacade,
-                                     final Timeout actorResponseWaitTime) {
-        super(netconfTopologyDeviceSetup, remoteDeviceId, actorResponseWaitTime);
+                                     final Timeout actorResponseWaitTime,
+                                     final DOMMountPointService mountPointService) {
+        super(netconfTopologyDeviceSetup, remoteDeviceId, actorResponseWaitTime, mountPointService);
         this.communicator = communicator;
         this.salFacade = salFacade;
     }
index e90fc345b0821acff2feeea0cd1526fd9b2499dd..de868f785f300b55fadfba2f7c3a98ed23203d7a 100644 (file)
@@ -40,6 +40,7 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
 import org.opendaylight.netconf.topology.singleton.impl.ProxyDOMDataBroker;
@@ -68,14 +69,16 @@ public class ReadOnlyTransactionTest {
     private ActorRef masterRef;
     private ProxyDOMDataBroker slaveDataBroker;
     private List<SourceIdentifier> sourceIdentifiers;
+    private YangInstanceIdentifier instanceIdentifier;
+    private LogicalDatastoreType storeType;
     @Mock
     private DOMDataBroker deviceDataBroker;
     @Mock
     private DOMDataReadOnlyTransaction readTx;
     @Mock
     private DOMRpcService domRpcService;
-    private YangInstanceIdentifier instanceIdentifier;
-    private LogicalDatastoreType storeType;
+    @Mock
+    private DOMMountPointService mountPointService;
 
     @Before
     public void setup() throws Exception {
@@ -88,7 +91,7 @@ public class ReadOnlyTransactionTest {
 
         final NetconfTopologySetup setup = mock(NetconfTopologySetup.class);
         final Props props = NetconfNodeActor.props(setup, remoteDeviceId, DEFAULT_SCHEMA_REPOSITORY,
-                DEFAULT_SCHEMA_REPOSITORY, TIMEOUT);
+                DEFAULT_SCHEMA_REPOSITORY, TIMEOUT, mountPointService);
 
         masterRef = TestActorRef.create(system, props, "master_read");
 
index ce6bf3eb1f893547f5198e202a19625786e5d729..c50cef45a5ee3e4f6cfa114170f94f3119731fba 100644 (file)
@@ -46,6 +46,7 @@ import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFaile
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
 import org.opendaylight.netconf.topology.singleton.impl.ProxyDOMDataBroker;
@@ -77,6 +78,8 @@ public class ReadWriteTransactionTest {
     private DOMDataReadWriteTransaction readWriteTx;
     @Mock
     private DOMRpcService domRpcService;
+    @Mock
+    private DOMMountPointService mountPointService;
     private ActorRef masterRef;
     private ProxyDOMDataBroker slaveDataBroker;
     private List<SourceIdentifier> sourceIdentifiers;
@@ -96,7 +99,7 @@ public class ReadWriteTransactionTest {
         final NetconfTopologySetup setup = mock(NetconfTopologySetup.class);
         doReturn(Duration.apply(0, TimeUnit.SECONDS)).when(setup).getIdleTimeout();
         final Props props = NetconfNodeActor.props(setup, remoteDeviceId, DEFAULT_SCHEMA_REPOSITORY,
-                DEFAULT_SCHEMA_REPOSITORY, TIMEOUT);
+                DEFAULT_SCHEMA_REPOSITORY, TIMEOUT, mountPointService);
 
         masterRef = TestActorRef.create(system, props, "master_read");
 
index 46081a96f2a196f36340fc01c97c389a7e9e654f..4ae07d2cf47f61522992d209f55f3810285a4807 100644 (file)
@@ -39,11 +39,13 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.mockito.Mock;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
 import org.opendaylight.netconf.topology.singleton.impl.ProxyDOMDataBroker;
@@ -69,15 +71,18 @@ public class WriteOnlyTransactionTest {
     @Rule
     public final ExpectedException exception = ExpectedException.none();
 
+    private ActorRef masterRef;
+    private ProxyDOMDataBroker slaveDataBroker;
+    private List<SourceIdentifier> sourceIdentifiers;
     @Mock
     private DOMDataBroker deviceDataBroker;
     @Mock
     private DOMDataWriteTransaction writeTx;
     @Mock
     private DOMRpcService domRpcService;
-    private ActorRef masterRef;
-    private ProxyDOMDataBroker slaveDataBroker;
-    private List<SourceIdentifier> sourceIdentifiers;
+    @Mock
+    private DOMMountPointService mountPointService;
+
     private NormalizedNode<?, ?> testNode;
     private YangInstanceIdentifier instanceIdentifier;
     private LogicalDatastoreType storeType;
@@ -94,7 +99,7 @@ public class WriteOnlyTransactionTest {
         final NetconfTopologySetup setup = mock(NetconfTopologySetup.class);
         doReturn(Duration.apply(0, TimeUnit.SECONDS)).when(setup).getIdleTimeout();
         final Props props = NetconfNodeActor.props(setup, remoteDeviceId, DEFAULT_SCHEMA_REPOSITORY,
-                DEFAULT_SCHEMA_REPOSITORY, TIMEOUT);
+                DEFAULT_SCHEMA_REPOSITORY, TIMEOUT, mountPointService);
 
         masterRef = TestActorRef.create(system, props, "master_read");
 
index 836d9bdb10b3524c95a8aa76dd26ad0aef3b571f..68a6f11f9fd7319abafd8ece766d76dc5263a173 100644 (file)
@@ -27,8 +27,7 @@ import java.util.Map;
 import org.opendaylight.controller.config.threadpool.ScheduledThreadPool;
 import org.opendaylight.controller.config.threadpool.ThreadPool;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.core.api.Broker;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.netconf.api.NetconfMessage;
 import org.opendaylight.netconf.client.NetconfClientDispatcher;
 import org.opendaylight.netconf.client.NetconfClientSessionListener;
@@ -154,13 +153,12 @@ public abstract class AbstractNetconfTopology implements NetconfTopology {
 
     protected final String topologyId;
     private final NetconfClientDispatcher clientDispatcher;
-    protected final BindingAwareBroker bindingAwareBroker;
-    protected final Broker domBroker;
     private final EventExecutor eventExecutor;
     protected final ScheduledThreadPool keepaliveExecutor;
     protected final ThreadPool processingExecutor;
     protected final SharedSchemaRepository sharedSchemaRepository;
     protected final DataBroker dataBroker;
+    protected final DOMMountPointService mountPointService;
 
     protected SchemaSourceRegistry schemaRegistry = DEFAULT_SCHEMA_REPOSITORY;
     protected SchemaRepository schemaRepository = DEFAULT_SCHEMA_REPOSITORY;
@@ -169,19 +167,17 @@ public abstract class AbstractNetconfTopology implements NetconfTopology {
     protected final HashMap<NodeId, NetconfConnectorDTO> activeConnectors = new HashMap<>();
 
     protected AbstractNetconfTopology(final String topologyId, final NetconfClientDispatcher clientDispatcher,
-                                      final BindingAwareBroker bindingAwareBroker, final Broker domBroker,
                                       final EventExecutor eventExecutor, final ScheduledThreadPool keepaliveExecutor,
                                       final ThreadPool processingExecutor, final SchemaRepositoryProvider schemaRepositoryProvider,
-                                      final DataBroker dataBroker) {
+                                      final DataBroker dataBroker, final DOMMountPointService mountPointService) {
         this.topologyId = topologyId;
         this.clientDispatcher = clientDispatcher;
-        this.bindingAwareBroker = bindingAwareBroker;
-        this.domBroker = domBroker;
         this.eventExecutor = eventExecutor;
         this.keepaliveExecutor = keepaliveExecutor;
         this.processingExecutor = processingExecutor;
         this.sharedSchemaRepository = schemaRepositoryProvider.getSharedSchemaRepository();
         this.dataBroker = dataBroker;
+        this.mountPointService = mountPointService;
     }
 
     public void setSchemaRegistry(final SchemaSourceRegistry schemaRegistry) {
@@ -258,7 +254,7 @@ public abstract class AbstractNetconfTopology implements NetconfTopology {
         final RemoteDeviceId remoteDeviceId = new RemoteDeviceId(nodeId.getValue(), address);
 
         RemoteDeviceHandler<NetconfSessionPreferences> salFacade =
-                createSalFacade(remoteDeviceId, domBroker, bindingAwareBroker);
+                createSalFacade(remoteDeviceId);
 
         if (keepaliveDelay > 0) {
             LOG.warn("Adding keepalive facade, for device {}", nodeId);
@@ -423,7 +419,7 @@ public abstract class AbstractNetconfTopology implements NetconfTopology {
                 .build();
     }
 
-    protected abstract RemoteDeviceHandler<NetconfSessionPreferences> createSalFacade(final RemoteDeviceId id, final Broker domBroker, final BindingAwareBroker bindingBroker);
+    protected abstract RemoteDeviceHandler<NetconfSessionPreferences> createSalFacade(final RemoteDeviceId id);
 
     private InetSocketAddress getSocketAddress(final Host host, final int port) {
         if(host.getDomainName() != null) {
index fc4be281236039ea0ab19005bbdb653e5565d55e..243f09a77f8e1a49837e686d7ce102f27a825096 100644 (file)
@@ -22,8 +22,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.core.api.Broker;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.netconf.client.NetconfClientDispatcher;
 import org.opendaylight.netconf.sal.connect.api.RemoteDeviceHandler;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
@@ -50,19 +49,17 @@ public class NetconfTopologyImpl extends AbstractNetconfTopology implements Data
     private ListenerRegistration<NetconfTopologyImpl> datastoreListenerRegistration = null;
 
     public NetconfTopologyImpl(final String topologyId, final NetconfClientDispatcher clientDispatcher,
-                               final BindingAwareBroker bindingAwareBroker, final Broker domBroker,
                                final EventExecutor eventExecutor, final ScheduledThreadPool keepaliveExecutor,
                                final ThreadPool processingExecutor, final SchemaRepositoryProvider schemaRepositoryProvider,
-                               final DataBroker dataBroker) {
-        super(topologyId, clientDispatcher,
-                bindingAwareBroker, domBroker, eventExecutor,
-                keepaliveExecutor, processingExecutor, schemaRepositoryProvider, dataBroker);
+                               final DataBroker dataBroker, final DOMMountPointService mountPointService) {
+        super(topologyId, clientDispatcher, eventExecutor, keepaliveExecutor, processingExecutor,
+                schemaRepositoryProvider, dataBroker, mountPointService);
     }
 
     @Override
     public void close() throws Exception {
         // close all existing connectors, delete whole topology in datastore?
-        for (NetconfConnectorDTO connectorDTO : activeConnectors.values()) {
+        for (final NetconfConnectorDTO connectorDTO : activeConnectors.values()) {
             connectorDTO.close();
         }
         activeConnectors.clear();
@@ -74,8 +71,8 @@ public class NetconfTopologyImpl extends AbstractNetconfTopology implements Data
     }
 
     @Override
-    protected RemoteDeviceHandler<NetconfSessionPreferences> createSalFacade(RemoteDeviceId id, Broker domBroker, BindingAwareBroker bindingBroker) {
-        return new NetconfDeviceSalFacade(id, domBroker, bindingAwareBroker);
+    protected RemoteDeviceHandler<NetconfSessionPreferences> createSalFacade(final RemoteDeviceId id) {
+        return new NetconfDeviceSalFacade(id, mountPointService, dataBroker);
     }
 
     /**
@@ -87,12 +84,12 @@ public class NetconfTopologyImpl extends AbstractNetconfTopology implements Data
         initTopology(wtx, LogicalDatastoreType.OPERATIONAL);
         Futures.addCallback(wtx.submit(), new FutureCallback<Void>() {
             @Override
-            public void onSuccess(Void result) {
+            public void onSuccess(final Void result) {
                 LOG.debug("topology initialization successful");
             }
 
             @Override
-            public void onFailure(Throwable t) {
+            public void onFailure(final Throwable t) {
                 LOG.error("Unable to initialize netconf-topology, {}", t);
             }
         });
@@ -107,8 +104,8 @@ public class NetconfTopologyImpl extends AbstractNetconfTopology implements Data
     }
 
     @Override
-    public void onDataTreeChanged(@Nonnull Collection<DataTreeModification<Node>> collection) {
-        for (DataTreeModification<Node> change : collection) {
+    public void onDataTreeChanged(@Nonnull final Collection<DataTreeModification<Node>> collection) {
+        for (final DataTreeModification<Node> change : collection) {
             final DataObjectModification<Node> rootNode = change.getRootNode();
             switch (rootNode.getModificationType()) {
                 case SUBTREE_MODIFIED:
index 6798d1d0ee9294d693802ee7a4cdb40bdcc5459e..235086f4cf17e5542663048b831cb1daf23f09cc 100644 (file)
@@ -37,8 +37,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.core.api.Broker;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.netconf.client.NetconfClientDispatcher;
 import org.opendaylight.netconf.client.conf.NetconfReconnectingClientConfiguration;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities;
@@ -69,15 +68,9 @@ public class NetconfTopologyImplTest {
     private static final NodeId NODE_ID = new NodeId("testing-node");
     private static final String TOPOLOGY_ID = "testing-topology";
 
-    @Mock
-    private Broker mockedDataBroker;
-
     @Mock
     private NetconfClientDispatcher mockedClientDispatcher;
 
-    @Mock
-    private BindingAwareBroker mockedBindingAwareBroker;
-
     @Mock
     private EventExecutor mockedEventExecutor;
 
@@ -93,6 +86,9 @@ public class NetconfTopologyImplTest {
     @Mock
     private DataBroker dataBroker;
 
+    @Mock
+    private DOMMountPointService mountPointService;
+
     private TestingNetconfTopologyImpl topology;
     private TestingNetconfTopologyImpl spyTopology;
 
@@ -102,19 +98,19 @@ public class NetconfTopologyImplTest {
 
         when(mockedSchemaRepositoryProvider.getSharedSchemaRepository()).thenReturn(new SharedSchemaRepository("testingSharedSchemaRepo"));
         when(mockedProcessingExecutor.getExecutor()).thenReturn(MoreExecutors.newDirectExecutorService());
-        Future future = new SucceededFuture(ImmediateEventExecutor.INSTANCE, new NetconfDeviceCapabilities());
+        final Future future = new SucceededFuture(ImmediateEventExecutor.INSTANCE, new NetconfDeviceCapabilities());
         when(mockedClientDispatcher.createReconnectingClient(any(NetconfReconnectingClientConfiguration.class))).thenReturn(future);
 
-        topology = new TestingNetconfTopologyImpl(TOPOLOGY_ID, mockedClientDispatcher, mockedBindingAwareBroker,
-                mockedDataBroker, mockedEventExecutor, mockedKeepaliveExecutor, mockedProcessingExecutor, mockedSchemaRepositoryProvider,
-                dataBroker);
+        topology = new TestingNetconfTopologyImpl(TOPOLOGY_ID, mockedClientDispatcher,
+                mockedEventExecutor, mockedKeepaliveExecutor, mockedProcessingExecutor, mockedSchemaRepositoryProvider,
+                dataBroker, mountPointService);
 
         spyTopology = spy(topology);
     }
 
     @Test
     public void testInit() {
-        WriteTransaction wtx = mock(WriteTransaction.class);
+        final WriteTransaction wtx = mock(WriteTransaction.class);
         when(dataBroker.newWriteOnlyTransaction()).thenReturn(wtx);
         doNothing().when(wtx).merge(any(LogicalDatastoreType.class), any(InstanceIdentifier.class), any(DataObject.class));
         when(wtx.submit()).thenReturn(Futures.<Void, TransactionCommitFailedException>immediateCheckedFuture(null));
@@ -133,19 +129,19 @@ public class NetconfTopologyImplTest {
     @Test
     public void testOnDataTreeChange() {
 
-        DataObjectModification<Node> newNode = mock(DataObjectModification.class);
+        final DataObjectModification<Node> newNode = mock(DataObjectModification.class);
         when(newNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
 
         InstanceIdentifier.PathArgument pa = null;
 
-        for (InstanceIdentifier.PathArgument p : TopologyUtil.createTopologyListPath(TOPOLOGY_ID).child(Node.class, new NodeKey(NODE_ID)).getPathArguments()) {
+        for (final InstanceIdentifier.PathArgument p : TopologyUtil.createTopologyListPath(TOPOLOGY_ID).child(Node.class, new NodeKey(NODE_ID)).getPathArguments()) {
             pa = p;
         }
 
         when(newNode.getIdentifier()).thenReturn(pa);
 
 
-        NetconfNode testingNode = new NetconfNodeBuilder()
+        final NetconfNode testingNode = new NetconfNodeBuilder()
                 .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1"))))
                 .setPort(new PortNumber(9999))
                 .setReconnectOnChangedSchema(true)
@@ -156,14 +152,13 @@ public class NetconfTopologyImplTest {
                 .setCredentials(new LoginPasswordBuilder().setUsername("testuser").setPassword("testpassword").build())
                 .build();
 
-        NodeBuilder nn = new NodeBuilder().addAugmentation(NetconfNode.class, testingNode);
+        final NodeBuilder nn = new NodeBuilder().addAugmentation(NetconfNode.class, testingNode);
 
         when(newNode.getDataAfter()).thenReturn(nn.build());
 
 
-
-        Collection<DataTreeModification<Node>> changes = Sets.newHashSet();
-        DataTreeModification<Node> ch = mock(DataTreeModification.class);
+        final Collection<DataTreeModification<Node>> changes = Sets.newHashSet();
+        final DataTreeModification<Node> ch = mock(DataTreeModification.class);
         when(ch.getRootNode()).thenReturn(newNode);
         changes.add(ch);
         spyTopology.onDataTreeChanged(changes);
@@ -185,22 +180,21 @@ public class NetconfTopologyImplTest {
 
     public static class TestingNetconfTopologyImpl extends NetconfTopologyImpl {
 
-        public TestingNetconfTopologyImpl(String topologyId, NetconfClientDispatcher clientDispatcher,
-                                          BindingAwareBroker bindingAwareBroker, Broker domBroker,
-                                          EventExecutor eventExecutor, ScheduledThreadPool keepaliveExecutor,
-                                          ThreadPool processingExecutor, SchemaRepositoryProvider schemaRepositoryProvider,
-                                          DataBroker dataBroker) {
-            super(topologyId, clientDispatcher, bindingAwareBroker, domBroker, eventExecutor, keepaliveExecutor,
-                    processingExecutor, schemaRepositoryProvider, dataBroker);
+        public TestingNetconfTopologyImpl(final String topologyId, final NetconfClientDispatcher clientDispatcher,
+                                          final EventExecutor eventExecutor, final ScheduledThreadPool keepaliveExecutor,
+                                          final ThreadPool processingExecutor, final SchemaRepositoryProvider schemaRepositoryProvider,
+                                          final DataBroker dataBroker, final DOMMountPointService mountPointService) {
+            super(topologyId, clientDispatcher, eventExecutor, keepaliveExecutor,
+                    processingExecutor, schemaRepositoryProvider, dataBroker, mountPointService);
         }
 
         @Override
-        public ListenableFuture<NetconfDeviceCapabilities> connectNode(NodeId nodeId, Node configNode) {
+        public ListenableFuture<NetconfDeviceCapabilities> connectNode(final NodeId nodeId, final Node configNode) {
             return Futures.immediateFuture(new NetconfDeviceCapabilities());
         }
 
         @Override
-        public ListenableFuture<Void> disconnectNode(NodeId nodeId) {
+        public ListenableFuture<Void> disconnectNode(final NodeId nodeId) {
             return Futures.immediateFuture(null);
         }
     }
index 90408690f33d008960856597a611ed7db2988e7b..a6ffe7aeb18823c68f64db619a5ac33bd427f828 100644 (file)
@@ -10,11 +10,11 @@ package org.opendaylight.netconf.sal.connect.netconf.sal;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
 import java.util.List;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
+import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 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.netconf.sal.connect.api.RemoteDeviceHandler;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
@@ -29,26 +29,18 @@ public final class NetconfDeviceSalFacade implements AutoCloseable, RemoteDevice
 
     private final RemoteDeviceId id;
     private final NetconfDeviceSalProvider salProvider;
-
     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);
     }
 
     @VisibleForTesting
-    NetconfDeviceSalFacade(final RemoteDeviceId id, NetconfDeviceSalProvider salProvider,
-                           final Broker domBroker, final BindingAwareBroker bindingBroker) {
+    NetconfDeviceSalFacade(final RemoteDeviceId id, final NetconfDeviceSalProvider salProvider) {
         this.id = id;
         this.salProvider = salProvider;
-        registerToSal(domBroker, bindingBroker);
-    }
-
-    public void registerToSal(final Broker domRegistryDependency, final BindingAwareBroker bindingBroker) {
-        domRegistryDependency.registerProvider(salProvider);
-        bindingBroker.registerProvider(salProvider);
     }
 
     @Override
index c0f066ffdc07f8a27dc099b7d15eeca65d0606d8..e9d74c0637beb8b1bd9ff0eb2bfd19770a60253b 100644 (file)
@@ -8,8 +8,6 @@
 package org.opendaylight.netconf.sal.connect.netconf.sal;
 
 import com.google.common.base.Preconditions;
-import java.util.Collection;
-import java.util.Collections;
 import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction;
@@ -21,31 +19,27 @@ import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.controller.md.sal.dom.api.DOMNotification;
 import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
-import org.opendaylight.controller.sal.core.api.Broker;
-import org.opendaylight.controller.sal.core.api.Provider;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class NetconfDeviceSalProvider implements AutoCloseable, Provider, BindingAwareProvider {
+public class NetconfDeviceSalProvider implements AutoCloseable {
 
     private static final Logger logger = LoggerFactory.getLogger(NetconfDeviceSalProvider.class);
 
     private final RemoteDeviceId id;
-    private MountInstance mountInstance;
+    private final MountInstance mountInstance;
+    private final DataBroker dataBroker;
 
     private volatile NetconfDeviceTopologyAdapter topologyDatastoreAdapter;
 
-    private DataBroker dataBroker;
     private BindingTransactionChain txChain;
 
     private final TransactionChainListener transactionChainListener =  new TransactionChainListener() {
         @Override
-        public void onTransactionChainFailed(TransactionChain<?, ?> chain, AsyncTransaction<?, ?> transaction, Throwable cause) {
+        public void onTransactionChainFailed(final TransactionChain<?, ?> chain, final AsyncTransaction<?, ?> transaction, final Throwable cause) {
             logger.error("{}: TransactionChain({}) {} FAILED!", id, chain, transaction.getIdentifier(), cause);
             chain.close();
             resetTransactionChainForAdapaters();
@@ -53,13 +47,25 @@ public class NetconfDeviceSalProvider implements AutoCloseable, Provider, Bindin
         }
 
         @Override
-        public void onTransactionChainSuccessful(TransactionChain<?, ?> chain) {
+        public void onTransactionChainSuccessful(final TransactionChain<?, ?> chain) {
             logger.trace("{}: TransactionChain({}) {} SUCCESSFUL", id, chain);
         }
     };
 
-    public NetconfDeviceSalProvider(final RemoteDeviceId deviceId) {
+    public NetconfDeviceSalProvider(final RemoteDeviceId deviceId, final DOMMountPointService mountService,
+                                    final DataBroker dataBroker) {
         this.id = deviceId;
+        mountInstance = new MountInstance(mountService, id);
+        this.dataBroker = dataBroker;
+        txChain = Preconditions.checkNotNull(dataBroker).createTransactionChain(transactionChainListener);
+
+        topologyDatastoreAdapter = new NetconfDeviceTopologyAdapter(id, txChain);
+    }
+
+    public NetconfDeviceSalProvider(final RemoteDeviceId deviceId, final DOMMountPointService mountService) {
+        this.id = deviceId;
+        mountInstance = new MountInstance(mountService, id);
+        this.dataBroker = null;
     }
 
     public MountInstance getMountInstance() {
@@ -74,31 +80,6 @@ public class NetconfDeviceSalProvider implements AutoCloseable, Provider, Bindin
         return topologyDatastoreAdapter;
     }
 
-    @Override
-    public void onSessionInitiated(final Broker.ProviderSession session) {
-        logger.debug("{}: (BI)Session with sal established {}", id, session);
-
-        final DOMMountPointService mountService = session.getService(DOMMountPointService.class);
-        if (mountService != null) {
-            mountInstance = new MountInstance(mountService, id);
-        }
-    }
-
-    @Override
-    public Collection<Provider.ProviderFunctionality> getProviderFunctionality() {
-        return Collections.emptySet();
-    }
-
-    @Override
-    public void onSessionInitiated(final BindingAwareBroker.ProviderContext session) {
-        logger.debug("{}: Session with sal established {}", id, session);
-
-        this.dataBroker = session.getSALService(DataBroker.class);
-        txChain = Preconditions.checkNotNull(dataBroker).createTransactionChain(transactionChainListener);
-
-        topologyDatastoreAdapter = new NetconfDeviceTopologyAdapter(id, txChain);
-    }
-
     private void resetTransactionChainForAdapaters() {
         txChain = Preconditions.checkNotNull(dataBroker).createTransactionChain(transactionChainListener);
 
@@ -121,7 +102,7 @@ public class NetconfDeviceSalProvider implements AutoCloseable, Provider, Bindin
 
     public static final class MountInstance implements AutoCloseable {
 
-        private DOMMountPointService mountService;
+        private final DOMMountPointService mountService;
         private final RemoteDeviceId id;
         private NetconfDeviceNotificationService notificationService;
 
@@ -133,9 +114,8 @@ public class NetconfDeviceSalProvider implements AutoCloseable, Provider, Bindin
         }
 
         public synchronized void onTopologyDeviceConnected(final SchemaContext initialCtx,
-                                                    final DOMDataBroker broker, final DOMRpcService rpc,
-                                                    final NetconfDeviceNotificationService notificationService) {
-
+                                                           final DOMDataBroker broker, final DOMRpcService rpc,
+                                                           final NetconfDeviceNotificationService notificationService) {
             Preconditions.checkNotNull(mountService, "Closed");
             Preconditions.checkState(topologyRegistration == null, "Already initialized");
 
@@ -172,7 +152,6 @@ public class NetconfDeviceSalProvider implements AutoCloseable, Provider, Bindin
         @Override
         public synchronized void close() throws Exception {
             onTopologyDeviceDisconnected();
-            mountService = null;
         }
 
         public synchronized void publish(final DOMNotification domNotification) {
index 8df394c77332d01d0165d3d87c33165930d9dbc8..4cb0ed7a155d480d31fa51d152ff34e461a78284 100644 (file)
@@ -27,8 +27,6 @@ import org.mockito.Mock;
 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.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
 import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
@@ -56,9 +54,7 @@ public class NetconfDeviceSalFacadeTest {
         final InetSocketAddress address = new InetSocketAddress("127.0.0.1", 8000);
         final RemoteDeviceId remoteDeviceId = new RemoteDeviceId("test", address);
 
-        final Broker domRegistry = mock(Broker.class);
-        final BindingAwareBroker bindingRegistry = mock(BindingAwareBroker.class);
-        deviceFacade = new NetconfDeviceSalFacade(remoteDeviceId, salProvider, domRegistry, bindingRegistry);
+        deviceFacade = new NetconfDeviceSalFacade(remoteDeviceId, salProvider);
 
         netconfDeviceTopologyAdapter = PowerMockito.mock(NetconfDeviceTopologyAdapter.class);
         mountInstance = PowerMockito.mock(NetconfDeviceSalProvider.MountInstance.class);
index b49b3fd3fbe93091133a8db3ced5b983479059ba..16ca3da8cfe4d9364c51ee62e4b2deba14af8f96 100644 (file)
@@ -9,13 +9,15 @@
 package org.opendaylight.netconf.sal.connect.netconf.sal;
 
 import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import com.google.common.util.concurrent.Futures;
 import java.net.InetSocketAddress;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
@@ -24,6 +26,7 @@ import org.mockito.MockitoAnnotations;
 import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
 import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
@@ -44,38 +47,31 @@ public class NetconfDeviceSalProviderTest {
     private DataBroker dataBroker;
     @Mock
     private BindingTransactionChain chain;
+    @Mock
+    private DOMMountPointService mountPointService;
+    @Mock
+    private WriteTransaction writeTx;
     private NetconfDeviceSalProvider provider;
 
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        provider = new NetconfDeviceSalProvider(new RemoteDeviceId("device1", InetSocketAddress.createUnresolved("localhost", 17830)));
+        doReturn(chain).when(dataBroker).createTransactionChain(any(TransactionChainListener.class));
+        doReturn(writeTx).when(chain).newWriteOnlyTransaction();
+        doNothing().when(writeTx).merge(eq(LogicalDatastoreType.OPERATIONAL), any(), any());
+        doReturn("Some object").when(writeTx).getIdentifier();
+        doReturn(Futures.immediateCheckedFuture(null)).when(writeTx).submit();
+        provider = new NetconfDeviceSalProvider(new RemoteDeviceId("device1",
+                InetSocketAddress.createUnresolved("localhost", 17830)), mountPointService, dataBroker);
         when(session.getService(DOMMountPointService.class)).thenReturn(mountpointService);
         when(context.getSALService(DataBroker.class)).thenReturn(dataBroker);
-        when(dataBroker.createTransactionChain(any())).thenReturn(chain);
         when(chain.newWriteOnlyTransaction()).thenReturn(tx);
         when(tx.submit()).thenReturn(Futures.immediateCheckedFuture(null));
         when(tx.getIdentifier()).thenReturn(tx);
     }
 
-    @Test
-    public void onSessionInitiated() throws Exception {
-        provider.onSessionInitiated(session);
-        provider.onSessionInitiated(context);
-        Assert.assertNotNull(provider.getMountInstance());
-        Assert.assertNotNull(provider.getTopologyDatastoreAdapter());
-    }
-
-    @Test
-    public void getProviderFunctionality() throws Exception {
-        Assert.assertTrue(provider.getProviderFunctionality().isEmpty());
-    }
-
     @Test
     public void replaceChainIfFailed() throws Exception {
-        provider.onSessionInitiated(session);
-        provider.onSessionInitiated(context);
-        Assert.assertNotNull(provider.getMountInstance());
         final ArgumentCaptor<TransactionChainListener> captor = ArgumentCaptor.forClass(TransactionChainListener.class);
         verify(dataBroker).createTransactionChain(captor.capture());
         try {
@@ -88,16 +84,12 @@ public class NetconfDeviceSalProviderTest {
 
     @Test
     public void close() throws Exception {
-        provider.onSessionInitiated(session);
-        provider.onSessionInitiated(context);
         provider.close();
         verify(chain).close();
     }
 
     @Test
     public void closeWithoutNPE() throws Exception {
-        provider.onSessionInitiated(session);
-        provider.onSessionInitiated(context);
         provider.close();
         provider.close();
         verify(chain, times(2)).close();