mirror of
https://github.com/rustfs/rustfs.git
synced 2026-09-06 03:59:14 +00:00
test(ecstore): stabilize transition generation fixture
This commit is contained in:
@@ -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");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user