Chromium Code Reviews| Index: chrome/browser/sync/engine/sync_scheduler.cc |
| diff --git a/chrome/browser/sync/engine/sync_scheduler.cc b/chrome/browser/sync/engine/sync_scheduler.cc |
| index d7d68abd73e6c7a41f0efdd76c473e8f44d69de3..320c6a04c150efaa039b662b7b91449ac8d34d81 100644 |
| --- a/chrome/browser/sync/engine/sync_scheduler.cc |
| +++ b/chrome/browser/sync/engine/sync_scheduler.cc |
| @@ -813,74 +813,42 @@ void SyncScheduler::FinishSyncSessionJob(const SyncSessionJob& job) { |
| void SyncScheduler::ScheduleNextSync(const SyncSessionJob& old_job) { |
| DCHECK_EQ(MessageLoop::current(), sync_loop_); |
| DCHECK(!old_job.session->HasMoreToSync()); |
| - // Note: |num_server_changes_remaining| > 0 here implies that we received a |
| - // broken response while trying to download all updates, because the Syncer |
| - // will loop until this value is exhausted. Also, if unsynced_handles exist |
| - // but HasMoreToSync is false, this implies that the Syncer determined no |
| - // forward progress was possible at this time (an error, such as an HTTP |
| - // 500, is likely to have occurred during commit). |
| - int num_server_changes_remaining = |
| - old_job.session->status_controller()->num_server_changes_remaining(); |
| - size_t num_unsynced_handles = |
| - old_job.session->status_controller()->unsynced_handles().size(); |
| - const bool work_to_do = |
| - num_server_changes_remaining > 0 || num_unsynced_handles > 0; |
| - SVLOG(2) << "num server changes remaining: " << num_server_changes_remaining |
| - << ", num unsynced handles: " << num_unsynced_handles |
| - << ", syncer has work to do: " << work_to_do; |
| AdjustPolling(&old_job); |
| // TODO(tim): Old impl had special code if notifications disabled. Needed? |
| - if (!work_to_do) { |
| - // Success implies backoff relief. Note that if this was a |
| - // "one-off" job (i.e. purpose == |
| - // SyncSessionJob::{CLEAR_USER_DATA,CLEANUP_DISABLED_TYPES}), if |
| - // there was work_to_do before it ran this wont have changed, as |
| - // jobs like this don't run a full sync cycle. So we don't need |
| - // special code here. |
| + if (old_job.session->FailedToMakeProgress()) { |
| + if (IsBackingOff() && wait_interval_->timer.IsRunning() && |
| + mode_ == NORMAL_MODE) { |
| + // We are in backoff mode and our time did not run out. That means we |
| + // had a local change, notification from server or a network connection |
| + // change notification. In any case set had_nudge = true so we dont |
| + // retry next nudge. |
| + // Note: we will keep retrying network connection changes though as |
| + // they are treated as canary jobs. Also we check the mode here because |
| + // we want to do this only in normal mode. For config mode jobs we dont |
| + // have anything similar to had_nudge. |
| + SVLOG(2) << "A nudge during backoff failed"; |
| + // We weren't continuing but we're in backoff; must have been a nudge. |
| + DCHECK_EQ(SyncSessionJob::NUDGE, old_job.purpose); |
| + DCHECK(!wait_interval_->had_nudge); |
| + wait_interval_->had_nudge = true; |
| + // Old job did not finish. So make it the pending job. |
| + InitOrCoalescePendingJob(old_job); |
| + // Resume waiting. |
| + RestartWaiting(); |
| + } else { |
|
lipalani1
2011/09/22 20:22:46
Can you add the vlog stmt back here?
|
| + // We seem to have not made forward progress. Start or extend backoff. |
| + HandleConsecutiveContinuationError(old_job); |
| + } |
| + } else { |
| + // Success implies backoff relief. Note that if this was a "one-off" job |
| + // (i.e. purpose == |
| + // SyncSessionJob::{CLEAR_USER_DATA,CLEANUP_DISABLED_TYPES}), if there was |
| + // work to do before it ran this wont have changed, as jobs like this don't |
| + // run a full sync cycle. So we don't need special code here. |
| wait_interval_.reset(); |
| SVLOG(2) << "Job succeeded so not scheduling more jobs"; |
| - return; |
| - } |
| - |
| - // We are in backoff mode and our time did not run out. That means we had |
| - // a local change, notification from server or a network connection change |
| - // notification. In any case set had_nudge = true so we dont retry next |
| - // nudge. Note: we will keep retrying network connection changes though as |
| - // they are treated as canary jobs. Also we check the mode here because |
| - // we want to do this only in normal mode. For config mode jobs we dont |
| - // have anything similar to had_nudge. |
| - if (IsBackingOff() && wait_interval_->timer.IsRunning() && |
| - mode_ == NORMAL_MODE) { |
| - SVLOG(2) << "A nudge during backoff failed"; |
| - // We weren't continuing but we're in backoff; must have been a nudge. |
| - DCHECK_EQ(SyncSessionJob::NUDGE, old_job.purpose); |
| - DCHECK(!wait_interval_->had_nudge); |
| - wait_interval_->had_nudge = true; |
| - // Old job did not finish. So make it the pending job. |
| - InitOrCoalescePendingJob(old_job); |
| - // Resume waiting. |
| - RestartWaiting(); |
| - } else if (old_job.session->source().updates_source == |
| - GetUpdatesCallerInfo::SYNC_CYCLE_CONTINUATION) { |
| - SVLOG(2) << "Job failed with source continuation"; |
| - // We don't seem to have made forward progress. Start or extend backoff. |
| - HandleConsecutiveContinuationError(old_job); |
| - } else { |
| - SVLOG(2) << "Failed. Schedule a job with continuation as source"; |
| - // We weren't continuing and we aren't in backoff. Schedule a normal |
| - // continuation. |
| - if (old_job.purpose == SyncSessionJob::CONFIGURATION) { |
| - ScheduleConfigImpl(old_job.session->routing_info(), |
| - old_job.session->workers(), |
| - GetUpdatesFromNudgeSource(NUDGE_SOURCE_CONTINUATION)); |
| - } else { |
| - // For all other purposes(nudge and poll) we schedule a retry nudge. |
| - ScheduleNudgeImpl(TimeDelta::FromSeconds(0), |
| - GetUpdatesFromNudgeSource(NUDGE_SOURCE_CONTINUATION), |
| - old_job.session->source().types, false, FROM_HERE); |
| - } |
| } |
| } |