Found by the #318 closing soak — filed separately for the same reason #318 was split from #310: it is a different failure in the same scenario, and conflating them would let one fix be credited with the other's disappearance.
What is seen
One run in thirty, under deliberately extreme I/O load (a continuous cargo build/cargo clean loop churning the same disk as the suite):
range leader killed (SIGKILL) mid-flight; acknowledged floor: 500 of 3000
follower offsets: f1=600 f2=500; promoting follower 1
follower 1 took the range at epoch 2
follower 2 restarted at epoch 2 to rejoin replication
FAIL: post-failover produce never reached quorum within 30s: error: produce rejected: Overloaded quorum not reached: 0 follower ack(s), need majority of 2
Why it is NOT #318
#318's signature is a promotion that never acquires the range (holder: none for the full wait). Here the promotion succeeded — the range was held at epoch 2 and the rejoining follower restarted cleanly. What failed is the post-failover produce reaching quorum: the promoted leader reported Overloaded with zero follower acks for 30 seconds.
What is not yet known
Whether this is the 30s bound being too tight for a follower whose disk is saturated by an adversarial background load (the broker's backpressure doing exactly its job, slowly), or a rejoining follower that stalls in a way fresh traffic cannot unstick. The idle half of the same soak was 30/30, and the load half was 29/30, so load is clearly a precondition. Worth establishing first: does the follower ack shortly AFTER the deadline (bound too tight), or never (rejoin stall)?
Soak log preserved from the failing run; the Overloaded error code is the broker's own admission-control refusal, which may simply be honest under a load no deployment should run at.
Refs #318.
Found by the #318 closing soak — filed separately for the same reason #318 was split from #310: it is a different failure in the same scenario, and conflating them would let one fix be credited with the other's disappearance.
What is seen
One run in thirty, under deliberately extreme I/O load (a continuous
cargo build/cargo cleanloop churning the same disk as the suite):Why it is NOT #318
#318's signature is a promotion that never acquires the range (
holder: nonefor the full wait). Here the promotion succeeded — the range was held at epoch 2 and the rejoining follower restarted cleanly. What failed is the post-failover produce reaching quorum: the promoted leader reportedOverloadedwith zero follower acks for 30 seconds.What is not yet known
Whether this is the 30s bound being too tight for a follower whose disk is saturated by an adversarial background load (the broker's backpressure doing exactly its job, slowly), or a rejoining follower that stalls in a way fresh traffic cannot unstick. The idle half of the same soak was 30/30, and the load half was 29/30, so load is clearly a precondition. Worth establishing first: does the follower ack shortly AFTER the deadline (bound too tight), or never (rejoin stall)?
Soak log preserved from the failing run; the
Overloadederror code is the broker's own admission-control refusal, which may simply be honest under a load no deployment should run at.Refs #318.