fix(sender): Only claim a destination when the send is allowed

This commit is contained in:
Erwan Leboucher authored and Ellis Git committed 2026-09-11 14:17:45 +00:00
1 parent 644d247007
commit 9d7c8be390
1 file changed
+21 -21
+21 -21
View File
@@ -419,27 +419,27 @@ impl Service {
return Ok((false, false));
}
}
statuses
.entry(dest.clone())
.and_modify(|e| match e {
| TransactionStatus::Running | TransactionStatus::Retrying(_) => {
allow = false; // already running
trace!("Transaction is already running for {dest:?}");
},
| TransactionStatus::Failed(tries, _) => {
if allow {
*e = TransactionStatus::Retrying(*tries);
trace!(
"Previous transaction failed for {dest:?} ({e:?}), will retry"
);
}
retry = true;
},
})
.or_insert_with(|| {
trace!("Inserting running status for {dest:?}");
TransactionStatus::Running
});
let entry = statuses.entry(dest.clone()).and_modify(|e| match e {
| TransactionStatus::Running | TransactionStatus::Retrying(_) => {
allow = false; // already running
trace!("Transaction is already running for {dest:?}");
},
| TransactionStatus::Failed(tries, _) => {
if allow {
*e = TransactionStatus::Retrying(*tries);
trace!("Previous transaction failed for {dest:?} ({e:?}), will retry");
}
retry = true;
},
});
// Only claim the destination if we are actually going to send. A status
// inserted here without a transaction being queued is never cleared.
if allow {
trace!("Inserting running status for {dest:?}");
entry.or_insert(TransactionStatus::Running);
}
return Ok((allow, retry));
}