commit 2152d9bca992a1dbddeccc573f1b5b0f43e719ea
parent 0cd6ecd9be4fb9d72dc338c027c379bfbf0388b8
Author: triesap <tyson@radroots.org>
Date: Tue, 7 Jul 2026 23:12:36 +0000
outbox: release signing claims on completion
Diffstat:
2 files changed, 14 insertions(+), 39 deletions(-)
diff --git a/crates/outbox/src/store.rs b/crates/outbox/src/store.rs
@@ -601,7 +601,7 @@ impl RadrootsOutbox {
}
let signed_event_json = serde_json::to_string(&signed_event)?;
let changed = sqlx::query(
- "UPDATE outbox_event SET signed_event_json = ?, raw_event_json = ?, state = ?, last_error = NULL, updated_at_ms = ? WHERE outbox_event_id = ? AND claim_token = ?",
+ "UPDATE outbox_event SET signed_event_json = ?, raw_event_json = ?, state = ?, claim_token = NULL, claim_owner = NULL, claim_expires_at_ms = NULL, active_delivery_plan_id = NULL, last_error = NULL, updated_at_ms = ? WHERE outbox_event_id = ? AND claim_token = ?",
)
.bind(signed_event_json.as_str())
.bind(signed_event.raw_json.as_str())
@@ -2982,7 +2982,7 @@ mod tests {
.expect("event")
.expect("event");
assert_eq!(event.state, RadrootsOutboxEventState::PreviewUnavailable);
- assert_eq!(event.claim_token.as_deref(), Some("claim-a"));
+ assert_eq!(event.claim_token, None);
let operation = outbox
.get_operation(receipt.operation_id)
.await
@@ -2992,23 +2992,9 @@ mod tests {
operation.status,
RadrootsOutboxOperationStatus::PreviewUnavailable
);
- assert_eq!(
- outbox.recover_expired_claims(2_001).await.expect("recover"),
- 1
- );
- let recovered_event = outbox
- .get_event(receipt.outbox_event_id)
- .await
- .expect("event")
- .expect("event");
- assert_eq!(
- recovered_event.state,
- RadrootsOutboxEventState::PreviewUnavailable
- );
- assert_eq!(recovered_event.claim_token, None);
assert!(
outbox
- .claim_next_ready_signed_event("publisher", "claim-b", 3_000, 2_100)
+ .claim_next_ready_signed_event("publisher", "claim-b", 3_000, 1_100)
.await
.expect("claim")
.is_none()
@@ -3244,9 +3230,8 @@ mod tests {
)
.await
.expect("complete signing");
- outbox.recover_expired_claims(2_001).await.expect("recover");
outbox
- .claim_next_ready_event("publisher", "claim-b", 3_000, 2_100)
+ .claim_next_ready_event("publisher", "claim-b", 3_000, 1_100)
.await
.expect("claim")
.expect("publish claim");
diff --git a/crates/transport_nostr/tests/transport.rs b/crates/transport_nostr/tests/transport.rs
@@ -1304,9 +1304,8 @@ async fn outbox_publish_persists_partial_success_and_skips_accepted_retry() {
.expect("claim")
.expect("claim");
let signed = complete_claimed_signing(&outbox, &claimed, 1_100).await;
- outbox.recover_expired_claims(2_001).await.expect("recover");
let publish_claim = outbox
- .claim_next_ready_event("publisher", "publish-a", 3_000, 2_100)
+ .claim_next_ready_event("publisher", "publish-a", 3_000, 1_100)
.await
.expect("claim")
.expect("publish claim");
@@ -1441,9 +1440,8 @@ async fn outbox_transport_publish_failure_releases_retryable_claim() {
.expect("claim")
.expect("claim");
complete_claimed_signing(&outbox, &claimed, 1_100).await;
- outbox.recover_expired_claims(2_001).await.expect("recover");
let publish_claim = outbox
- .claim_next_ready_event("publisher", "publish-a", 3_000, 2_100)
+ .claim_next_ready_event("publisher", "publish-a", 3_000, 1_100)
.await
.expect("claim")
.expect("publish claim");
@@ -1534,9 +1532,8 @@ async fn outbox_publish_marks_published_without_adapter_when_all_relays_already_
.expect("claim")
.expect("claim");
let signed = complete_claimed_signing(&outbox, &claimed, 1_100).await;
- outbox.recover_expired_claims(2_001).await.expect("recover");
let publish_claim = outbox
- .claim_next_ready_event("publisher", "publish-a", 3_000, 2_100)
+ .claim_next_ready_event("publisher", "publish-a", 3_000, 1_100)
.await
.expect("claim")
.expect("publish claim");
@@ -1623,9 +1620,8 @@ async fn outbox_publish_ignores_unknown_adapter_receipts() {
.expect("claim")
.expect("claim");
let signed = complete_claimed_signing(&outbox, &claimed, 1_100).await;
- outbox.recover_expired_claims(2_001).await.expect("recover");
let publish_claim = outbox
- .claim_next_ready_event("publisher", "publish-a", 3_000, 2_100)
+ .claim_next_ready_event("publisher", "publish-a", 3_000, 1_100)
.await
.expect("claim")
.expect("publish claim");
@@ -1698,9 +1694,8 @@ async fn outbox_publish_skips_non_nostr_targets() {
.expect("claim")
.expect("claim");
complete_claimed_signing(&outbox, &claimed, 1_100).await;
- outbox.recover_expired_claims(2_001).await.expect("recover");
let publish_claim = outbox
- .claim_next_ready_event("publisher", "publish-a", 3_000, 2_100)
+ .claim_next_ready_event("publisher", "publish-a", 3_000, 1_100)
.await
.expect("claim")
.expect("publish claim");
@@ -1768,9 +1763,8 @@ async fn outbox_publish_marks_published_when_delivery_plan_satisfaction_is_met_w
.expect("claim")
.expect("claim");
let signed = complete_claimed_signing(&outbox, &claimed, 1_100).await;
- outbox.recover_expired_claims(2_001).await.expect("recover");
let publish_claim = outbox
- .claim_next_ready_event("publisher", "publish-a", 3_000, 2_100)
+ .claim_next_ready_event("publisher", "publish-a", 3_000, 1_100)
.await
.expect("claim")
.expect("publish claim");
@@ -1869,9 +1863,8 @@ async fn outbox_publish_republishes_accepted_relays_when_policy_requests_it() {
.expect("claim")
.expect("claim");
let signed = complete_claimed_signing(&outbox, &claimed, 1_100).await;
- outbox.recover_expired_claims(2_001).await.expect("recover");
let publish_claim = outbox
- .claim_next_ready_event("publisher", "publish-a", 3_000, 2_100)
+ .claim_next_ready_event("publisher", "publish-a", 3_000, 1_100)
.await
.expect("claim")
.expect("publish claim");
@@ -1953,9 +1946,8 @@ async fn outbox_publish_republish_policy_keeps_terminal_targets_excluded() {
.expect("claim")
.expect("claim");
complete_claimed_signing(&outbox, &claimed, 1_100).await;
- outbox.recover_expired_claims(2_001).await.expect("recover");
let publish_claim = outbox
- .claim_next_ready_event("publisher", "publish-a", 3_000, 2_100)
+ .claim_next_ready_event("publisher", "publish-a", 3_000, 1_100)
.await
.expect("claim")
.expect("publish claim");
@@ -2081,9 +2073,8 @@ async fn outbox_publish_propagates_non_transport_adapter_errors_after_target_fil
.expect("claim")
.expect("claim");
complete_claimed_signing(&outbox, &claimed, 1_100).await;
- outbox.recover_expired_claims(2_001).await.expect("recover");
let mut publish_claim = outbox
- .claim_next_ready_event("publisher", "publish-a", 3_000, 2_100)
+ .claim_next_ready_event("publisher", "publish-a", 3_000, 1_100)
.await
.expect("claim")
.expect("publish claim");
@@ -2139,9 +2130,8 @@ async fn outbox_publish_rejects_invalid_relay_target_uri_before_adapter_publish(
.expect("claim")
.expect("claim");
complete_claimed_signing(&outbox, &claimed, 1_100).await;
- outbox.recover_expired_claims(2_001).await.expect("recover");
let publish_claim = outbox
- .claim_next_ready_event("publisher", "publish-a", 3_000, 2_100)
+ .claim_next_ready_event("publisher", "publish-a", 3_000, 1_100)
.await
.expect("claim")
.expect("publish claim");