mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 18:07:58 +00:00
Graceful shutdown for the task manager (#6654)
* Initial commit
Forked at: 74655edebc
Parent branch: origin/master
* Move task_manager.rs to mod.rs
* Graceful shutdown for the task manager
* Await all background task JoinHandle at the same time
* Add tests
* Make future() wait also for exit signal + fix essential task failed
Probably related to https://github.com/paritytech/cumulus/issues/111
* add comments for non-obvious code
* Use clean_shutdown() in sc-cli
* Adapt code and upgrade tokio in sc-cli
* cleanup spacing in doc
* Add license
* I guess actually running the clean shutdown would be a good idea
* fix tests
* Update client/cli/src/runner.rs
Co-authored-by: Benjamin Kampmann <ben@gnunicorn.org>
* Improve error logging
* disable other tests (can't reproduce on my machine)
* Revert "disable other tests (can't reproduce on my machine)"
This reverts commit c133c590f33c253123ba0555ce719a71ededd60d.
* It is possible that the tasks are ended first
* Revert "It is possible that the tasks are ended first"
This reverts commit 502aba4a49fb5d892e704c412b8a81768a3f2c71.
* Use single threaded scheduler for more predictability
* enable_time
* Revert "enable_time"
This reverts commit 4e152140764a4bddeedff06a4e36ec701909e8c7.
* Revert "Use single threaded scheduler for more predictability"
This reverts commit ee5e13c5f13ff71e012dcda13579dffeb15f8ffc.
* Revert "Revert "It is possible that the tasks are ended first""
This reverts commit 1b91a8ca3eebbdc18be199c8ca188e88669ae649.
* This cannot be verified either with a threaded pool
* Apply suggestions from code review
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: Benjamin Kampmann <ben@parity.io>
Co-authored-by: Benjamin Kampmann <ben@gnunicorn.org>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This commit is contained in:
@@ -94,8 +94,8 @@ pub fn build_runtime() -> std::result::Result<tokio::runtime::Runtime, std::io::
|
||||
}
|
||||
|
||||
fn run_until_exit<FUT, ERR>(
|
||||
mut tokio_runtime: tokio::runtime::Runtime,
|
||||
future: FUT,
|
||||
mut tokio_runtime: tokio::runtime::Runtime,
|
||||
future: FUT,
|
||||
mut task_manager: TaskManager,
|
||||
) -> Result<()>
|
||||
where
|
||||
@@ -128,14 +128,10 @@ impl<C: SubstrateCli> Runner<C> {
|
||||
|
||||
let task_executor = move |fut, task_type| {
|
||||
match task_type {
|
||||
TaskType::Async => { runtime_handle.spawn(fut); }
|
||||
TaskType::Blocking => {
|
||||
runtime_handle.spawn(async move {
|
||||
// `spawn_blocking` is looking for the current runtime, and as such has to
|
||||
// be called from within `spawn`.
|
||||
tokio::task::spawn_blocking(move || futures::executor::block_on(fut))
|
||||
});
|
||||
}
|
||||
TaskType::Async => runtime_handle.spawn(fut).map(drop),
|
||||
TaskType::Blocking =>
|
||||
runtime_handle.spawn_blocking(move || futures::executor::block_on(fut))
|
||||
.map(drop),
|
||||
}
|
||||
};
|
||||
|
||||
@@ -235,8 +231,7 @@ impl<C: SubstrateCli> Runner<C> {
|
||||
let mut task_manager = initialise(self.config)?;
|
||||
self.tokio_runtime.block_on(main(task_manager.future().fuse()))
|
||||
.map_err(|e| e.to_string())?;
|
||||
task_manager.terminate();
|
||||
drop(self.tokio_runtime);
|
||||
self.tokio_runtime.block_on(task_manager.clean_shutdown());
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user