realtimeRetryDelay method
Calculates the next realtime retry delay.
Implementation
@protected
Duration realtimeRetryDelay(int attemptNumber) {
final config = SynquillStorage.config ?? const SynquillStorageConfig();
final baseDelayMs = (config.initialRetryDelay.inMilliseconds *
math.pow(config.backoffMultiplier, attemptNumber - 1))
.round();
final cappedMs = math.min(baseDelayMs, config.maxRetryDelay.inMilliseconds);
final flooredMs = math.max(cappedMs, config.minRetryDelay.inMilliseconds);
if (config.jitterPercent <= 0) {
return Duration(milliseconds: flooredMs);
}
final jitterRange = flooredMs * config.jitterPercent;
final jitterOffset =
((_realtimeJitterRandom.nextDouble() * 2) - 1) * jitterRange;
final jitteredMs = (flooredMs + jitterOffset).round();
final finalMs = math.max(jitteredMs, config.minRetryDelay.inMilliseconds);
return Duration(milliseconds: finalMs);
}