[VOL-5549] Raise event and delete ONU device on reconcilation failure

Change-Id: I3a7f14084b52dd16c986493a0c59ac56f8ef6b65
Signed-off-by: bseeniva <balaji.seenivasan@radisys.com>
diff --git a/internal/pkg/common/defines.go b/internal/pkg/common/defines.go
index b7926c2..312e884 100755
--- a/internal/pkg/common/defines.go
+++ b/internal/pkg/common/defines.go
@@ -378,4 +378,7 @@
 
 	OnuFlowConfigFailed     = "ONU_CONFIG_FAILED"
 	OnuFlowConfigFailedDesc = "ONU flow configuration failed"
+
+	OnuReconcileFailed            = "ONU_RECONCILE_FAILED"
+	OnuReconcileFailedAbortedDesc = "ONU reconcile failed - aborted"
 )
diff --git a/internal/pkg/core/device_handler.go b/internal/pkg/core/device_handler.go
index 89fd091..c1b62dc 100755
--- a/internal/pkg/core/device_handler.go
+++ b/internal/pkg/core/device_handler.go
@@ -4780,6 +4780,19 @@
 		logger.Errorw(ctx, "unable to update device state to core",
 			log.Fields{"device-id": dh.DeviceID, "Err": err})
 	}
+	context := make(map[string]string)
+	context["device-id"] = dh.DeviceID
+	context["onu-serial-number"] = dh.device.SerialNumber
+	context["parent-id"] = dh.parentID
+
+	deviceEvent := &voltha.DeviceEvent{
+		ResourceId:      dh.DeviceID,
+		DeviceEventName: cmn.OnuReconcileFailed,
+		Description:     cmn.OnuReconcileFailedAbortedDesc,
+		Context:         context,
+	}
+	logger.Debugw(ctx, "send device event", log.Fields{"deviceEvent": deviceEvent, "device-id": dh.DeviceID})
+	_ = dh.EventProxy.SendDeviceEvent(ctx, deviceEvent, voltha.EventCategory_EQUIPMENT, voltha.EventSubCategory_ONU, time.Now().Unix())
 }
 
 func (dh *deviceHandler) deviceRebootStateUpdate(ctx context.Context, techProfInstLoadFailed bool) {