Make sure all events for logical device are sent before its deletion to avoid race conditions
Change-Id: I5fcbc8e2c176cf866f8e7f68d1da777d6f0b573c
diff --git a/rw_core/core/device/logical_agent.go b/rw_core/core/device/logical_agent.go
index d168bf3..6b0b6f7 100644
--- a/rw_core/core/device/logical_agent.go
+++ b/rw_core/core/device/logical_agent.go
@@ -191,7 +191,13 @@
return
}
defer agent.requestQueue.RequestComplete()
-
+ subCtx, cancel := context.WithTimeout(log.WithSpanFromContext(context.Background(), ctx), agent.defaultTimeout)
+ // Before deletion of the logical agent, make sure all events for ldagent are sent to avoid race conditions
+ if err := agent.orderedEvents.waitForAllEventsToBeSent(subCtx, cancel); err != nil {
+ //Log the error here
+ logger.Errorw(ctx, "failed-to-send-all-events-on-the-logical-device-before-deletion",
+ log.Fields{"error": err, "logical-device-id": agent.logicalDeviceID})
+ }
//Remove the logical device from the model
if err := agent.ldProxy.Remove(ctx, agent.logicalDeviceID); err != nil {
returnErr = err