fix(replication): harden site-repl versioning sync (#3739)

This commit is contained in:
houseme
2026-06-22 19:18:42 +08:00
committed by GitHub
parent e57962d5e8
commit 64aef06c60
4 changed files with 108 additions and 3 deletions
@@ -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;
}
+24 -1
View File
@@ -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:?}"
))),
},
}
}