mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-08 22:33:22 +00:00
fix(replication): harden site-repl versioning sync (#3739)
This commit is contained in:
@@ -16,6 +16,7 @@ use crate::common::{
|
||||
RustFSTestEnvironment, awscurl_available, awscurl_post_sts_form_urlencoded, init_logging, local_http_client,
|
||||
};
|
||||
use aws_sdk_s3::config::{Credentials, Region};
|
||||
use aws_sdk_s3::error::ProvideErrorMetadata;
|
||||
use aws_sdk_s3::primitives::ByteStream;
|
||||
use aws_sdk_s3::types::{BucketVersioningStatus, VersioningConfiguration};
|
||||
use aws_sdk_s3::{Client, Config};
|
||||
@@ -701,7 +702,7 @@ async fn wait_for_object_on_target(
|
||||
return Ok(body);
|
||||
}
|
||||
Err(err) => {
|
||||
if err.to_string().contains("NoSuchKey") || err.to_string().contains("NotFound") {
|
||||
if matches!(err.code(), Some("NoSuchKey" | "NotFound" | "NoSuchVersion")) {
|
||||
sleep(Duration::from_millis(250)).await;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1343,7 +1343,30 @@ impl TargetClient {
|
||||
.await
|
||||
{
|
||||
Ok(_) => Ok(()),
|
||||
Err(e) => Err(e.into()),
|
||||
Err(e) => match e {
|
||||
SdkError::ServiceError(service_err) => {
|
||||
let err = service_err.into_err();
|
||||
let meta = err.meta();
|
||||
let error = match (meta.code(), meta.message()) {
|
||||
(Some(code), Some(message)) => format!("put_object failed: {code}: {message}"),
|
||||
(Some(code), None) => format!("put_object failed: {code}"),
|
||||
(None, Some(message)) => format!("put_object failed: {message}"),
|
||||
(None, None) => format!("put_object failed: {err:?}"),
|
||||
};
|
||||
Err(S3ClientError::with_metadata(
|
||||
error,
|
||||
None,
|
||||
meta.code().map(ToOwned::to_owned),
|
||||
meta.message().map(ToOwned::to_owned),
|
||||
))
|
||||
}
|
||||
SdkError::DispatchFailure(dispatch_err) => Err(S3ClientError::new(format!(
|
||||
"put_object dispatch failure for bucket:{bucket} object:{object}: {dispatch_err:?}"
|
||||
))),
|
||||
other => Err(S3ClientError::new(format!(
|
||||
"put_object request failed for bucket:{bucket} object:{object}: {other:?}"
|
||||
))),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user