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

Side by Side Diff: sync/engine/sync_scheduler_impl.h

Issue 10837231: sync: add InternalComponentsFactory::Switches to simplify passing switches to internal components. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: pass switches in test_profile_sync_service.cc Created 8 years, 4 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 #ifndef SYNC_ENGINE_SYNC_SCHEDULER_IMPL_H_ 5 #ifndef SYNC_ENGINE_SYNC_SCHEDULER_IMPL_H_
6 #define SYNC_ENGINE_SYNC_SCHEDULER_IMPL_H_ 6 #define SYNC_ENGINE_SYNC_SCHEDULER_IMPL_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 10 matching lines...) Expand all
21 #include "sync/engine/sync_scheduler.h" 21 #include "sync/engine/sync_scheduler.h"
22 #include "sync/engine/syncer.h" 22 #include "sync/engine/syncer.h"
23 #include "sync/internal_api/public/base/model_type_payload_map.h" 23 #include "sync/internal_api/public/base/model_type_payload_map.h"
24 #include "sync/internal_api/public/engine/polling_constants.h" 24 #include "sync/internal_api/public/engine/polling_constants.h"
25 #include "sync/internal_api/public/util/weak_handle.h" 25 #include "sync/internal_api/public/util/weak_handle.h"
26 #include "sync/sessions/sync_session.h" 26 #include "sync/sessions/sync_session.h"
27 #include "sync/sessions/sync_session_context.h" 27 #include "sync/sessions/sync_session_context.h"
28 28
29 namespace syncer { 29 namespace syncer {
30 30
31 class BackoffDelayProvider;
32
31 class SyncSchedulerImpl : public SyncScheduler { 33 class SyncSchedulerImpl : public SyncScheduler {
32 public: 34 public:
33 // |name| is a display string to identify the syncer thread. Takes 35 // |name| is a display string to identify the syncer thread. Takes
34 // |ownership of |syncer|. 36 // |ownership of |syncer| and |delay_provider|.
35 SyncSchedulerImpl(const std::string& name, 37 SyncSchedulerImpl(const std::string& name,
36 sessions::SyncSessionContext* context, Syncer* syncer); 38 BackoffDelayProvider* delay_provider,
39 sessions::SyncSessionContext* context,
40 Syncer* syncer);
37 41
38 // Calls Stop(). 42 // Calls Stop().
39 virtual ~SyncSchedulerImpl(); 43 virtual ~SyncSchedulerImpl();
40 44
41 virtual void Start(Mode mode) OVERRIDE; 45 virtual void Start(Mode mode) OVERRIDE;
42 virtual bool ScheduleConfiguration( 46 virtual bool ScheduleConfiguration(
43 const ConfigurationParams& params) OVERRIDE; 47 const ConfigurationParams& params) OVERRIDE;
44 virtual void RequestStop(const base::Closure& callback) OVERRIDE; 48 virtual void RequestStop(const base::Closure& callback) OVERRIDE;
45 virtual void ScheduleNudgeAsync( 49 virtual void ScheduleNudgeAsync(
46 const base::TimeDelta& delay, 50 const base::TimeDelta& delay,
(...skipping 18 matching lines...) Expand all
65 virtual void OnReceivedShortPollIntervalUpdate( 69 virtual void OnReceivedShortPollIntervalUpdate(
66 const base::TimeDelta& new_interval) OVERRIDE; 70 const base::TimeDelta& new_interval) OVERRIDE;
67 virtual void OnReceivedLongPollIntervalUpdate( 71 virtual void OnReceivedLongPollIntervalUpdate(
68 const base::TimeDelta& new_interval) OVERRIDE; 72 const base::TimeDelta& new_interval) OVERRIDE;
69 virtual void OnReceivedSessionsCommitDelay( 73 virtual void OnReceivedSessionsCommitDelay(
70 const base::TimeDelta& new_delay) OVERRIDE; 74 const base::TimeDelta& new_delay) OVERRIDE;
71 virtual void OnShouldStopSyncingPermanently() OVERRIDE; 75 virtual void OnShouldStopSyncingPermanently() OVERRIDE;
72 virtual void OnSyncProtocolError( 76 virtual void OnSyncProtocolError(
73 const sessions::SyncSessionSnapshot& snapshot) OVERRIDE; 77 const sessions::SyncSessionSnapshot& snapshot) OVERRIDE;
74 78
75 // DDOS avoidance function. Calculates how long we should wait before trying
76 // again after a failed sync attempt, where the last delay was |base_delay|.
77 // TODO(tim): Look at URLRequestThrottlerEntryInterface.
78 static base::TimeDelta GetRecommendedDelay(const base::TimeDelta& base_delay);
79
80 // For integration tests only. Override initial backoff value.
81 // TODO(tim): Remove this, use command line flag and plumb through. Done
82 // this way to reduce diffs in hotfix.
83 static void ForceShortInitialBackoffRetry();
84
85 private: 79 private:
86 enum JobProcessDecision { 80 enum JobProcessDecision {
87 // Indicates we should continue with the current job. 81 // Indicates we should continue with the current job.
88 CONTINUE, 82 CONTINUE,
89 // Indicates that we should save it to be processed later. 83 // Indicates that we should save it to be processed later.
90 SAVE, 84 SAVE,
91 // Indicates we should drop this job. 85 // Indicates we should drop this job.
92 DROP, 86 DROP,
93 }; 87 };
94 88
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 SaveConfigurationWhileThrottled); 137 SaveConfigurationWhileThrottled);
144 FRIEND_TEST_ALL_PREFIXES(SyncSchedulerWhiteboxTest, 138 FRIEND_TEST_ALL_PREFIXES(SyncSchedulerWhiteboxTest,
145 SaveNudgeWhileThrottled); 139 SaveNudgeWhileThrottled);
146 FRIEND_TEST_ALL_PREFIXES(SyncSchedulerWhiteboxTest, 140 FRIEND_TEST_ALL_PREFIXES(SyncSchedulerWhiteboxTest,
147 ContinueCanaryJobConfig); 141 ContinueCanaryJobConfig);
148 FRIEND_TEST_ALL_PREFIXES(SyncSchedulerWhiteboxTest, 142 FRIEND_TEST_ALL_PREFIXES(SyncSchedulerWhiteboxTest,
149 ContinueNudgeWhileExponentialBackOff); 143 ContinueNudgeWhileExponentialBackOff);
150 FRIEND_TEST_ALL_PREFIXES(SyncSchedulerTest, TransientPollFailure); 144 FRIEND_TEST_ALL_PREFIXES(SyncSchedulerTest, TransientPollFailure);
151 FRIEND_TEST_ALL_PREFIXES(SyncSchedulerTest, GetInitialBackoffDelay); 145 FRIEND_TEST_ALL_PREFIXES(SyncSchedulerTest, GetInitialBackoffDelay);
152 146
153 // A component used to get time delays associated with exponential backoff.
154 // Encapsulated into a class to facilitate testing.
155 class DelayProvider {
156 public:
157 DelayProvider();
158 virtual base::TimeDelta GetDelay(const base::TimeDelta& last_delay);
159 virtual ~DelayProvider();
160 private:
161 DISALLOW_COPY_AND_ASSIGN(DelayProvider);
162 };
163
164 struct WaitInterval { 147 struct WaitInterval {
165 enum Mode { 148 enum Mode {
166 // Uninitialized state, should not be set in practice. 149 // Uninitialized state, should not be set in practice.
167 UNKNOWN = -1, 150 UNKNOWN = -1,
168 // A wait interval whose duration has been affected by exponential 151 // A wait interval whose duration has been affected by exponential
169 // backoff. 152 // backoff.
170 // EXPONENTIAL_BACKOFF intervals are nudge-rate limited to 1 per interval. 153 // EXPONENTIAL_BACKOFF intervals are nudge-rate limited to 1 per interval.
171 EXPONENTIAL_BACKOFF, 154 EXPONENTIAL_BACKOFF,
172 // A server-initiated throttled interval. We do not allow any syncing 155 // A server-initiated throttled interval. We do not allow any syncing
173 // during such an interval. 156 // during such an interval.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 210
228 // Helper to configure polling intervals. Used by Start and ScheduleNextSync. 211 // Helper to configure polling intervals. Used by Start and ScheduleNextSync.
229 void AdjustPolling(const SyncSessionJob* old_job); 212 void AdjustPolling(const SyncSessionJob* old_job);
230 213
231 // Helper to restart waiting with |wait_interval_|'s timer. 214 // Helper to restart waiting with |wait_interval_|'s timer.
232 void RestartWaiting(); 215 void RestartWaiting();
233 216
234 // Helper to ScheduleNextSync in case of consecutive sync errors. 217 // Helper to ScheduleNextSync in case of consecutive sync errors.
235 void HandleContinuationError(const SyncSessionJob& old_job); 218 void HandleContinuationError(const SyncSessionJob& old_job);
236 219
237 // Helper to calculate the initial value for exponential backoff.
238 // See possible values and comments in polling_constants.h.
239 base::TimeDelta GetInitialBackoffDelay(
240 const sessions::ModelNeutralState& state) const;
241
242 // Determines if it is legal to run |job| by checking current 220 // Determines if it is legal to run |job| by checking current
243 // operational mode, backoff or throttling, freshness 221 // operational mode, backoff or throttling, freshness
244 // (so we don't make redundant syncs), and connection. 222 // (so we don't make redundant syncs), and connection.
245 bool ShouldRunJob(const SyncSessionJob& job); 223 bool ShouldRunJob(const SyncSessionJob& job);
246 224
247 // Decide whether we should CONTINUE, SAVE or DROP the job. 225 // Decide whether we should CONTINUE, SAVE or DROP the job.
248 JobProcessDecision DecideOnJob(const SyncSessionJob& job); 226 JobProcessDecision DecideOnJob(const SyncSessionJob& job);
249 227
250 // Decide on whether to CONTINUE, SAVE or DROP the job when we are in 228 // Decide on whether to CONTINUE, SAVE or DROP the job when we are in
251 // backoff mode. 229 // backoff mode.
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 319
342 // The latest connection code we got while trying to connect. 320 // The latest connection code we got while trying to connect.
343 HttpResponse::ServerConnectionCode connection_code_; 321 HttpResponse::ServerConnectionCode connection_code_;
344 322
345 // Tracks in-flight nudges so we can coalesce. 323 // Tracks in-flight nudges so we can coalesce.
346 scoped_ptr<SyncSessionJob> pending_nudge_; 324 scoped_ptr<SyncSessionJob> pending_nudge_;
347 325
348 // Current wait state. Null if we're not in backoff and not throttled. 326 // Current wait state. Null if we're not in backoff and not throttled.
349 scoped_ptr<WaitInterval> wait_interval_; 327 scoped_ptr<WaitInterval> wait_interval_;
350 328
351 scoped_ptr<DelayProvider> delay_provider_; 329 scoped_ptr<BackoffDelayProvider> delay_provider_;
352 330
353 // Invoked to run through the sync cycle. 331 // Invoked to run through the sync cycle.
354 scoped_ptr<Syncer> syncer_; 332 scoped_ptr<Syncer> syncer_;
355 333
356 sessions::SyncSessionContext *session_context_; 334 sessions::SyncSessionContext *session_context_;
357 335
358 DISALLOW_COPY_AND_ASSIGN(SyncSchedulerImpl); 336 DISALLOW_COPY_AND_ASSIGN(SyncSchedulerImpl);
359 }; 337 };
360 338
361 } // namespace syncer 339 } // namespace syncer
362 340
363 #endif // SYNC_ENGINE_SYNC_SCHEDULER_IMPL_H_ 341 #endif // SYNC_ENGINE_SYNC_SCHEDULER_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698