[VOL-1614] Device Management update in the Core
This commit went over the device management of devices in the Core
and made the following changes:
1) Update the device state machine to not remove logical
device or ports when a device is disabled.
2) Fix some issues around device deletion
3) Add additional APIs between the Core and Adapters to handle
the scenarios of enable/disable/delete a device
4) Update the simulated Adapters to handle disable/reenable/delete
5) Add a new set of tests for teh device state machine.
Change-Id: Ib2be87ec011762d5315a6d54581a87c1891e92be
diff --git a/rw_core/core/logical_device_manager.go b/rw_core/core/logical_device_manager.go
index e9b5a4f..7a625b4 100644
--- a/rw_core/core/logical_device_manager.go
+++ b/rw_core/core/logical_device_manager.go
@@ -319,7 +319,7 @@
return nil
}
-// deleteLogicalPort removes the logical port associated with a child device
+// deleteLogicalPort removes the logical port associated with a device
func (ldMgr *LogicalDeviceManager) deleteLogicalPort(ctx context.Context, lPortId *voltha.LogicalPortId) error {
log.Debugw("deleting-logical-port", log.Fields{"LDeviceId": lPortId.Id})
// Get logical port
@@ -334,13 +334,34 @@
return errors.New("device-root")
}
if agent := ldMgr.getLogicalDeviceAgent(lPortId.Id); agent != nil {
- agent.deleteLogicalPort(logicalPort)
+ if err := agent.deleteLogicalPort(logicalPort); err != nil {
+ log.Warnw("deleting-logicalport-failed", log.Fields{"LDeviceId": lPortId.Id, "error": err})
+ }
}
log.Debug("deleting-logical-port-ends")
return nil
}
+// deleteLogicalPort removes the logical port associated with a child device
+func (ldMgr *LogicalDeviceManager) deleteLogicalPorts(deviceId string) error {
+ log.Debugw("deleting-logical-ports", log.Fields{"deviceId": deviceId})
+ // Get logical port
+ if ldId, err := ldMgr.getLogicalDeviceIdFromDeviceId(deviceId); err != nil {
+ log.Warnw("logical-device-not-found", log.Fields{"deviceId": deviceId})
+ return err
+ } else {
+ if agent := ldMgr.getLogicalDeviceAgent(*ldId); agent != nil {
+ if err = agent.deleteLogicalPorts(deviceId); err != nil {
+ log.Warnw("deleteLogicalPorts-failed", log.Fields{"ldeviceId": *ldId})
+ return err
+ }
+ }
+ }
+ log.Debug("deleting-logical-port-ends")
+ return nil
+}
+
func (ldMgr *LogicalDeviceManager) setupUNILogicalPorts(ctx context.Context, childDevice *voltha.Device) error {
log.Debugw("setupUNILogicalPorts", log.Fields{"childDeviceId": childDevice.Id, "parentDeviceId": childDevice.ParentId})
// Sanity check
@@ -366,6 +387,24 @@
return nil
}
+func (ldMgr *LogicalDeviceManager) deleteAllLogicalPorts(device *voltha.Device) error {
+ log.Debugw("deleteAllLogicalPorts", log.Fields{"deviceId": device.Id})
+
+ var ldId *string
+ var err error
+ //Get the logical device Id for this device
+ if ldId, err = ldMgr.getLogicalDeviceId(device); err != nil {
+ log.Warnw("no-logical-device-found", log.Fields{"deviceId": device.Id, "error": err})
+ return err
+ }
+ if agent := ldMgr.getLogicalDeviceAgent(*ldId); agent != nil {
+ if err := agent.deleteAllLogicalPorts(device); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
func (ldMgr *LogicalDeviceManager) updatePortsState(device *voltha.Device, state voltha.AdminState_AdminState) error {
log.Debugw("updatePortsState", log.Fields{"deviceId": device.Id, "state": state})