test(transport): 修正退避单调断言——jitter 向下取,封顶后允许回退
Design System Guard / guard (push) Failing after 21m51s
Design System Guard / guard (push) Failing after 21m51s
原断言要求退避序列全程单调不减,与实现冲突:rust-core/src/transport.rs 的抖动是向下取(delay = capped - offset,offset 最大 30%×cap),封顶后 capped 恒为 60s、样本落在 [cap-span, cap],后一个样本可能小于前一个(实测出现 57414 → 57413)。Rust 侧已有 capped_backoff_dips_within_jitter_band 断言同一语义。改为分档断言:未进入抖动带时要求递增(档位翻倍、抖动最多削 30%,必然成立);已进入 [42000, 60000] 时只要求不跌破下界。修正后 host_ffi_test 连续 20 次 20/20 通过(修正前 20 次全红,验证了断言的边界写法)。
This commit is contained in:
1 parent
24746795bf
commit
4194c6ee03
1 file changed
+18
-1
@@ -150,8 +150,25 @@ void main() {
|
||||
for (final d in delays) {
|
||||
expect(d > 0 && d <= 60000, isTrue, reason: '退避必须封顶: $d');
|
||||
}
|
||||
// 抖动是**向下取**(delay = capped - offset,offset 最大 30% × cap),见
|
||||
// rust-core/src/transport.rs 的 backoff_grows_and_is_capped_across_repeated_failures
|
||||
// 与 capped_backoff_dips_within_jitter_band:封顶后 capped 恒为 60s,样本落在
|
||||
// [cap-span, cap],**后一个样本可能小于前一个**(实测出现过 57414 → 57413)。
|
||||
// 故此处不能断言全程单调不减:
|
||||
// · 未进入抖动带之前,相邻档位翻倍、抖动最多削掉 30%,必然递增;
|
||||
// · 一旦落入 [cap-span, cap],只保证不跌破抖动带下界。
|
||||
const cap = 60000;
|
||||
const span = 18000; // cap × jitter_ratio(0.3),与 Rust 侧 policy 同源
|
||||
for (var i = 1; i < delays.length; i++) {
|
||||
expect(delays[i] >= delays[i - 1], isTrue, reason: '退避单调不减: $delays');
|
||||
if (delays[i - 1] < cap - span) {
|
||||
// 未进入抖动带:档位翻倍、抖动最多削掉 30%,必然递增
|
||||
expect(delays[i] >= delays[i - 1],
|
||||
isTrue, reason: '未封顶时必须递增: $delays');
|
||||
} else {
|
||||
// 已封顶:capped 恒 60s,只保证不跌破抖动带下界(可回退)
|
||||
expect(delays[i] >= cap - span,
|
||||
isTrue, reason: '封顶后不得跌破抖动带下界: $delays');
|
||||
}
|
||||
}
|
||||
// 连上即归零
|
||||
t.onConnected(now);
|
||||
|
||||
Reference in new issue
Block a user