[VOL-5598] Send delete event with key

Change-Id: I4245d3c7e723b5339f339306dca4745a714246a7
Signed-off-by: madhumatigouda <madhumati.gouda@radisys.com>
diff --git a/VERSION b/VERSION
index 972d41a..7707ee0 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.7.18
+3.7.19
diff --git a/rw_core/core/device/agent_port.go b/rw_core/core/device/agent_port.go
index 5984f0a..fd5c945 100644
--- a/rw_core/core/device/agent_port.go
+++ b/rw_core/core/device/agent_port.go
@@ -166,7 +166,7 @@
 }
 
 func (agent *Agent) addPort(ctx context.Context, port *voltha.Port) error {
-	logger.Debugw(ctx, "addPort", log.Fields{"device-id": agent.deviceID})
+	logger.Debugw(ctx, "addPort", log.Fields{"device-id": agent.deviceID, "port": port})
 	var desc string
 	var err error
 	operStatus := &common.OperationResp{Code: common.OperationResp_OPERATION_FAILURE}
diff --git a/rw_core/core/device/event/event.go b/rw_core/core/device/event/event.go
index db1dc42..60db08e 100644
--- a/rw_core/core/device/event/event.go
+++ b/rw_core/core/device/event/event.go
@@ -307,7 +307,7 @@
 	if device.Root {
 		subCategory = voltha.EventSubCategory_OLT
 	}
-	if err := q.eventProxy.SendDeviceEvent(ctx, de, voltha.EventCategory_EQUIPMENT, subCategory, raisedTs); err != nil {
+	if err := q.eventProxy.SendDeviceEventWithKey(ctx, de, voltha.EventCategory_EQUIPMENT, subCategory, raisedTs, device.Id); err != nil {
 		logger.Errorw(ctx, "error-sending-device-event", log.Fields{"id": device.Id, "err": err})
 		return err
 	}
@@ -334,8 +334,8 @@
 	de := ev.CreateDeviceDeletedEvent(device.SerialNumber, device.Id, device.ParentId,
 		onuId, ponId, device.Root, parentSerialNumber)
 
-	if err := q.eventProxy.SendDeviceEvent(ctx, de, voltha.EventCategory_EQUIPMENT,
-		subCategory, raisedTs); err != nil {
+	if err := q.eventProxy.SendDeviceEventWithKey(ctx, de, voltha.EventCategory_EQUIPMENT,
+		subCategory, raisedTs, device.Id); err != nil {
 		logger.Errorw(ctx, "error-sending-device-deleted-event", log.Fields{"id": device.Id, "err": err})
 		return err
 	}
diff --git a/rw_core/core/device/logical_agent.go b/rw_core/core/device/logical_agent.go
index 6f60817..6f9429d 100644
--- a/rw_core/core/device/logical_agent.go
+++ b/rw_core/core/device/logical_agent.go
@@ -304,7 +304,7 @@
 }
 
 func (agent *LogicalAgent) deleteFlowsAndGroupsFromDevices(ctx context.Context, deviceRules *fu.DeviceRules, mod *ofp.OfpFlowMod) []coreutils.Response {
-	logger.Debugw(ctx, "send-delete-flows-to-device-manager", log.Fields{"logical-device-id": agent.logicalDeviceID})
+	logger.Debugw(ctx, "send-delete-flows-to-device-manager", log.Fields{"logical-device-id": agent.logicalDeviceID, "cookie": mod.Cookie})
 
 	responses := make([]coreutils.Response, 0)
 	for deviceID, value := range deviceRules.GetRules() {
@@ -360,7 +360,7 @@
 }
 
 func (agent *LogicalAgent) deleteFlowsFromParentDevice(ctx context.Context, flows map[uint64]*ofp.OfpFlowStats, mod *ofp.OfpFlowMod) []coreutils.Response {
-	logger.Debugw(ctx, "deleting-flows-from-parent-device", log.Fields{"logical-device-id": agent.logicalDeviceID, "flows": flows})
+	logger.Debugw(ctx, "deleting-flows-from-parent-device", log.Fields{"logical-device-id": agent.logicalDeviceID, "cookie": mod.Cookie})
 	responses := make([]coreutils.Response, 0)
 	for _, flow := range flows {
 		response := coreutils.NewResponse()
@@ -379,7 +379,7 @@
 			response.Done()
 			continue
 		}
-		logger.Debugw(ctx, "uni-port", log.Fields{"flows": flows, "uni-port": uniPort})
+		logger.Debugw(ctx, "uni-port", log.Fields{"flows": flows, "uni-port": uniPort, "device-id": agent.rootDeviceID})
 		go func(uniPort uint32, metadata *ofp.FlowMetadata) {
 			subCtx, cancel := context.WithTimeout(log.WithSpanFromContext(context.Background(), ctx), agent.internalTimeout)
 			subCtx = coreutils.WithRPCMetadataFromContext(subCtx, ctx)
diff --git a/rw_core/core/device/logical_agent_flow.go b/rw_core/core/device/logical_agent_flow.go
index c197503..6cd1e3c 100644
--- a/rw_core/core/device/logical_agent_flow.go
+++ b/rw_core/core/device/logical_agent_flow.go
@@ -415,10 +415,10 @@
 	var have bool
 
 	mod := flowUpdate.FlowMod
-	logger.Debugw(ctx, "flow-delete-strict", log.Fields{"mod": mod})
 	if mod == nil {
 		return nil
 	}
+	logger.Debugw(ctx, "flow-delete-strict", log.Fields{"flow-mod": mod})
 
 	flow, err := fu.FlowStatsEntryFromFlowModMessage(mod)
 	if err != nil {
@@ -434,7 +434,7 @@
 	logger.Debugw(ctx, "flow-id-in-flow-delete-strict", log.Fields{"flow-id": flow.Id})
 	flowHandle, have = agent.flowCache.Lock(flow.Id)
 	if !have {
-		logger.Debugw(ctx, "flow-delete-strict-request-no-flow-found-continuing", log.Fields{"flow-mod": mod})
+		logger.Debugw(ctx, "flow-delete-strict-request-no-flow-found-continuing", log.Fields{"flow-mod-cookie": mod.Cookie})
 	}
 
 	groups := make(map[uint32]*ofp.OfpGroupEntry)
@@ -450,6 +450,7 @@
 		flowsToDelete = map[uint64]*ofp.OfpFlowStats{flow.Id: flowHandle.GetReadOnly()}
 	}
 
+	logger.Debugw(ctx, "flow-delete-strict-matching-flows-found", log.Fields{"flow-id": flow.Id, "flows-to-delete": flowsToDelete, "cookie": mod.Cookie})
 	var respChnls []coreutils.Response
 	var partialRoute bool
 	deviceRules, err := agent.flowDecomposer.DecomposeRules(ctx, agent, flowsToDelete, groups)
@@ -518,6 +519,7 @@
 
 	// Update meter count
 	if changedMeter := agent.updateFlowCountOfMeterStats(ctx, mod, flow, false); !changedMeter {
+		logger.Warnw(ctx, "flow-delete-strict-meter-update-failed", log.Fields{"flow-id": flow.Id, "cookie": mod.Cookie})
 		return fmt.Errorf("cannot delete flow - %s. Meter update failed", flow)
 	}
 
@@ -527,7 +529,6 @@
 			return err
 		}
 	}
-
 	return nil
 }
 
diff --git a/rw_core/core/device/logical_agent_port.go b/rw_core/core/device/logical_agent_port.go
index 3dd2e06..6f908da 100644
--- a/rw_core/core/device/logical_agent_port.go
+++ b/rw_core/core/device/logical_agent_port.go
@@ -240,6 +240,7 @@
 					portHandle.Unlock()
 					return err
 				}
+				logger.Debugw(ctx, "deleted-logical-port", log.Fields{"logical-device-id": agent.logicalDeviceID, "port": oldPort})
 				// and send event
 				agent.orderedEvents.send(ctx, agent, agent.logicalDeviceID, ofp.OfpPortReason_OFPPR_DELETE, oldPort.OfpPort)
 			}
