mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-25 21:46:50 +00:00
fix(scanner): reject terminal leadership epochs
This commit is contained in:
@@ -196,7 +196,7 @@ pub(super) async fn claim_scanner_leadership(
|
|||||||
if ctx.is_cancelled() {
|
if ctx.is_cancelled() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
let Some(claimed_epoch) = persisted_epoch.checked_add(1) else {
|
let Some(claimed_epoch) = persisted_epoch.checked_add(1).filter(|epoch| *epoch < u64::MAX) else {
|
||||||
error!(
|
error!(
|
||||||
target: "rustfs::scanner",
|
target: "rustfs::scanner",
|
||||||
event = EVENT_SCANNER_PERSIST_STATE,
|
event = EVENT_SCANNER_PERSIST_STATE,
|
||||||
|
|||||||
@@ -1410,6 +1410,22 @@ async fn test_leadership_claim_preserves_usage_epoch_floor_across_old_epoch_conf
|
|||||||
assert_eq!(store.put_counts.lock().await.get(&key), Some(&3));
|
assert_eq!(store.put_counts.lock().await.get(&key), Some(&3));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_leadership_claim_rejects_terminal_epoch() {
|
||||||
|
let store = Arc::new(MemoryConfigStore::default());
|
||||||
|
let ctx = CancellationToken::new();
|
||||||
|
let mut revision = DataUsageCacheRevision::Missing;
|
||||||
|
let mut cycle = CurrentCycle {
|
||||||
|
next: 12,
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
let mut persisted_epoch = u64::MAX - 1;
|
||||||
|
|
||||||
|
assert!(!claim_scanner_leadership(&ctx, store.clone(), &mut cycle, &mut revision, &mut persisted_epoch).await);
|
||||||
|
assert_eq!(persisted_epoch, u64::MAX - 1);
|
||||||
|
assert!(read_config(store, &DATA_USAGE_BLOOM_NAME_PATH).await.is_err());
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_leadership_claim_confirms_commit_after_returned_error() {
|
async fn test_leadership_claim_confirms_commit_after_returned_error() {
|
||||||
let store = Arc::new(MemoryConfigStore::default());
|
let store = Arc::new(MemoryConfigStore::default());
|
||||||
|
|||||||
Reference in New Issue
Block a user