VOL-5209 VOL-5210 VOL-5208, race condition and crashes during onu delete fix

Change-Id: I5a5073ce6d968c2c91178fab8b4aa614dd979868
diff --git a/internal/pkg/core/openonu.go b/internal/pkg/core/openonu.go
index 6831237..365ed92 100755
--- a/internal/pkg/core/openonu.go
+++ b/internal/pkg/core/openonu.go
@@ -335,8 +335,9 @@
 		handler.mutexDeletionInProgressFlag.Unlock()
 
 		// Setting the device deletion progress flag will cause the PM FSM to cleanup for GC after FSM moves to NULL state
-		handler.pOnuMetricsMgr.SetdeviceDeletionInProgress(true)
-
+		if handler.pOnuMetricsMgr != nil {
+			handler.pOnuMetricsMgr.SetdeviceDeletionInProgress(true)
+		}
 		if err := handler.resetFsms(ctx, true); err != nil {
 			errorsList = append(errorsList, err)
 		}
@@ -952,8 +953,11 @@
 // DeleteGemPort is part of the ONU Inter-adapter service API.
 func (oo *OpenONUAC) DeleteGemPort(ctx context.Context, gPort *ia.DeleteGemPortMessage) (*empty.Empty, error) {
 	logger.Debugw(ctx, "delete-gem-port", log.Fields{"device-id": gPort.DeviceId, "uni-id": gPort.UniId})
-
 	if handler := oo.getDeviceHandler(ctx, gPort.DeviceId, false); handler != nil {
+		if handler.GetDeletionInProgress() {
+			logger.Error(ctx, "device deletion in progres", log.Fields{"device-id": gPort.DeviceId})
+			return nil, fmt.Errorf("device deletion in progress for device-id: %s", gPort.DeviceId)
+		}
 		if err := handler.handleDeleteGemPortRequest(log.WithSpanFromContext(context.Background(), ctx), gPort); err != nil {
 			return nil, err
 		}
@@ -967,8 +971,11 @@
 // DeleteTCont is part of the ONU Inter-adapter service API.
 func (oo *OpenONUAC) DeleteTCont(ctx context.Context, tConf *ia.DeleteTcontMessage) (*empty.Empty, error) {
 	logger.Debugw(ctx, "delete-tcont", log.Fields{"device-id": tConf.DeviceId, "tconf": tConf})
-
 	if handler := oo.getDeviceHandler(ctx, tConf.DeviceId, false); handler != nil {
+		if handler.GetDeletionInProgress() {
+			logger.Error(ctx, "device deletion in progres", log.Fields{"device-id": tConf.DeviceId})
+			return nil, fmt.Errorf("device deletion in progress for device-id: %s", tConf.DeviceId)
+		}
 		if err := handler.handleDeleteTcontRequest(log.WithSpanFromContext(context.Background(), ctx), tConf); err != nil {
 			return nil, err
 		}