VOL-1774 Etcd Crash Handling
Change-Id: I1eeb726654c3972fd0a4fafae134607e5a810415
diff --git a/rw_core/core/logical_device_manager.go b/rw_core/core/logical_device_manager.go
index 53711d7..6f8b2fa 100644
--- a/rw_core/core/logical_device_manager.go
+++ b/rw_core/core/logical_device_manager.go
@@ -142,7 +142,12 @@
func (ldMgr *LogicalDeviceManager) listLogicalDevices() (*voltha.LogicalDevices, error) {
log.Debug("ListAllLogicalDevices")
result := &voltha.LogicalDevices{}
- if logicalDevices := ldMgr.clusterDataProxy.List(context.Background(), "/logical_devices", 0, true, ""); logicalDevices != nil {
+ logicalDevices, err := ldMgr.clusterDataProxy.List(context.Background(), "/logical_devices", 0, true, "")
+ if err != nil {
+ log.Errorw("failed-to-list-logical-devices-from-cluster-proxy", log.Fields{"error": err})
+ return nil, err
+ }
+ if logicalDevices != nil {
for _, logicalDevice := range logicalDevices.([]interface{}) {
result.Items = append(result.Items, logicalDevice.(*voltha.LogicalDevice))
}
@@ -200,7 +205,10 @@
ldAgent := value.(*LogicalDeviceAgent)
if ldAgent.rootDeviceID == id {
log.Infow("stopping-logical-device-agent", log.Fields{"lDeviceId": key})
- ldAgent.stop(context.TODO())
+ if err := ldAgent.stop(context.TODO()); err != nil {
+ log.Errorw("failed-to-stop-LDAgent", log.Fields{"error": err})
+ return false
+ }
ldID = key.(string)
ldMgr.logicalDeviceAgents.Delete(ldID)
}
@@ -211,7 +219,12 @@
//getLogicalDeviceFromModel retrieves the logical device data from the model.
func (ldMgr *LogicalDeviceManager) getLogicalDeviceFromModel(lDeviceID string) (*voltha.LogicalDevice, error) {
- if logicalDevice := ldMgr.clusterDataProxy.Get(context.Background(), "/logical_devices/"+lDeviceID, 0, false, ""); logicalDevice != nil {
+ logicalDevice, err := ldMgr.clusterDataProxy.Get(context.Background(), "/logical_devices/"+lDeviceID, 0, false, "")
+ if err != nil {
+ log.Errorw("failed-to-get-logical-devices-from-cluster-proxy", log.Fields{"error": err})
+ return nil, err
+ }
+ if logicalDevice != nil {
if lDevice, ok := logicalDevice.(*voltha.LogicalDevice); ok {
return lDevice, nil
}
@@ -234,7 +247,10 @@
log.Debugw("loading-logical-device", log.Fields{"lDeviceId": lDeviceID})
agent := newLogicalDeviceAgent(lDeviceID, "", ldMgr, ldMgr.deviceMgr, ldMgr.clusterDataProxy, ldMgr.defaultTimeout)
if err := agent.start(context.TODO(), true); err != nil {
- agent.stop(context.TODO())
+ if err := agent.stop(context.TODO()); err != nil {
+ log.Errorw("failed-to-stop-agent", log.Fields{"error": err})
+ return err
+ }
} else {
ldMgr.logicalDeviceAgents.Store(agent.logicalDeviceID, agent)
}
@@ -275,7 +291,10 @@
logDeviceID := device.ParentId
if agent := ldMgr.getLogicalDeviceAgent(logDeviceID); agent != nil {
// Stop the logical device agent
- agent.stop(ctx)
+ if err := agent.stop(ctx); err != nil {
+ log.Errorw("failed-to-stop-agent", log.Fields{"error": err})
+ return err
+ }
//Remove the logical device agent from the Map
ldMgr.deleteLogicalDeviceAgent(logDeviceID)
err := ldMgr.core.deviceOwnership.AbandonDevice(logDeviceID)