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

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

Issue 124083002: Client-side changes to support retry GU. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 10
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 virtual bool IsCurrentlyThrottled() OVERRIDE; 82 virtual bool IsCurrentlyThrottled() OVERRIDE;
83 virtual void OnReceivedShortPollIntervalUpdate( 83 virtual void OnReceivedShortPollIntervalUpdate(
84 const base::TimeDelta& new_interval) OVERRIDE; 84 const base::TimeDelta& new_interval) OVERRIDE;
85 virtual void OnReceivedLongPollIntervalUpdate( 85 virtual void OnReceivedLongPollIntervalUpdate(
86 const base::TimeDelta& new_interval) OVERRIDE; 86 const base::TimeDelta& new_interval) OVERRIDE;
87 virtual void OnReceivedSessionsCommitDelay( 87 virtual void OnReceivedSessionsCommitDelay(
88 const base::TimeDelta& new_delay) OVERRIDE; 88 const base::TimeDelta& new_delay) OVERRIDE;
89 virtual void OnReceivedClientInvalidationHintBufferSize(int size) OVERRIDE; 89 virtual void OnReceivedClientInvalidationHintBufferSize(int size) OVERRIDE;
90 virtual void OnSyncProtocolError( 90 virtual void OnSyncProtocolError(
91 const sessions::SyncSessionSnapshot& snapshot) OVERRIDE; 91 const sessions::SyncSessionSnapshot& snapshot) OVERRIDE;
92 virtual void OnReceivedGuRetryDelaySeconds(int delay_seconds) OVERRIDE;
92 93
93 private: 94 private:
94 enum JobPriority { 95 enum JobPriority {
95 // Non-canary jobs respect exponential backoff. 96 // Non-canary jobs respect exponential backoff.
96 NORMAL_PRIORITY, 97 NORMAL_PRIORITY,
97 // Canary jobs bypass exponential backoff, so use with extreme caution. 98 // Canary jobs bypass exponential backoff, so use with extreme caution.
98 CANARY_PRIORITY 99 CANARY_PRIORITY
99 }; 100 };
100 101
101 enum PollAdjustType { 102 enum PollAdjustType {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 WaitInterval(Mode mode, base::TimeDelta length); 148 WaitInterval(Mode mode, base::TimeDelta length);
148 149
149 static const char* GetModeString(Mode mode); 150 static const char* GetModeString(Mode mode);
150 151
151 Mode mode; 152 Mode mode;
152 base::TimeDelta length; 153 base::TimeDelta length;
153 }; 154 };
154 155
155 static const char* GetModeString(Mode mode); 156 static const char* GetModeString(Mode mode);
156 157
157 // Invoke the syncer to perform a nudge job.
158 void DoNudgeSyncSessionJob(JobPriority priority);
159
160 // Invoke the syncer to perform a configuration job. 158 // Invoke the syncer to perform a configuration job.
161 void DoConfigurationSyncSessionJob(JobPriority priority); 159 void DoConfigurationSyncSessionJob(JobPriority priority);
162 160
163 // Helper function for Do{Nudge,Configuration}SyncSessionJob. 161 // Helper function for Do{Nudge,Configuration}SyncSessionJob.
164 void HandleFailure( 162 void HandleFailure(
165 const sessions::ModelNeutralState& model_neutral_state); 163 const sessions::ModelNeutralState& model_neutral_state);
166 164
167 // Invoke the Syncer to perform a poll job. 165 // Invoke the syncer to perform a nudge job. Return true if session didn't
168 void DoPollSyncSessionJob(); 166 // abort pre-maturely.
167 bool DoNudgeSyncSessionJob(sessions::SyncSession* session);
168
169 // Invoke the Syncer to perform a poll job. Return true if session didn't
170 // abort pre-maturely.
171 bool DoPollSyncSessionJob(sessions::SyncSession* session);
172
173 // Invoke the Syncer to perform a retry job. Return true if session didn't
174 // abort pre-maturely.
175 bool DoRetrySyncSessionJob(sessions::SyncSession* session);
169 176
170 // Helper function to calculate poll interval. 177 // Helper function to calculate poll interval.
171 base::TimeDelta GetPollInterval(); 178 base::TimeDelta GetPollInterval();
172 179
173 // Adjusts the poll timer to account for new poll interval, and possibly 180 // Adjusts the poll timer to account for new poll interval, and possibly
174 // resets the poll interval, depedning on the flag's value. 181 // resets the poll interval, depedning on the flag's value.
175 void AdjustPolling(PollAdjustType type); 182 void AdjustPolling(PollAdjustType type);
176 183
177 // Helper to restart waiting with |wait_interval_|'s timer. 184 // Helper to restart waiting with |wait_interval_|'s timer.
178 void RestartWaiting(); 185 void RestartWaiting();
(...skipping 26 matching lines...) Expand all
205 212
206 // Looks for pending work and, if it finds any, run this work at "canary" 213 // Looks for pending work and, if it finds any, run this work at "canary"
207 // priority. 214 // priority.
208 void TryCanaryJob(); 215 void TryCanaryJob();
209 216
210 // At the moment TrySyncSessionJob just posts call to TrySyncSessionJobImpl on 217 // At the moment TrySyncSessionJob just posts call to TrySyncSessionJobImpl on
211 // current thread. In the future it will request access token here. 218 // current thread. In the future it will request access token here.
212 void TrySyncSessionJob(); 219 void TrySyncSessionJob();
213 void TrySyncSessionJobImpl(); 220 void TrySyncSessionJobImpl();
214 221
222 // Post-processing according to session result.
223 void SyncSessionPostProcessing(sessions::SyncSession* session);
224
215 // Transitions out of the THROTTLED WaitInterval then calls TryCanaryJob(). 225 // Transitions out of the THROTTLED WaitInterval then calls TryCanaryJob().
216 void Unthrottle(); 226 void Unthrottle();
217 227
218 // Called when a per-type throttling interval expires. 228 // Called when a per-type throttling interval expires.
219 void TypeUnthrottle(base::TimeTicks unthrottle_time); 229 void TypeUnthrottle(base::TimeTicks unthrottle_time);
220 230
221 // Runs a normal nudge job when the scheduled timer expires. 231 // Runs a normal nudge job when the scheduled timer expires.
222 void PerformDelayedNudge(); 232 void PerformDelayedNudge();
223 233
224 // Attempts to exit EXPONENTIAL_BACKOFF by calling TryCanaryJob(). 234 // Attempts to exit EXPONENTIAL_BACKOFF by calling TryCanaryJob().
225 void ExponentialBackoffRetry(); 235 void ExponentialBackoffRetry();
226 236
227 // Called when the root cause of the current connection error is fixed. 237 // Called when the root cause of the current connection error is fixed.
228 void OnServerConnectionErrorFixed(); 238 void OnServerConnectionErrorFixed();
229 239
230 // Creates a session for a poll and performs the sync. 240 // Creates a session for a poll and performs the sync.
231 void PollTimerCallback(); 241 void PollTimerCallback();
232 242
243 // Creates a session for a retry and performs the sync.
244 void RetryTimerCallback();
245
233 // Returns the set of types that are enabled and not currently throttled. 246 // Returns the set of types that are enabled and not currently throttled.
234 ModelTypeSet GetEnabledAndUnthrottledTypes(); 247 ModelTypeSet GetEnabledAndUnthrottledTypes();
235 248
236 // Called as we are started to broadcast an initial session snapshot 249 // Called as we are started to broadcast an initial session snapshot
237 // containing data like initial_sync_ended. Important when the client starts 250 // containing data like initial_sync_ended. Important when the client starts
238 // up and does not need to perform an initial sync. 251 // up and does not need to perform an initial sync.
239 void SendInitialSnapshot(); 252 void SendInitialSnapshot();
240 253
241 // This is used for histogramming and analysis of ScheduleNudge* APIs. 254 // This is used for histogramming and analysis of ScheduleNudge* APIs.
242 // SyncScheduler is the ultimate choke-point for all such invocations (with 255 // SyncScheduler is the ultimate choke-point for all such invocations (with
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 // after NETWORK_UNAVAILABLE error). 342 // after NETWORK_UNAVAILABLE error).
330 // It is reset back to NORMAL_PRIORITY on every call to TrySyncSessionJobImpl. 343 // It is reset back to NORMAL_PRIORITY on every call to TrySyncSessionJobImpl.
331 JobPriority next_sync_session_job_priority_; 344 JobPriority next_sync_session_job_priority_;
332 345
333 base::WeakPtrFactory<SyncSchedulerImpl> weak_ptr_factory_; 346 base::WeakPtrFactory<SyncSchedulerImpl> weak_ptr_factory_;
334 347
335 // A second factory specially for weak_handle_this_, to allow the handle 348 // A second factory specially for weak_handle_this_, to allow the handle
336 // to be const and alleviate threading concerns. 349 // to be const and alleviate threading concerns.
337 base::WeakPtrFactory<SyncSchedulerImpl> weak_ptr_factory_for_weak_handle_; 350 base::WeakPtrFactory<SyncSchedulerImpl> weak_ptr_factory_for_weak_handle_;
338 351
352 // One-shot timer for scheduling GU retry according to delay set by server.
353 base::OneShotTimer<SyncSchedulerImpl> retry_timer_;
354
339 DISALLOW_COPY_AND_ASSIGN(SyncSchedulerImpl); 355 DISALLOW_COPY_AND_ASSIGN(SyncSchedulerImpl);
340 }; 356 };
341 357
342 } // namespace syncer 358 } // namespace syncer
343 359
344 #endif // SYNC_ENGINE_SYNC_SCHEDULER_IMPL_H_ 360 #endif // SYNC_ENGINE_SYNC_SCHEDULER_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698