[VOL-3767] Removing device flows during deletion of device and completing deletion regardless of devices not found

Change-Id: I803003d42ecfce98240efe22559c28ca2180e9ca
diff --git a/rw_core/core/device/logical_agent_flow.go b/rw_core/core/device/logical_agent_flow.go
index fa1a19a..eda4fa6 100644
--- a/rw_core/core/device/logical_agent_flow.go
+++ b/rw_core/core/device/logical_agent_flow.go
@@ -356,9 +356,20 @@
 			devicesInFlows = []string{agent.rootDeviceID}
 		}
 
-		if err := agent.deviceMgr.canMultipleAdapterRequestProceed(ctx, devicesInFlows); err != nil {
-			logger.Warnw(ctx, "adapters-not-ready", log.Fields{"logical-device-id": agent.logicalDeviceID, "flow": toDelete, "error": err})
-			return err
+		for _, deviceID := range devicesInFlows {
+			if err := agent.deviceMgr.canAdapterRequestProceed(ctx, deviceID); err != nil {
+				//If the error has code.NotFound the device is not there anymore, there is no need to delete flows, just ignore it
+				if status.Code(err) != codes.NotFound {
+					logger.Warnw(ctx, "adapters-not-ready", log.Fields{"logical-device-id": agent.logicalDeviceID, "flow": toDelete, "error": err})
+					return err
+				} else {
+					logger.Debugw(ctx, "flow-delete-for-nil-device-proceeding-deletion", log.Fields{"deviceID": deviceID})
+					if deviceRules != nil {
+						deviceRules.RemoveRule(deviceID)
+						partialRoute = true
+					}
+				}
+			}
 		}
 
 		// Update the devices
@@ -456,9 +467,20 @@
 		devicesInFlows = []string{agent.rootDeviceID}
 	}
 
-	if err := agent.deviceMgr.canMultipleAdapterRequestProceed(ctx, devicesInFlows); err != nil {
-		logger.Warnw(ctx, "adapters-not-ready", log.Fields{"logical-device-id": agent.logicalDeviceID, "flow": flowsToDelete, "error": err})
-		return err
+	for _, deviceID := range devicesInFlows {
+		if err := agent.deviceMgr.canAdapterRequestProceed(ctx, deviceID); err != nil {
+			//If the error has code.NotFound the device is not there anymore, there is no need to delete flows, just ignore it
+			if status.Code(err) != codes.NotFound {
+				logger.Warnw(ctx, "adapters-not-ready", log.Fields{"logical-device-id": agent.logicalDeviceID, "flow": flowsToDelete, "error": err})
+				return err
+			} else {
+				logger.Debugw(ctx, "flow-delete-strict-for-nil-device-proceeding-deletion", log.Fields{"deviceID": deviceID})
+				if deviceRules != nil {
+					deviceRules.RemoveRule(deviceID)
+					partialRoute = true
+				}
+			}
+		}
 	}
 
 	// Update the devices