Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Side by Side Diff: chrome/browser/sync/engine/sync_scheduler.cc

Issue 9372051: Don't retry failed attempts to poll sync server (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync/engine/sync_scheduler.h" 5 #include "chrome/browser/sync/engine/sync_scheduler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 // "one-off" job (i.e. purpose == 892 // "one-off" job (i.e. purpose ==
893 // SyncSessionJob::{CLEAR_USER_DATA,CLEANUP_DISABLED_TYPES}), if 893 // SyncSessionJob::{CLEAR_USER_DATA,CLEANUP_DISABLED_TYPES}), if
894 // there was work to do before it ran this wont have changed, as 894 // there was work to do before it ran this wont have changed, as
895 // jobs like this don't run a full sync cycle. So we don't need 895 // jobs like this don't run a full sync cycle. So we don't need
896 // special code here. 896 // special code here.
897 wait_interval_.reset(); 897 wait_interval_.reset();
898 SDVLOG(2) << "Job succeeded so not scheduling more jobs"; 898 SDVLOG(2) << "Job succeeded so not scheduling more jobs";
899 return; 899 return;
900 } 900 }
901 901
902 if (old_job.purpose == SyncSessionJob::POLL) {
903 return; // We don't retry POLL jobs.
904 }
905
902 // TODO(rlarocque): There's no reason why we should blindly backoff and retry 906 // TODO(rlarocque): There's no reason why we should blindly backoff and retry
903 // if we don't succeed. Some types of errors are not likely to disappear on 907 // if we don't succeed. Some types of errors are not likely to disappear on
904 // their own. With the return values now available in the old_job.session, we 908 // their own. With the return values now available in the old_job.session, we
905 // should be able to detect such errors and only retry when we detect 909 // should be able to detect such errors and only retry when we detect
906 // transient errors. 910 // transient errors.
907 911
908 // We are in backoff mode and our time did not run out. That means we had
909 // a local change, notification from server or a network connection change
910 // notification. In any case set had_nudge = true so we dont retry next
911 // nudge. Note: we will keep retrying network connection changes though as
912 // they are treated as canary jobs. Also we check the mode here because
913 // we want to do this only in normal mode. For config mode jobs we dont
914 // have anything similar to had_nudge.
915 if (IsBackingOff() && wait_interval_->timer.IsRunning() && 912 if (IsBackingOff() && wait_interval_->timer.IsRunning() &&
916 mode_ == NORMAL_MODE) { 913 mode_ == NORMAL_MODE) {
914 // When in normal mode, we allow up to one nudge per backoff interval. It
915 // appears that this was our nudge for this interval, and it failed.
916 //
917 // Note: This does not prevent us from running canary jobs. For example, an
918 // IP address change might still result in another nudge being executed
919 // during this backoff interval.
917 SDVLOG(2) << "A nudge during backoff failed"; 920 SDVLOG(2) << "A nudge during backoff failed";
918 // We weren't continuing but we're in backoff; must have been a nudge. 921
919 DCHECK_EQ(SyncSessionJob::NUDGE, old_job.purpose); 922 DCHECK_EQ(SyncSessionJob::NUDGE, old_job.purpose);
920 DCHECK(!wait_interval_->had_nudge); 923 DCHECK(!wait_interval_->had_nudge);
924
921 wait_interval_->had_nudge = true; 925 wait_interval_->had_nudge = true;
922 // Old job did not finish. So make it the pending job.
923 InitOrCoalescePendingJob(old_job); 926 InitOrCoalescePendingJob(old_job);
924 // Resume waiting.
925 RestartWaiting(); 927 RestartWaiting();
926 } else { 928 } else {
929 // Either this is the first failure or a consecutive failure after our
930 // backoff timer expired. We handle it the same way in either case.
927 SDVLOG(2) << "Non-'backoff nudge' SyncShare job failed"; 931 SDVLOG(2) << "Non-'backoff nudge' SyncShare job failed";
928 // We don't seem to have made forward progress. Start or extend backoff.
929 HandleContinuationError(old_job); 932 HandleContinuationError(old_job);
930 } 933 }
931 } 934 }
932 935
933 void SyncScheduler::AdjustPolling(const SyncSessionJob* old_job) { 936 void SyncScheduler::AdjustPolling(const SyncSessionJob* old_job) {
934 DCHECK_EQ(MessageLoop::current(), sync_loop_); 937 DCHECK_EQ(MessageLoop::current(), sync_loop_);
935 938
936 TimeDelta poll = (!session_context_->notifications_enabled()) ? 939 TimeDelta poll = (!session_context_->notifications_enabled()) ?
937 syncer_short_poll_interval_seconds_ : 940 syncer_short_poll_interval_seconds_ :
938 syncer_long_poll_interval_seconds_; 941 syncer_long_poll_interval_seconds_;
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 1207
1205 #undef SDVLOG_LOC 1208 #undef SDVLOG_LOC
1206 1209
1207 #undef SDVLOG 1210 #undef SDVLOG
1208 1211
1209 #undef SLOG 1212 #undef SLOG
1210 1213
1211 #undef ENUM_CASE 1214 #undef ENUM_CASE
1212 1215
1213 } // browser_sync 1216 } // browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/engine/sync_scheduler.h ('k') | chrome/browser/sync/engine/sync_scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698