From 76aad3772bc5da3aeef6c0c8dfcc6dc667b3fba7 Mon Sep 17 00:00:00 2001 From: overtrue Date: Sun, 23 Aug 2026 11:21:16 +0800 Subject: [PATCH] test(ecstore): make free-version migration fixtures decode-faithful Decoded tier free versions always carry both the on-disk free-version suffix and the in-memory tier marker, and real decommission targets already contain the bucket volume. Mirror both invariants in the migration regression fixtures so write-path metadata validation and rename publication behave exactly as in production. --- crates/ecstore/src/set_disk/mod.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/crates/ecstore/src/set_disk/mod.rs b/crates/ecstore/src/set_disk/mod.rs index 269d32b7d..d6c2a0aac 100644 --- a/crates/ecstore/src/set_disk/mod.rs +++ b/crates/ecstore/src/set_disk/mod.rs @@ -10048,6 +10048,10 @@ mod tests { let set_disks = make_local_bucket_test_set_disks().await; let bucket = "free-version-decommission"; let object = "object.txt"; + set_disks + .make_bucket(bucket, &MakeBucketOptions::default()) + .await + .expect("target bucket should exist before free-version migration"); let version_id = Uuid::new_v4(); let mut free_version = FileInfo { name: object.to_string(), @@ -10060,6 +10064,14 @@ mod tests { ..Default::default() }; free_version.set_tier_free_version(); + // Decoded free versions always carry the on-disk free-version + // suffix alongside the in-memory tier marker; mirror that here so + // the record satisfies delete-marker metadata validation. + rustfs_utils::http::metadata_compat::insert_str( + &mut free_version.metadata, + rustfs_utils::http::metadata_compat::SUFFIX_FREE_VERSION, + String::new(), + ); set_disks .decommission_tier_free_version(bucket, object, &free_version, &ObjectOptions::default()) @@ -10099,6 +10111,10 @@ mod tests { let set_disks = make_local_bucket_test_set_disks_with_drive_count(4).await; let bucket = "free-version-decommission-resume"; let object = "object.txt"; + set_disks + .make_bucket(bucket, &MakeBucketOptions::default()) + .await + .expect("target bucket should exist before free-version migration"); let mut free_version = FileInfo { name: object.to_string(), volume: bucket.to_string(), @@ -10110,6 +10126,14 @@ mod tests { ..Default::default() }; free_version.set_tier_free_version(); + // Decoded free versions always carry the on-disk free-version + // suffix alongside the in-memory tier marker; mirror that here so + // the record satisfies delete-marker metadata validation. + rustfs_utils::http::metadata_compat::insert_str( + &mut free_version.metadata, + rustfs_utils::http::metadata_compat::SUFFIX_FREE_VERSION, + String::new(), + ); let opts = ObjectOptions::default(); let disks = set_disks.get_disks_internal().await;