@@ -355,7 +356,7 @@
 // (true, nil).   If the device is not in the correct state it will return (false, nil) as this is a valid
 // scenario. This also applies to the case where the port was already added.
 func (agent *LogicalAgent) addUNILogicalPort(ctx context.Context, deviceID string, deviceAdminState voltha.AdminState_Types, deviceOperStatus voltha.OperStatus_Types, devicePorts map[uint32]*voltha.Port, port *voltha.Port) error {
-	logger.Debugw(ctx, "add-uni-logical-port", log.Fields{"port": port})
+	logger.Debugw(ctx, "add-uni-logical-port", log.Fields{"port": port, "device-id": deviceID})
 	if deviceAdminState != voltha.AdminState_ENABLED || deviceOperStatus != voltha.OperStatus_ACTIVE {
 		logger.Warnw(ctx, "device-not-ready", log.Fields{"device-id": deviceID, "admin": deviceAdminState, "oper": deviceOperStatus})
 		return nil
diff --git a/rw_core/core/device/logical_manager.go b/rw_core/core/device/logical_manager.go
index 0d58cbb..4f64e53 100644
--- a/rw_core/core/device/logical_manager.go
+++ b/rw_core/core/device/logical_manager.go
@@ -432,7 +432,7 @@
 }
 
 func (ldMgr *LogicalManager) setupUNILogicalPorts(ctx context.Context, childDevice *voltha.Device, childDevicePorts map[uint32]*voltha.Port) error {
-	logger.Debugw(ctx, "setup-uni-logical-ports", log.Fields{"child-device-id": childDevice.Id, "parent-device-id": childDevice.ParentId, "current-data": childDevice})
+	logger.Debugw(ctx, "setup-uni-logical-ports", log.Fields{"child-device-id": childDevice.Id, "parent-device-id": childDevice.ParentId, "current-data": childDevice, "ports": childDevicePorts})
 	// Sanity check
 	if childDevice.Root {
 		return errors.New("Device-root")
@@ -442,7 +442,7 @@
 	parentID := childDevice.ParentId
 	logDeviceID := ldMgr.deviceMgr.GetParentDeviceID(ctx, parentID)
 
-	logger.Debugw(ctx, "setup-uni-logical-ports", log.Fields{"logical-device-id": logDeviceID, "parentId": parentID})
+	logger.Debugw(ctx, "setup-uni-logical-ports", log.Fields{"logical-device-id": logDeviceID, "parentId": parentID, "ports": childDevicePorts})
 
 	if parentID == "" || logDeviceID == "" {
 		return errors.New("device-in-invalid-state")