formatRetryTraceLine function
String
formatRetryTraceLine({
- required RetryBudgetClass budget,
- required int attempt,
- required int cap,
- required RetryBackoffDecision decision,
The retry trace line format contract (issue #1398 AC4): every retry
names the budget it drew from, the attempt (n/cap, 1-based), and the
delay source with its value.
budget=connection attempt=2/4 delay=ladder:10sbudget=stream attempt=1/3 delay=server:12sbudget=stream attempt=2/3 delay=clamp:60s (server advertised 300s)- a malformed header appends
retry-after malformed ("soon")(E3).
Implementation
String formatRetryTraceLine({
required RetryBudgetClass budget,
required int attempt,
required int cap,
required RetryBackoffDecision decision,
}) {
final buffer = StringBuffer(
'budget=${budget.label} attempt=$attempt/$cap '
'delay=${decision.source.label}:${_traceDuration(decision.delay)}',
);
if (decision.source == RetryDelaySource.clamp) {
buffer.write(
' (server advertised ${_traceDuration(decision.advertised!)})',
);
}
if (decision.malformedHeader) {
buffer.write(' retry-after malformed ("${decision.rawHeader}")');
}
return buffer.toString();
}