syncNow method

Future<void> syncNow(
  1. String reason
)

One full pass: collect dirty files, batch them, upload, CAS-mark.

Implementation

Future<void> syncNow(String reason) async {
  if (_disposed) return;
  if (!_isEnabled()) return;
  if (_running) {
    _rerun = true;
    return;
  }
  _running = true;
  var shouldRerun = false;
  try {
    final outcome = await _runPass(reason);
    if (outcome == _PassOutcome.success) {
      successes++;
      _backoff = baseBackoff;
      if (_rerun) {
        _rerun = false;
        shouldRerun = true;
      }
    } else if (outcome == _PassOutcome.transientFailure) {
      failures++;
      _scheduleRetry();
    } else if (outcome == _PassOutcome.permanentFailure) {
      permanentFailures++;
    }
  } catch (e) {
    failures++;
    debugPrint('[EmbedCache] sync pass threw ($reason): $e');
    _scheduleRetry();
  } finally {
    _running = false;
  }
  if (shouldRerun && !_disposed) unawaited(syncNow('rerun'));
}