VOL-4511: Fix logical Meters are not deleted from the kv store after olt
device delete some times - part 3
- Delay logical device deletion from model until logical meters are cleared
- During meter updates have additional checks to see if the logical device
  exists in model.

Change-Id: I09788b6cdc00779c5f9f5de0e691de79608262fb
diff --git a/rw_core/core/device/logical_manager.go b/rw_core/core/device/logical_manager.go
index 5e2187d..3f08195 100644
--- a/rw_core/core/device/logical_manager.go
+++ b/rw_core/core/device/logical_manager.go
@@ -424,15 +424,10 @@
 	return nil
 }
 
-// deleteAllLogicalMeters removes the logical meters associated with a child device
-func (ldMgr *LogicalManager) deleteAllLogicalMeters(ctx context.Context, deviceID string) error {
-	logger.Debugw(ctx, "delete-logical-meters", log.Fields{"device-id": deviceID})
-	// Get logical port
-	ldID, err := ldMgr.getLogicalDeviceIDFromDeviceID(ctx, deviceID)
-	if err != nil {
-		return err
-	}
-	if agent := ldMgr.getLogicalDeviceAgent(ctx, *ldID); agent != nil {
+// deleteAllLogicalMetersForLogicalDevice removes the logical meters associated with a the Logical Device ID
+func (ldMgr *LogicalManager) deleteAllLogicalMetersForLogicalDevice(ctx context.Context, ldID string) error {
+	logger.Debugw(ctx, "delete-logical-meters", log.Fields{"logical-device-id": ldID})
+	if agent := ldMgr.getLogicalDeviceAgent(ctx, ldID); agent != nil {
 		for meterID := range agent.meterLoader.ListIDs() {
 			if meterHandle, have := agent.meterLoader.Lock(meterID); have {
 				// Update the store and cache