fix(scanner): clarify follower status

This commit is contained in:
Henry Guo
2026-08-24 16:12:29 +08:00
committed by GitHub
parent 41546dee5d
commit f06b004f2d
3 changed files with 102 additions and 16 deletions
+37
View File
@@ -4626,14 +4626,24 @@ fn scanner_cycle_schedule_status_reports_effective_backoff() {
let status = scanner_cycle_schedule_status();
assert_eq!(status.execution_role, "leader");
assert!(status.effective_interval_available);
assert_eq!(status.effective_interval_seconds, 86_401);
assert!(status.clean_idle_backoff_enabled);
assert_eq!(status.clean_idle_backoff_multiplier, 2_048);
assert!(status.superseded_retry_backoff_enabled);
assert_eq!(status.superseded_cycles, 7);
record_scanner_cycle_schedule_role("follower");
let status = scanner_cycle_schedule_status();
assert_eq!(status.execution_role, "follower");
assert!(!status.effective_interval_available);
assert_eq!(status.effective_interval_seconds, 0);
reset_scanner_cycle_schedule();
let status = scanner_cycle_schedule_status();
assert_eq!(status.execution_role, "unknown");
assert!(!status.effective_interval_available);
assert_eq!(status.effective_interval_seconds, 0);
assert!(!status.clean_idle_backoff_enabled);
assert_eq!(status.clean_idle_backoff_multiplier, 1);
@@ -4641,6 +4651,33 @@ fn scanner_cycle_schedule_status_reports_effective_backoff() {
assert_eq!(status.superseded_cycles, 0);
}
#[test]
fn scanner_leader_lock_failure_classifies_only_timeout_as_expected_contention() {
let timeout = LockError::timeout(".rustfs.sys/leader.lock@latest", Duration::from_secs(5));
assert!(matches!(
classify_scanner_leader_lock_failure(&timeout),
ScannerLeaderLockFailure::Contended
));
let failures = [
LockError::internal("lock service unavailable"),
LockError::network(
"leader lock transport unavailable",
std::io::Error::new(std::io::ErrorKind::ConnectionRefused, "connection refused"),
),
LockError::QuorumNotReached {
required: 3,
achieved: 1,
},
];
for failure in &failures {
assert!(matches!(
classify_scanner_leader_lock_failure(failure),
ScannerLeaderLockFailure::Failed(_)
));
}
}
#[test]
fn clean_idle_backoff_resets_for_non_idle_work() {
let base_interval = Duration::from_secs(60);