From 556f8ed62fccd6c7cd356238e826711fc0e817a4 Mon Sep 17 00:00:00 2001 From: houseme Date: Sun, 26 Jul 2026 14:40:33 +0800 Subject: [PATCH 1/2] chore(deps): update flake.lock (#5271) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/20535e4' (2026-07-18) → 'github:NixOS/nixpkgs/335f073' (2026-07-24) • Updated input 'rust-overlay': 'github:oxalica/rust-overlay/afacd68' (2026-07-19) → 'github:oxalica/rust-overlay/fe21243' (2026-07-26) --- flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index c3a3d8ee1..577399e96 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1784364478, - "narHash": "sha256-CdItYNdYUlm7NxqMVyQKqT2IxTwvapiPuRLWOyHTrbY=", + "lastModified": 1784872115, + "narHash": "sha256-THPEF2po0fsoH8gNtp+Ae0XFDJH3N/ol7xO3v6VMTJU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "20535e48e12c86043b577b8518234ff5dbb26957", + "rev": "335f0738cb2fa9708f3f428e39d2eae975d1338d", "type": "github" }, "original": { @@ -29,11 +29,11 @@ ] }, "locked": { - "lastModified": 1784438913, - "narHash": "sha256-NYF7ZM5ip0u+w1pBFDpIGEbrbgN/wpnLFAmBkWkYMXw=", + "lastModified": 1785044261, + "narHash": "sha256-ehF/c4fLdgmNu7YXEClnmwhoBYddhYIVoSQpsZoorC4=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "afacd6819d3765a05814ee8e3de74c77d42ac799", + "rev": "fe2124391e739e7b3e8720cd8a73f06edd0aceba", "type": "github" }, "original": { From a047bbfcfbeac84a091d87cd8c9d870ee2a5c17c Mon Sep 17 00:00:00 2001 From: houseme Date: Sun, 26 Jul 2026 14:45:06 +0800 Subject: [PATCH 2/2] test(ilm): cover manual transition worker failure summary (#5272) Co-authored-by: heihutu --- .../bucket/lifecycle/bucket_lifecycle_ops.rs | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/crates/ecstore/src/bucket/lifecycle/bucket_lifecycle_ops.rs b/crates/ecstore/src/bucket/lifecycle/bucket_lifecycle_ops.rs index 6381bf837..a1eb94727 100644 --- a/crates/ecstore/src/bucket/lifecycle/bucket_lifecycle_ops.rs +++ b/crates/ecstore/src/bucket/lifecycle/bucket_lifecycle_ops.rs @@ -4571,9 +4571,10 @@ mod tests { }; use crate::bucket::lifecycle::manual_transition_job::{ ManualTransitionJobRecord, ManualTransitionJobState, ManualTransitionScopeAdmission, ManualTransitionScopeAdmissionClaim, - claim_manual_transition_scope_admission, legacy_manual_transition_scope_key, load_manual_transition_job_record, - load_manual_transition_scope_admission, renew_manual_transition_job_lease, request_manual_transition_job_cancel, - save_manual_transition_job_record, save_manual_transition_scope_admission_if_absent, + ManualTransitionWorkerResult, claim_manual_transition_scope_admission, legacy_manual_transition_scope_key, + load_manual_transition_job_record, load_manual_transition_scope_admission, renew_manual_transition_job_lease, + request_manual_transition_job_cancel, save_manual_transition_job_record, + save_manual_transition_scope_admission_if_absent, }; use crate::bucket::lifecycle::replication_sink::{ ReplicateDecision, ReplicateTargetDecision, ReplicationStatusType, VersionPurgeStatusType, @@ -7326,6 +7327,36 @@ mod tests { assert!(!report.has_partial_enqueue()); } + #[test] + fn manual_transition_complete_preserves_worker_failure_summary() { + let options = ManualTransitionRunOptions::default(); + let mut record = ManualTransitionJobRecord::new(Uuid::new_v4(), "manual-worker-summary-bucket", &options, "owner-a"); + + record.record_worker_result(ManualTransitionWorkerResult::Completed, ManualTransitionQueueSnapshot::default()); + record.record_worker_result(ManualTransitionWorkerResult::TierFailure, ManualTransitionQueueSnapshot::default()); + record.complete( + ManualTransitionRunReport { + bucket: "manual-worker-summary-bucket".to_string(), + scanned: 3, + eligible: 2, + enqueued: 2, + tier_failure: 1, + ..Default::default() + }, + ManualTransitionQueueSnapshot::default(), + ); + + assert_eq!(record.state, ManualTransitionJobState::Partial); + assert!(record.scan_completed); + assert_eq!(record.report.scanned, 3); + assert_eq!(record.report.eligible, 2); + assert_eq!(record.report.enqueued, 2); + assert_eq!(record.report.transition_completed, 1); + assert_eq!(record.report.transition_failed, 1); + assert_eq!(record.report.tier_failure, 2); + assert!(record.completed_at_unix_nanos.is_some()); + } + #[tokio::test] async fn manual_transition_counts_already_transitioned_object() { let lc = latest_transition_lifecycle();