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
}