fix(replication): fence force-delete journal updates (#5661)

* feat(replication): add conditional config store APIs

* fix(replication): fence force-delete journal updates

* fix(replication): retry durable force-delete commits

* test(replication): fence lost force-delete journal leases

* fix(replication): bound force-delete journal retries
This commit is contained in:
cxymds
2026-08-03 22:00:49 +08:00
committed by GitHub
parent 975003d60a
commit accc906b33
5 changed files with 462 additions and 62 deletions
+41 -2
View File
@@ -586,10 +586,47 @@ where
PutObjectReader = PutObjReader,
>,
{
save_config_with_opts_and_metadata(api, file, data, opts).await.map(|_| ())
save_config_with_opts_inner(api, file, data, opts, true).await.map(|_| ())
}
/// Saves a configuration object without logging an error for a retryable caller-owned failure.
pub async fn save_config_with_opts_quiet<S>(api: Arc<S>, file: &str, data: Vec<u8>, opts: &ObjectOptions) -> Result<()>
where
S: ObjectIO<
Error = Error,
RangeSpec = HTTPRangeSpec,
HeaderMap = HeaderMap,
ObjectOptions = ObjectOptions,
ObjectInfo = ObjectInfo,
GetObjectReader = GetObjectReader,
PutObjectReader = PutObjReader,
>,
{
save_config_with_opts_inner(api, file, data, opts, false).await.map(|_| ())
}
async fn save_config_with_opts_and_metadata<S>(api: Arc<S>, file: &str, data: Vec<u8>, opts: &ObjectOptions) -> Result<ObjectInfo>
where
S: ObjectIO<
Error = Error,
RangeSpec = HTTPRangeSpec,
HeaderMap = HeaderMap,
ObjectOptions = ObjectOptions,
ObjectInfo = ObjectInfo,
GetObjectReader = GetObjectReader,
PutObjectReader = PutObjReader,
>,
{
save_config_with_opts_inner(api, file, data, opts, true).await
}
async fn save_config_with_opts_inner<S>(
api: Arc<S>,
file: &str,
data: Vec<u8>,
opts: &ObjectOptions,
log_error: bool,
) -> Result<ObjectInfo>
where
S: ObjectIO<
Error = Error,
@@ -605,7 +642,9 @@ where
match api.put_object(RUSTFS_META_BUCKET, file, &mut put_data, opts).await {
Ok(object_info) => Ok(object_info),
Err(err) => {
error!("save_config_with_opts: err: {:?}, file: {}", err, file);
if log_error {
error!("save_config_with_opts: err: {:?}, file: {}", err, file);
}
Err(err)
}
}