util: ensure wait_for can only be used in a non-async runtime #61
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,
wait_forwould deadlock when used in an async runtime (ie. any async function callswait_fordirectly or indirectly). Now,wait_forreturns an error if called in an async runtime. There's no reason to call it in an async runtime / function because you can simply await the future. This change updates a few places wherewait_foris called to be async functions and just wait on the future.Why did the old
Spawnerdeadlock?Handle::current().block_on(f)and thestd::sync::mpsc::channelwould both block an executor thread in tokio (this is a very bad practice generally). If there's no executer threads available, you can't run anything. Now, the closure just doesf.awaitinstead ofblock_on, which does not block an executor. The channel is now atokio::sync::mpsc::channelas well with a buffer size of 1, so the async send will not block (I think a buffered std channel would have worked, but it's better to use tokio implementations generally). The receiver of the channel is in a sync runtime, so it does a blocking receive.Testing
wait_forreturning an error in an async runtimewait_forcalls which now return an errorCloses https://github.com/datafusion-contrib/datafusion-distributed/issues/63