fix: make Timeline::set_disk_consistent_lsn use fetch_max (#8311)

now it is safe to use from multiple callers, as we have two callers.
This commit is contained in:
Joonas Koivunen
2024-08-06 10:52:01 +03:00
committed by GitHub
parent 8f3bc5ae35
commit 6a6f30e378

View File

@@ -4123,17 +4123,11 @@ impl Timeline {
/// Return true if the value changed
///
/// This function must only be used from the layer flush task, and may not be called concurrently.
/// This function must only be used from the layer flush task.
fn set_disk_consistent_lsn(&self, new_value: Lsn) -> bool {
// We do a simple load/store cycle: that's why this function isn't safe for concurrent use.
let old_value = self.disk_consistent_lsn.load();
if new_value != old_value {
assert!(new_value >= old_value);
self.disk_consistent_lsn.store(new_value);
true
} else {
false
}
let old_value = self.disk_consistent_lsn.fetch_max(new_value);
assert!(new_value >= old_value, "disk_consistent_lsn must be growing monotonously at runtime; current {old_value}, offered {new_value}");
new_value != old_value
}
/// Update metadata file