mirror of
https://github.com/rustfs/rustfs.git
synced 2026-09-02 02:08:41 +00:00
fix(scanner): clarify follower status
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user