BUG-732 Fix netconf client deadlock when downloading yang schemas from remote device
[controller.git] / opendaylight / md-sal / sal-netconf-connector / src / main / java / org / opendaylight / controller / sal / connect / netconf / NetconfDeviceListener.java
index d5e1d35d7d5721e06b9b515822813b54feac779f..7ef4569600cb6c10433ec439f16ec6d98e220fa6 100644 (file)
@@ -63,6 +63,8 @@ class NetconfDeviceListener implements NetconfClientSessionListener {
         LOG.debug("Session with {} established as address {} session-id {}",
                 device.getName(), device.getSocketAddress(), session.getSessionId());
 
+        this.session = session;
+
         final Set<QName> caps = device.getCapabilities(session.getServerCapabilities());
         LOG.trace("Server {} advertized capabilities {}", device.getName(), caps);
 
@@ -70,16 +72,15 @@ class NetconfDeviceListener implements NetconfClientSessionListener {
         final SchemaSourceProvider<String> delegate;
         if (NetconfRemoteSchemaSourceProvider.isSupportedFor(caps)) {
             delegate = new NetconfRemoteSchemaSourceProvider(device);
-        } else if(caps.contains(NetconfRemoteSchemaSourceProvider.IETF_NETCONF_MONITORING.getNamespace().toString())) {
+            // FIXME caps do not contain urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring, since it is filtered out in getCapabilitites
+        } else if(session.getServerCapabilities().contains(NetconfRemoteSchemaSourceProvider.IETF_NETCONF_MONITORING.getNamespace().toString())) {
             delegate = new NetconfRemoteSchemaSourceProvider(device);
         } else {
             LOG.info("Netconf server {} does not support IETF Netconf Monitoring", device.getName());
-            delegate = SchemaSourceProviders.<String>noopProvider();
+            delegate = SchemaSourceProviders.noopProvider();
         }
 
         device.bringUp(delegate, caps);
-
-        this.session = session;
     }
 
     private synchronized void tearDown(final Exception e) {