mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-19 01:51:02 +00:00
Do not spawn additional task for on-demand relays (#933)
* do not spawn additional task for on-demand relays * compilation
This commit is contained in:
committed by
Bastian Köcher
parent
0e34a11309
commit
38cd3a328d
@@ -38,6 +38,7 @@ pub trait Client: 'static + Clone + Send + Sync {
|
||||
pub fn relay_loop<SC, TC>(source_client: SC, target_client: TC) -> Loop<SC, TC, ()> {
|
||||
Loop {
|
||||
reconnect_delay: RECONNECT_DELAY,
|
||||
spawn_loop_task: true,
|
||||
source_client,
|
||||
target_client,
|
||||
loop_metric: None,
|
||||
@@ -49,6 +50,7 @@ pub fn relay_metrics(prefix: Option<String>, params: MetricsParams) -> LoopMetri
|
||||
LoopMetrics {
|
||||
relay_loop: Loop {
|
||||
reconnect_delay: RECONNECT_DELAY,
|
||||
spawn_loop_task: true,
|
||||
source_client: (),
|
||||
target_client: (),
|
||||
loop_metric: None,
|
||||
@@ -63,6 +65,7 @@ pub fn relay_metrics(prefix: Option<String>, params: MetricsParams) -> LoopMetri
|
||||
/// Generic relay loop.
|
||||
pub struct Loop<SC, TC, LM> {
|
||||
reconnect_delay: Duration,
|
||||
spawn_loop_task: bool,
|
||||
source_client: SC,
|
||||
target_client: TC,
|
||||
loop_metric: Option<LM>,
|
||||
@@ -84,11 +87,23 @@ impl<SC, TC, LM> Loop<SC, TC, LM> {
|
||||
self
|
||||
}
|
||||
|
||||
/// Set spawn-dedicated-loop-task flag.
|
||||
///
|
||||
/// If `true` (default), separate async task is spawned to run relay loop. This is the default
|
||||
/// behavior for all loops. If `false`, then loop is executed as a part of the current
|
||||
/// task. The `false` is used for on-demand tasks, which are cancelled from time to time
|
||||
/// and there's already a dedicated on-demand task for running such loops.
|
||||
pub fn spawn_loop_task(mut self, spawn_loop_task: bool) -> Self {
|
||||
self.spawn_loop_task = spawn_loop_task;
|
||||
self
|
||||
}
|
||||
|
||||
/// Start building loop metrics using given prefix.
|
||||
pub fn with_metrics(self, prefix: Option<String>, params: MetricsParams) -> LoopMetrics<SC, TC, ()> {
|
||||
LoopMetrics {
|
||||
relay_loop: Loop {
|
||||
reconnect_delay: self.reconnect_delay,
|
||||
spawn_loop_task: self.spawn_loop_task,
|
||||
source_client: self.source_client,
|
||||
target_client: self.target_client,
|
||||
loop_metric: None,
|
||||
@@ -113,7 +128,8 @@ impl<SC, TC, LM> Loop<SC, TC, LM> {
|
||||
TC: 'static + Client,
|
||||
LM: 'static + Send + Clone,
|
||||
{
|
||||
async_std::task::spawn(async move {
|
||||
let spawn_loop_task = self.spawn_loop_task;
|
||||
let run_loop_task = async move {
|
||||
crate::initialize::initialize_loop(loop_name);
|
||||
|
||||
loop {
|
||||
@@ -162,8 +178,13 @@ impl<SC, TC, LM> Loop<SC, TC, LM> {
|
||||
}
|
||||
|
||||
Ok(())
|
||||
})
|
||||
.await
|
||||
};
|
||||
|
||||
if spawn_loop_task {
|
||||
async_std::task::spawn(run_loop_task).await
|
||||
} else {
|
||||
run_loop_task.await
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -239,6 +260,7 @@ impl<SC, TC, LM> LoopMetrics<SC, TC, LM> {
|
||||
|
||||
Ok(Loop {
|
||||
reconnect_delay: self.relay_loop.reconnect_delay,
|
||||
spawn_loop_task: self.relay_loop.spawn_loop_task,
|
||||
source_client: self.relay_loop.source_client,
|
||||
target_client: self.relay_loop.target_client,
|
||||
loop_metric: self.loop_metric,
|
||||
|
||||
Reference in New Issue
Block a user