feat(processing_engine): Allow async plugin execution. #25994
Merged
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.
This PR enables scheduled and WAL plugins to run asynchronously, i.e. they will trigger even if a previous instance of the plugin is still running. I've been testing these by just calling
sleep(20)
from inside of the plugin method.In confirming that these worked as expected I realized that we were calling blocking PyO3 methods from within our async server methods. This can lead to bad behavior, locking up the tokio worker threads. As such, for both synchronous and asynchronous execution I've switched to using
tokio::task::spawn_blocking
. This requires moving all of the arguments into the closure, but they are mainly wrapped in Arc's already so not terribly costly.Currently async execution is specified via
--run-asynchronous
from the CLI, which addsTriggerFlag::ExecuteAsynchronously
to the TriggerDefinition.