fix(replication): surface skipped multipart LWW comparison at warn level

When the complete-multipart LWW gate cannot read the destination
version (quorum error), the inbound metadata is applied without
comparison — the exact overwrite rustfs/backlog#1953 exists to prevent.
Keep the fail-open semantics (failing the complete would loop through
MRF) but log the degraded path at warn so operators can see it; the
version-absent first replication keeps riding the same branch.
This commit is contained in:
唐小鸭
2026-08-21 19:33:59 +08:00
parent 81ef2882df
commit 66e63d20dd
+5 -2
View File
@@ -2254,7 +2254,10 @@ impl crate::storage_api_contracts::multipart::MultipartOperations for SetDisks {
crate::set_disk::ops::object::merge_replication_metadata_lww(&mut fi.metadata, &stored, opts);
}
Err(err) => {
debug!(
// Degraded path: without the stored state the inbound
// metadata is applied unchanged — exactly the overwrite
// LWW exists to prevent — so this must be operator-visible.
warn!(
component = LOG_COMPONENT_ECSTORE,
subsystem = LOG_SUBSYSTEM_SET_DISK,
bucket,
@@ -2262,7 +2265,7 @@ impl crate::storage_api_contracts::multipart::MultipartOperations for SetDisks {
version_id = %version_id,
error = %err,
state = "replication_lww_read_unavailable",
"SetDisk multipart replication LWW read skipped"
"SetDisk multipart replication LWW read skipped; inbound metadata applied without comparison"
);
}
}