anchor.diff:  
     Future checkIdle(JobService service, ShouldProcess shouldProcess) async {
       Future _schedule(Job job) async {
  -      return _db.withTransaction((tx) async {
  +      await _retryWithTransaction((tx) async {
           final list = await tx.lookup([job.key]);
           final current = list.single as Job;
           if (current.state == JobState.idle &&
  
positive.code:         .add(Duration(hours: math.min(errorCount, 168 /* one week */)));
    }
  
    void scheduleOldDataGC() {
      // Run GC in the next 6 hours (randomized wait to reduce race).
      Timer(Duration(minutes: _random.nextInt(360)), () async {
  
negative.code:   }
  
    Future complete(Job job, JobStatus status, {Duration extendDuration}) async {
      await _retryWithTransaction((tx) async {
        final items = await tx.lookup([_db.emptyKey.append(Job, id: job.id)]);
        final selected = items.single as Job;
        if (selected != null && selected.processingKey == job.processingKey) {
  