mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-22 12:26:37 +00:00
fix(ecstore): avoid terminal receipt shadowing
This commit is contained in:
@@ -958,20 +958,24 @@ fn merge_decommission_durable_ilm_receipts(
|
|||||||
incoming.checkpoint.clone()
|
incoming.checkpoint.clone()
|
||||||
};
|
};
|
||||||
let terminal_checkpoint = match (&existing.terminal_checkpoint, &incoming.terminal_checkpoint) {
|
let terminal_checkpoint = match (&existing.terminal_checkpoint, &incoming.terminal_checkpoint) {
|
||||||
(Some(existing), Some(incoming)) if existing == incoming => Some(existing.clone()),
|
(Some(existing_terminal), Some(incoming_terminal)) if existing_terminal == incoming_terminal => {
|
||||||
(Some(existing), Some(incoming)) if incoming.validate_successor(existing).is_ok() => Some(existing.clone()),
|
Some(existing_terminal.clone())
|
||||||
(Some(existing), Some(incoming)) => {
|
}
|
||||||
existing.validate_successor(incoming).map_err(|err| {
|
(Some(existing_terminal), Some(incoming_terminal)) if incoming_terminal.validate_successor(existing_terminal).is_ok() => {
|
||||||
|
Some(existing_terminal.clone())
|
||||||
|
}
|
||||||
|
(Some(existing_terminal), Some(incoming_terminal)) => {
|
||||||
|
existing_terminal.validate_successor(incoming_terminal).map_err(|err| {
|
||||||
Error::other(format!(
|
Error::other(format!(
|
||||||
"durable ILM receipt terminal checkpoint conflict for source path `{}` {}: {err}",
|
"durable ILM receipt terminal checkpoint conflict for source path `{}` {}: {err}",
|
||||||
existing.source_path,
|
existing.source_path,
|
||||||
existing.context()
|
existing.context()
|
||||||
))
|
))
|
||||||
})?;
|
})?;
|
||||||
Some(incoming.clone())
|
Some(incoming_terminal.clone())
|
||||||
}
|
}
|
||||||
(Some(existing), None) => Some(existing.clone()),
|
(Some(existing_terminal), None) => Some(existing_terminal.clone()),
|
||||||
(None, Some(incoming)) => Some(incoming.clone()),
|
(None, Some(incoming_terminal)) => Some(incoming_terminal.clone()),
|
||||||
(None, None) => None,
|
(None, None) => None,
|
||||||
};
|
};
|
||||||
let merged = DecommissionDurableIlmReceipt {
|
let merged = DecommissionDurableIlmReceipt {
|
||||||
|
|||||||
Reference in New Issue
Block a user