Making NetconfDeviceProvider try to get actual device description from device in checkAndUpdateDevice()
- Getting device description only if controller is currently Master for device
Change-Id: I870b2f19fd5e09e198e2c73bcabf9869504f2c94
diff --git a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
index 9bd8e78..3055b10 100644
--- a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
+++ b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
@@ -347,9 +347,23 @@
} else {
boolean isReachable = isReachable(deviceId);
if (isReachable && !deviceService.isAvailable(deviceId)) {
+ Device device = deviceService.getDevice(deviceId);
+ DeviceDescription updatedDeviceDescription = null;
+ if (device.is(DeviceDescriptionDiscovery.class)) {
+ if (mastershipService.isLocalMaster(deviceId)) {
+ DeviceDescriptionDiscovery deviceDescriptionDiscovery =
+ device.as(DeviceDescriptionDiscovery.class);
+ updatedDeviceDescription = deviceDescriptionDiscovery.discoverDeviceDetails();
+ }
+ } else {
+ log.warn("No DeviceDescriptionDiscovery behaviour for device {}", deviceId);
+ }
+ if (updatedDeviceDescription == null) {
+ updatedDeviceDescription = deviceDescription;
+ }
providerService.deviceConnected(
deviceId, new DefaultDeviceDescription(
- deviceDescription, true, deviceDescription.annotations()));
+ updatedDeviceDescription, true, updatedDeviceDescription.annotations()));
} else if (!isReachable && deviceService.isAvailable(deviceId)) {
providerService.deviceDisconnected(deviceId);
}
@@ -422,7 +436,6 @@
device.as(DeviceDescriptionDiscovery.class);
providerService.updatePorts(deviceId,
deviceDescriptionDiscovery.discoverPortDetails());
-
} else {
log.warn("No portGetter behaviour for device {}", deviceId);
}