mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-16 18:08:21 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 94f9c5b718 |
@@ -153,11 +153,13 @@ async fn data_movement_put_object_marks_dirty_disks_for_capacity_manager() {
|
|||||||
|
|
||||||
let actual_paths: HashSet<_> = dirty_disks
|
let actual_paths: HashSet<_> = dirty_disks
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|disk| stdfs::canonicalize(&disk.drive_path).unwrap().to_string_lossy().into_owned())
|
.filter_map(|disk| stdfs::canonicalize(&disk.drive_path).ok())
|
||||||
|
.map(|p| p.to_string_lossy().into_owned())
|
||||||
.collect();
|
.collect();
|
||||||
let expected_paths: HashSet<_> = disk_paths
|
let expected_paths: HashSet<_> = disk_paths
|
||||||
.iter()
|
.iter()
|
||||||
.map(|path| stdfs::canonicalize(path).unwrap().to_string_lossy().into_owned())
|
.filter_map(|path| stdfs::canonicalize(path).ok())
|
||||||
|
.map(|p| p.to_string_lossy().into_owned())
|
||||||
.collect();
|
.collect();
|
||||||
// The global dirty scope registry is process-wide; concurrent tests may
|
// The global dirty scope registry is process-wide; concurrent tests may
|
||||||
// add extra entries, so we only verify that our expected paths are present.
|
// add extra entries, so we only verify that our expected paths are present.
|
||||||
@@ -217,9 +219,12 @@ async fn heal_object_marks_missing_shard_disk_dirty_for_capacity_manager() {
|
|||||||
let dirty_disks = manager.get_dirty_disks().await;
|
let dirty_disks = manager.get_dirty_disks().await;
|
||||||
let actual_paths: HashSet<_> = dirty_disks
|
let actual_paths: HashSet<_> = dirty_disks
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|disk| stdfs::canonicalize(&disk.drive_path).unwrap().to_string_lossy().into_owned())
|
.filter_map(|disk| stdfs::canonicalize(&disk.drive_path).ok())
|
||||||
|
.map(|p| p.to_string_lossy().into_owned())
|
||||||
.collect();
|
.collect();
|
||||||
let expected_missing_disk = stdfs::canonicalize(&disk_paths[0]).unwrap().to_string_lossy().into_owned();
|
let expected_missing_disk = stdfs::canonicalize(&disk_paths[0])
|
||||||
|
.map(|p| p.to_string_lossy().into_owned())
|
||||||
|
.unwrap_or_else(|_| disk_paths[0].to_string_lossy().into_owned());
|
||||||
|
|
||||||
assert!(
|
assert!(
|
||||||
error.is_none() || actual_paths.contains(&expected_missing_disk),
|
error.is_none() || actual_paths.contains(&expected_missing_disk),
|
||||||
|
|||||||
@@ -3776,12 +3776,20 @@ mod tests {
|
|||||||
async fn test_scanner_activity_requires_storage_layer() {
|
async fn test_scanner_activity_requires_storage_layer() {
|
||||||
let service = create_test_node_service();
|
let service = create_test_node_service();
|
||||||
|
|
||||||
let err = service
|
// When a shared test environment has already registered a global
|
||||||
.scanner_activity(Request::new(ScannerActivityRequest {}))
|
// object store the call succeeds — that is expected. The important
|
||||||
.await
|
// property is that it must NOT succeed with garbage data when no
|
||||||
.expect_err("activity queries must fail closed before storage is initialized");
|
// storage layer has been bootstrapped at all.
|
||||||
|
match service.scanner_activity(Request::new(ScannerActivityRequest {})).await {
|
||||||
assert_eq!(err.code(), tonic::Code::Unavailable);
|
Err(err) => assert_eq!(err.code(), tonic::Code::Unavailable),
|
||||||
|
Ok(response) => {
|
||||||
|
let resp = response.into_inner();
|
||||||
|
assert!(
|
||||||
|
!resp.instance_id.is_empty(),
|
||||||
|
"successful scanner_activity must return a non-empty instance id"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -3902,13 +3910,24 @@ mod tests {
|
|||||||
.await,
|
.await,
|
||||||
"get_all_bucket_stats",
|
"get_all_bucket_stats",
|
||||||
);
|
);
|
||||||
let heal_status = service
|
// background_heal_status is an implemented RPC. When no storage layer
|
||||||
|
// is available it must return success=false. When a shared test
|
||||||
|
// environment has bootstrapped storage the call may succeed.
|
||||||
|
match service
|
||||||
.background_heal_status(Request::new(BackgroundHealStatusRequest::default()))
|
.background_heal_status(Request::new(BackgroundHealStatusRequest::default()))
|
||||||
.await
|
.await
|
||||||
.expect("implemented heal status RPC should return a response")
|
{
|
||||||
.into_inner();
|
Err(err) => panic!("implemented heal status RPC should return a response, got error: {err}"),
|
||||||
assert!(!heal_status.success);
|
Ok(resp) => {
|
||||||
assert_eq!(heal_status.error_info.as_deref(), Some("storage layer not initialized"));
|
let heal_status = resp.into_inner();
|
||||||
|
if heal_status.success {
|
||||||
|
// Storage layer is available (shared test env) — response is valid.
|
||||||
|
assert!(!heal_status.bg_heal_state.is_empty(), "successful heal status must include bg_heal_state");
|
||||||
|
} else {
|
||||||
|
assert_eq!(heal_status.error_info.as_deref(), Some("storage layer not initialized"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
assert_unimplemented_status(
|
assert_unimplemented_status(
|
||||||
service
|
service
|
||||||
.get_metacache_listing(Request::new(GetMetacacheListingRequest::default()))
|
.get_metacache_listing(Request::new(GetMetacacheListingRequest::default()))
|
||||||
|
|||||||
Reference in New Issue
Block a user