From 9524b397807d5ef61c5a21feb15bec8df19db959 Mon Sep 17 00:00:00 2001 From: overtrue Date: Tue, 8 Sep 2026 16:26:09 +0800 Subject: [PATCH] fix: continue manual transition past in-flight objects (cherry picked from commit 9a2438964675d32d380d3f1ebc9bd354a95a7bbd) --- .../bucket/lifecycle/bucket_lifecycle_ops.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/crates/ecstore/src/bucket/lifecycle/bucket_lifecycle_ops.rs b/crates/ecstore/src/bucket/lifecycle/bucket_lifecycle_ops.rs index ea7a273a3..0bbde6629 100644 --- a/crates/ecstore/src/bucket/lifecycle/bucket_lifecycle_ops.rs +++ b/crates/ecstore/src/bucket/lifecycle/bucket_lifecycle_ops.rs @@ -4036,6 +4036,10 @@ impl ManualTransitionRunReport { || self.skipped_queue_timeout > 0 } + fn has_enqueue_backpressure(&self) -> bool { + self.skipped_queue_full > 0 || self.skipped_queue_closed > 0 || self.skipped_queue_timeout > 0 + } + pub fn was_truncated(&self) -> bool { self.truncated_by_limit || self.truncated_by_duration || self.cancelled } @@ -4251,7 +4255,7 @@ pub async fn enqueue_transition_for_existing_objects_scoped( } report.scanned = report.scanned.saturating_add(1); enqueue_transition_with_lifecycle_report(Some(api.clone()), object, &lc, &src, &options, &mut report).await; - if report.has_partial_enqueue() { + if report.has_enqueue_backpressure() { report.next_marker.clone_from(&previous_marker); report.next_version_idmarker.clone_from(&previous_version_marker); report.continuation_token = @@ -9950,6 +9954,18 @@ mod tests { assert_eq!(report.skipped_queue_closed, 0); assert_eq!(report.skipped_queue_timeout, 0); assert!(report.has_partial_enqueue()); + assert!(report.has_enqueue_backpressure()); + } + + #[test] + fn manual_transition_in_flight_skip_does_not_stop_the_scan() { + let options = ManualTransitionRunOptions::default(); + let mut report = ManualTransitionRunReport::new("bucket", &options); + + report.record_enqueue_outcome(TransitionEnqueueOutcome::AlreadyInFlight); + + assert!(report.has_partial_enqueue()); + assert!(!report.has_enqueue_backpressure()); } #[test]