fix(irtt): retry terminal targets without restarting healthy sessions
Build binaries / Build (arm-musleabi) (push) Failing after 24m1s
Build binaries / Build (aarch64-musl) (push) Failing after 24m1s
Build binaries / Build (armv7-musleabi) (push) Failing after 11m33s
Build binaries / Build (arm-musleabihf) (push) Failing after 30m39s
Build binaries / Build (i686-musl) (push) Successful in 2m7s
Build binaries / Build (armv7-musleabihf) (push) Successful in 2m9s
Build binaries / Build (mips-musl) (push) Successful in 2m7s
Build binaries / Build (mips64-muslabi64) (push) Successful in 2m11s
Build binaries / Build (mips64el-muslabi64) (push) Successful in 2m11s
Build binaries / Build (mipsel-musl) (push) Successful in 2m15s
Build binaries / Build (riscv64gc-musl) (push) Successful in 1m42s
Build binaries / Build (x86_64-musl) (push) Successful in 2m0s
Build binaries / Build (arm-musleabi) (push) Failing after 24m1s
Build binaries / Build (aarch64-musl) (push) Failing after 24m1s
Build binaries / Build (armv7-musleabi) (push) Failing after 11m33s
Build binaries / Build (arm-musleabihf) (push) Failing after 30m39s
Build binaries / Build (i686-musl) (push) Successful in 2m7s
Build binaries / Build (armv7-musleabihf) (push) Successful in 2m9s
Build binaries / Build (mips-musl) (push) Successful in 2m7s
Build binaries / Build (mips64-muslabi64) (push) Successful in 2m11s
Build binaries / Build (mips64el-muslabi64) (push) Successful in 2m11s
Build binaries / Build (mipsel-musl) (push) Successful in 2m15s
Build binaries / Build (riscv64gc-musl) (push) Successful in 1m42s
Build binaries / Build (x86_64-musl) (push) Successful in 2m0s
This commit is contained in:
1 file changed
+22
-3
+22
-3
@@ -7,7 +7,7 @@ use irtt_client::{
|
|||||||
ManagedClient, ManagedClientConfig, ManagedClientHandle, ManagedClientTask,
|
ManagedClient, ManagedClientConfig, ManagedClientHandle, ManagedClientTask,
|
||||||
ManagedCommandApplyError, ManagedCommandError, ManagedCompletionPolicy, ManagedConfigError,
|
ManagedCommandApplyError, ManagedCommandError, ManagedCompletionPolicy, ManagedConfigError,
|
||||||
ManagedEndReason, ManagedEvent, ManagedLifecycle, ManagedSubscribeError,
|
ManagedEndReason, ManagedEvent, ManagedLifecycle, ManagedSubscribeError,
|
||||||
ManagedTargetConfig, ManagedTargetEndReason, TargetAuth, TargetId,
|
ManagedTargetConfig, ManagedTargetEndReason, ManagedTargetLifecycle, TargetAuth, TargetId,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use log::{debug, trace, warn};
|
use log::{debug, trace, warn};
|
||||||
@@ -81,6 +81,7 @@ pub struct IrttEngine {
|
|||||||
client: ManagedClientHandle,
|
client: ManagedClientHandle,
|
||||||
|
|
||||||
bindings: HashMap<MeasurementStreamId, IrttBinding>,
|
bindings: HashMap<MeasurementStreamId, IrttBinding>,
|
||||||
|
targets: Vec<ManagedTargetConfig>,
|
||||||
|
|
||||||
origin: Instant,
|
origin: Instant,
|
||||||
|
|
||||||
@@ -104,6 +105,7 @@ impl IrttEngine {
|
|||||||
Self {
|
Self {
|
||||||
client: handle,
|
client: handle,
|
||||||
bindings: HashMap::new(),
|
bindings: HashMap::new(),
|
||||||
|
targets: Vec::new(),
|
||||||
origin,
|
origin,
|
||||||
binding_rx,
|
binding_rx,
|
||||||
observation_tx,
|
observation_tx,
|
||||||
@@ -126,9 +128,10 @@ impl IrttEngine {
|
|||||||
}
|
}
|
||||||
target
|
target
|
||||||
})
|
})
|
||||||
.collect();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
self.client.update_targets(targets)?.await?;
|
self.client.update_targets(targets.clone())?.await?;
|
||||||
|
self.targets = targets;
|
||||||
|
|
||||||
self.bindings = bindings
|
self.bindings = bindings
|
||||||
.into_iter()
|
.into_iter()
|
||||||
@@ -166,6 +169,11 @@ impl IrttEngine {
|
|||||||
|
|
||||||
async fn run_events(&mut self) -> Result<(), IrttError> {
|
async fn run_events(&mut self) -> Result<(), IrttError> {
|
||||||
let mut events = self.client.subscribe()?;
|
let mut events = self.client.subscribe()?;
|
||||||
|
// Durable status catches failures even if their presentation events were lost.
|
||||||
|
// Resubmitting the full desired set restarts terminal targets only.
|
||||||
|
let mut retry = tokio::time::interval(std::time::Duration::from_secs(5));
|
||||||
|
retry.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Delay);
|
||||||
|
retry.tick().await;
|
||||||
loop {
|
loop {
|
||||||
tokio::select! {
|
tokio::select! {
|
||||||
bindings = self.binding_rx.recv_async() => {
|
bindings = self.binding_rx.recv_async() => {
|
||||||
@@ -175,6 +183,17 @@ impl IrttEngine {
|
|||||||
self.set_bindings(bindings).await?;
|
self.set_bindings(bindings).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ = retry.tick() => {
|
||||||
|
if SHUTDOWN.load(std::sync::atomic::Ordering::Relaxed) {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
if self.client.status().targets.iter().any(|target| {
|
||||||
|
target.desired && target.lifecycle == ManagedTargetLifecycle::Terminal
|
||||||
|
}) {
|
||||||
|
self.client.update_targets(self.targets.clone())?.await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
event = events.recv() => {
|
event = events.recv() => {
|
||||||
let event = match event {
|
let event = match event {
|
||||||
Ok(event) => event,
|
Ok(event) => event,
|
||||||
|
|||||||
Reference in new issue
Block a user