Fix tracking locked queue ids (closes #1066)

This commit is contained in:
mdecimus
2025-01-11 11:10:01 +01:00
parent fcbf58f88d
commit dc19f20285
9 changed files with 159 additions and 127 deletions

View File

@@ -127,3 +127,14 @@ From: user@spf-dkim-allow.org
Subject: test
Test
<!-- NEXT TEST -->
spf.result pass
dkim.result pass
arc.result pass
dmarc.result pass
envelope_from hello@stalw.art
expect TRUSTED_DOMAIN DMARC_POLICY_ALLOW DKIM_ALLOW SPF_ALLOW ARC_ALLOW
From: <hello@stalw.art>
Test

View File

@@ -302,7 +302,7 @@ pub trait TestQueueEvent {
fn assert_refresh(self);
fn assert_done(self);
fn assert_refresh_or_done(self);
fn unwrap_on_hold(self) -> OnHold<QueuedMessage>;
fn unwrap_on_hold(self) -> OnHold;
}
impl TestQueueEvent for QueueEvent {
@@ -327,9 +327,9 @@ impl TestQueueEvent for QueueEvent {
}
}
fn unwrap_on_hold(self) -> OnHold<QueuedMessage> {
fn unwrap_on_hold(self) -> OnHold {
match self {
QueueEvent::OnHold(value) => value,
QueueEvent::OnHold { status, .. } => status,
e => panic!("Unexpected event: {e:?}"),
}
}

View File

@@ -108,7 +108,7 @@ async fn lmtp_delivery() {
loop {
match local.queue_receiver.try_read_event().await {
Some(QueueEvent::Refresh(_) | QueueEvent::WorkerDone(_)) => {}
Some(QueueEvent::OnHold(_)) | Some(QueueEvent::Paused(_)) => unreachable!(),
Some(QueueEvent::OnHold { .. }) | Some(QueueEvent::Paused(_)) => unreachable!(),
None | Some(QueueEvent::Stop) => break,
}

View File

@@ -137,7 +137,7 @@ async fn smtp_delivery() {
loop {
match local.queue_receiver.try_read_event().await {
Some(QueueEvent::Refresh(_) | QueueEvent::WorkerDone(_)) => {}
Some(QueueEvent::OnHold(_)) | Some(QueueEvent::Paused(_)) => unreachable!(),
Some(QueueEvent::OnHold { .. }) | Some(QueueEvent::Paused(_)) => unreachable!(),
None | Some(QueueEvent::Stop) => break,
}

View File

@@ -93,8 +93,8 @@ async fn queue_retry() {
Some(QueueEvent::Refresh(Some(queue_id)) | QueueEvent::WorkerDone(queue_id)) => {
in_fight.remove(&queue_id);
}
Some(QueueEvent::OnHold(event)) => {
panic!("unexpected on hold event: {:?}", event);
Some(QueueEvent::OnHold { queue_id, status }) => {
panic!("unexpected on hold event {queue_id}: {status:?}");
}
Some(QueueEvent::Refresh(None)) => (),
None | Some(QueueEvent::Stop) | Some(QueueEvent::Paused(_)) => break,
@@ -121,9 +121,7 @@ async fn queue_retry() {
} else {
retries.push(event.due.saturating_sub(now));
in_fight.insert(event.queue_id);
assert!(DeliveryAttempt::new(event)
.try_deliver(core.clone())
.is_none());
DeliveryAttempt::new(event).try_deliver(core.clone());
tokio::time::sleep(Duration::from_millis(100)).await;
}
}