[TestLoop] Make MessageWithCallback accept future as a result. #12212
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Previously,
MessageWithCallback<T, R>
containsT
as well as a callback that is a function that accepts anResult<R, AsyncSendError>
. And then,AsyncSender<T, R>
is simplySender<MessageWithCallback<T, R>>
.The problem was that in the actix implementation of
Sender<MessageWithCallback<T, R>>
, because on the actix side when we call.send(msg)
it gives us a future ofR
, we cannot call the callback right away. The solution was toactix::spawn
a future that awaits this future ofR
and then we call the callback.This was a bad design, because it is actually the sender (code that calls
.send_async(...)
) who ends up callingactix::spawn
, and that panics if the sender was not on an actix thread.This PR changes that so that
MessageWithCallback<T, R>
contains a callback that accepts a future of the result. That way, it becomes the responsibility of whoever awaits on the resulting future from.send_async(...)
to drive the result future, and there won't be any problems since we don't spawn anything anymore.Also correct a use case where code in the test was sending a custom MessageWithCallback. This is not supported; changed it to spawning a future on the testloop instead.