mirror of
https://github.com/rustfs/rustfs.git
synced 2026-09-07 20:46:11 +00:00
fix(admin): follow recovery facade and error boundaries (#7259)
This commit is contained in:
@@ -82,12 +82,17 @@ fn parse_remote_target_write_modes(uri: &http::Uri) -> S3Result<(bool, bool)> {
|
|||||||
_ => continue,
|
_ => continue,
|
||||||
};
|
};
|
||||||
if mode.is_some() {
|
if mode.is_some() {
|
||||||
return Err(s3_error!(InvalidRequest, "duplicate remote target write mode"));
|
return Err(S3Error::with_message(S3ErrorCode::InvalidRequest, "duplicate remote target write mode"));
|
||||||
}
|
}
|
||||||
*mode = Some(match value.as_ref() {
|
*mode = Some(match value.as_ref() {
|
||||||
"true" => true,
|
"true" => true,
|
||||||
"false" => false,
|
"false" => false,
|
||||||
_ => return Err(s3_error!(InvalidRequest, "remote target write modes must be true or false")),
|
_ => {
|
||||||
|
return Err(S3Error::with_message(
|
||||||
|
S3ErrorCode::InvalidRequest,
|
||||||
|
"remote target write modes must be true or false",
|
||||||
|
));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
let update = update.unwrap_or(false);
|
let update = update.unwrap_or(false);
|
||||||
@@ -3045,7 +3050,7 @@ mod target_repair_tests {
|
|||||||
.await
|
.await
|
||||||
.expect("read source metadata")
|
.expect("read source metadata")
|
||||||
.save_file_path();
|
.save_file_path();
|
||||||
let before = crate::admin::storage_api::read_admin_config(Arc::clone(&env.ecstore), &file)
|
let before = crate::admin::storage_api::config::read_admin_config(Arc::clone(&env.ecstore), &file)
|
||||||
.await
|
.await
|
||||||
.expect("read original bytes");
|
.expect("read original bytes");
|
||||||
for query in [
|
for query in [
|
||||||
@@ -3063,7 +3068,7 @@ mod target_repair_tests {
|
|||||||
repair(&target, query).await.expect_err("invalid repair must fail").code(),
|
repair(&target, query).await.expect_err("invalid repair must fail").code(),
|
||||||
&S3ErrorCode::InvalidRequest
|
&S3ErrorCode::InvalidRequest
|
||||||
);
|
);
|
||||||
let after = crate::admin::storage_api::read_admin_config(Arc::clone(&env.ecstore), &file)
|
let after = crate::admin::storage_api::config::read_admin_config(Arc::clone(&env.ecstore), &file)
|
||||||
.await
|
.await
|
||||||
.expect("read unchanged bytes");
|
.expect("read unchanged bytes");
|
||||||
assert_eq!(after, before, "rejected opt-in must not rewrite metadata");
|
assert_eq!(after, before, "rejected opt-in must not rewrite metadata");
|
||||||
@@ -3151,7 +3156,7 @@ mod target_repair_tests {
|
|||||||
.expect("load recreated bucket");
|
.expect("load recreated bucket");
|
||||||
assert_ne!(recreated.bucket_incarnation_id, incarnation);
|
assert_ne!(recreated.bucket_incarnation_id, incarnation);
|
||||||
let file = recreated.save_file_path();
|
let file = recreated.save_file_path();
|
||||||
let before = crate::admin::storage_api::read_admin_config(Arc::clone(&env.ecstore), &file)
|
let before = crate::admin::storage_api::config::read_admin_config(Arc::clone(&env.ecstore), &file)
|
||||||
.await
|
.await
|
||||||
.expect("read recreated bucket bytes");
|
.expect("read recreated bucket bytes");
|
||||||
|
|
||||||
@@ -3160,7 +3165,7 @@ mod target_repair_tests {
|
|||||||
.expect_err("validation of a deleted bucket must not authorize repair of its replacement");
|
.expect_err("validation of a deleted bucket must not authorize repair of its replacement");
|
||||||
assert_eq!(error.code(), &S3ErrorCode::NoSuchBucket);
|
assert_eq!(error.code(), &S3ErrorCode::NoSuchBucket);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
crate::admin::storage_api::read_admin_config(Arc::clone(&env.ecstore), &file)
|
crate::admin::storage_api::config::read_admin_config(Arc::clone(&env.ecstore), &file)
|
||||||
.await
|
.await
|
||||||
.expect("read rejected incarnation repair bytes"),
|
.expect("read rejected incarnation repair bytes"),
|
||||||
before
|
before
|
||||||
@@ -3201,7 +3206,7 @@ mod target_repair_tests {
|
|||||||
assert_eq!(suspended.bucket_incarnation_id, incarnation);
|
assert_eq!(suspended.bucket_incarnation_id, incarnation);
|
||||||
assert!(!suspended.versioning_config.as_ref().expect("persisted versioning").enabled());
|
assert!(!suspended.versioning_config.as_ref().expect("persisted versioning").enabled());
|
||||||
let file = suspended.save_file_path();
|
let file = suspended.save_file_path();
|
||||||
let before = crate::admin::storage_api::read_admin_config(Arc::clone(&env.ecstore), &file)
|
let before = crate::admin::storage_api::config::read_admin_config(Arc::clone(&env.ecstore), &file)
|
||||||
.await
|
.await
|
||||||
.expect("read suspended bucket bytes");
|
.expect("read suspended bucket bytes");
|
||||||
|
|
||||||
@@ -3210,7 +3215,7 @@ mod target_repair_tests {
|
|||||||
.expect_err("a target validated before suspension must not be committed");
|
.expect_err("a target validated before suspension must not be committed");
|
||||||
assert_eq!(error.code(), &S3ErrorCode::InvalidRequest);
|
assert_eq!(error.code(), &S3ErrorCode::InvalidRequest);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
crate::admin::storage_api::read_admin_config(Arc::clone(&env.ecstore), &file)
|
crate::admin::storage_api::config::read_admin_config(Arc::clone(&env.ecstore), &file)
|
||||||
.await
|
.await
|
||||||
.expect("read rejected versioning repair bytes"),
|
.expect("read rejected versioning repair bytes"),
|
||||||
before
|
before
|
||||||
@@ -3259,7 +3264,7 @@ mod target_repair_tests {
|
|||||||
"a failed transaction must not claim success: {lines}"
|
"a failed transaction must not claim success: {lines}"
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
crate::admin::storage_api::read_admin_config(Arc::clone(&env.ecstore), &file)
|
crate::admin::storage_api::config::read_admin_config(Arc::clone(&env.ecstore), &file)
|
||||||
.await
|
.await
|
||||||
.expect("read failed repair bytes"),
|
.expect("read failed repair bytes"),
|
||||||
corrupt
|
corrupt
|
||||||
|
|||||||
Reference in New Issue
Block a user