[VOL-5451] delete device error handling
Signed-off-by: mgouda <madhumati.gouda@radisys.com>
Change-Id: Ie26d9eefc77dd585d3e032441ad1ee2070063829
Signed-off-by: mgouda <madhumati.gouda@radisys.com>
diff --git a/VERSION b/VERSION
index f5c2a40..cd33751 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.6.14
+3.6.15
diff --git a/rw_core/core/device/agent.go b/rw_core/core/device/agent.go
index 6755a5f..bdba7f7 100755
--- a/rw_core/core/device/agent.go
+++ b/rw_core/core/device/agent.go
@@ -723,6 +723,7 @@
defer func() { agent.logDeviceUpdate(ctx, nil, nil, requestStatus, err, desc) }()
if err = agent.requestQueue.WaitForGreenLight(ctx); err != nil {
+ logger.Errorw(ctx, "can't obtain device agent lock during delete device", log.Fields{"device-id": agent.deviceID, "error": err})
desc = err.Error()
return err
}
diff --git a/rw_core/core/device/manager_nbi.go b/rw_core/core/device/manager_nbi.go
index 95cc648..92071d6 100644
--- a/rw_core/core/device/manager_nbi.go
+++ b/rw_core/core/device/manager_nbi.go
@@ -109,12 +109,31 @@
ctx = utils.WithRPCMetadataContext(ctx, "DeleteDevice")
log.EnrichSpan(ctx, log.Fields{"device-id": id.Id})
- logger.Info(ctx, "delete-device", log.Fields{"device-id": id.Id})
+ logger.Infow(ctx, "delete-device", log.Fields{"device-id": id.Id})
agent := dMgr.getDeviceAgent(ctx, id.Id)
if agent == nil {
return nil, status.Errorf(codes.NotFound, "%s", id.Id)
}
- return &empty.Empty{}, agent.deleteDevice(ctx)
+ if err := agent.deleteDevice(ctx); err != nil {
+ if statusErr, ok := status.FromError(err); ok {
+ switch statusErr.Code() {
+ case codes.NotFound:
+ logger.Warnw(ctx, "The device handler/device entry is not found , further clean up ", log.Fields{"device-id": id.Id, "Error": err})
+ return &empty.Empty{}, nil
+ case codes.Unavailable:
+ logger.Errorw(ctx, "Failed to delete device", log.Fields{"device-id": id.Id, "Error": err})
+ return nil, err
+ case codes.Internal:
+ logger.Errorw(ctx, "Failed to delete device due to an Internal error at Adapter ", log.Fields{"device-id": id.Id, "Error": err})
+ return nil, err
+ default:
+ logger.Errorw(ctx, "Unexpected error", log.Fields{"device-id": id.Id, "Error": err})
+ return nil, err
+ }
+ }
+
+ }
+ return &empty.Empty{}, nil
}
// ForceDeleteDevice removes a device from the data model forcefully without successfully waiting for the adapters.