mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-23 12:49:04 +00:00
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:
@@ -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"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user