test(ecstore): stabilize transition generation fixture

This commit is contained in:
cxymds
2026-09-04 19:17:36 +08:00
parent ff3c5a4989
commit a592181fb8
@@ -25,19 +25,24 @@ use rustfs_filemeta::{RestoreStatusOps as _, parse_restore_obj_status};
use tokio::io::AsyncReadExt; use tokio::io::AsyncReadExt;
async fn prime_metadata_generation(set_disks: &SetDisks, bucket: &str, object: &str) -> GetObjectMetadataCacheKey { async fn prime_metadata_generation(set_disks: &SetDisks, bucket: &str, object: &str) -> GetObjectMetadataCacheKey {
set_disks tokio::time::timeout(Duration::from_secs(30), async {
.get_object_fileinfo(bucket, object, &ObjectOptions::default(), true, false) loop {
.await set_disks
.expect("object metadata should resolve"); .get_object_fileinfo(bucket, object, &ObjectOptions::default(), true, false)
let generation = set_disks .await
.get_object_metadata_cache_generation(bucket, object) .expect("object metadata should resolve");
.expect("metadata generation should be active"); let generation = set_disks
let key = GetObjectMetadataCacheKey::new(bucket, object, generation); .get_object_metadata_cache_generation(bucket, object)
assert!( .expect("metadata generation should be active");
set_disks.get_object_metadata_cache.get(&key).await.is_some(), let key = GetObjectMetadataCacheKey::new(bucket, object, generation);
"metadata read should publish the generation under test" if set_disks.get_object_metadata_cache.get(&key).await.is_some() {
); return key;
key }
tokio::task::yield_now().await;
}
})
.await
.expect("metadata read should publish the generation under test")
} }
async fn assert_generation_reclaimed(set_disks: &SetDisks, key: &GetObjectMetadataCacheKey) { async fn assert_generation_reclaimed(set_disks: &SetDisks, key: &GetObjectMetadataCacheKey) {
@@ -60,8 +65,17 @@ async fn transition_and_restore_reclaim_prior_metadata_generations() {
.await .await
.expect("bucket should be created"); .expect("bucket should be created");
let mut reader = PutObjReader::from_vec(payload.clone()); let mut reader = PutObjReader::from_vec(payload.clone());
// Cache priming must not race a quorum-acknowledged PUT's remaining rename tail.
let original = set_disks let original = set_disks
.put_object(bucket, object, &mut reader, &ObjectOptions::default()) .put_object(
bucket,
object,
&mut reader,
&ObjectOptions {
no_lock: true,
..Default::default()
},
)
.await .await
.expect("source object should be written"); .expect("source object should be written");
let source_generation = prime_metadata_generation(&set_disks, bucket, object).await; let source_generation = prime_metadata_generation(&set_disks, bucket, object).await;
@@ -164,8 +178,17 @@ async fn prepared_snapshot_transition_duplicate_and_late_get_use_committed_remot
.await .await
.expect("bucket should be created"); .expect("bucket should be created");
let mut reader = PutObjReader::from_vec(payload.clone()); let mut reader = PutObjReader::from_vec(payload.clone());
// Cache priming must not race a quorum-acknowledged PUT's remaining rename tail.
let original = set_disks let original = set_disks
.put_object(bucket, object, &mut reader, &ObjectOptions::default()) .put_object(
bucket,
object,
&mut reader,
&ObjectOptions {
no_lock: true,
..Default::default()
},
)
.await .await
.expect("source object should be written"); .expect("source object should be written");