[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.