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

Unified Diff: sync/sessions/nudge_tracker.h

Issue 146113003: sync: GU retry with less explicit TimeTicks logic (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: One more comment update 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 side-by-side diff with in-line comments
Download patch
Index: sync/sessions/nudge_tracker.h
diff --git a/sync/sessions/nudge_tracker.h b/sync/sessions/nudge_tracker.h
index 1663f0ccad82b4d60af4626bb18a289a90c64bc7..1607a6e7fc0639c0eeb7b2c9073069dae2b4a76d 100644
--- a/sync/sessions/nudge_tracker.h
+++ b/sync/sessions/nudge_tracker.h
@@ -36,14 +36,19 @@ class SYNC_EXPORT_PRIVATE NudgeTracker {
// Returns true if there is a good reason for performing a get updates
// request as part of the next sync cycle.
- bool IsGetUpdatesRequired(base::TimeTicks now) const;
+ bool IsGetUpdatesRequired() const;
// Return true if should perform a sync cycle for GU retry.
- bool IsRetryRequired(base::TimeTicks now) const;
+ //
+ // This is sensitive to changes in 'current time'. Its value can be affected
+ // by SetSyncCycleStartTime(), SetNextRetryTime(), and
+ // RecordSuccessfulSyncCycle(). Please refer to those functions for more
+ // information on how this flag is maintained.
+ bool IsRetryRequired() const;
// Tells this class that all required update fetching or committing has
// completed successfully.
- void RecordSuccessfulSyncCycle(base::TimeTicks now);
+ void RecordSuccessfulSyncCycle();
// Takes note of a local change.
void RecordLocalChange(ModelTypeSet types);
@@ -105,12 +110,22 @@ class SYNC_EXPORT_PRIVATE NudgeTracker {
ModelType type,
sync_pb::DataTypeProgressMarker* progress) const;
+ // Flips the flag if we're due for a retry.
+ void SetSyncCycleStartTime(base::TimeTicks now);
+
// Adjusts the number of hints that can be stored locally.
void SetHintBufferSize(size_t size);
- void set_next_retry_time(base::TimeTicks next_retry_time) {
- next_retry_time_ = next_retry_time;
- }
+ // Schedules a retry GetUpdate request for some time in the future.
+ //
+ // This is a request sent to us as part of a server response requesting
+ // that the client perform a GetUpdate request at |next_retry_time| to
+ // fetch any updates it may have missed in the first attempt.
+ //
+ // To avoid strange results from IsRetryRequired() during a sync cycle, the
+ // effects of this change are not guaranteed to take effect until
+ // SetSyncCycleStartTime() is called at the start of the *next* sync cycle.
+ void SetNextRetryTime(base::TimeTicks next_retry_time);
private:
typedef std::map<ModelType, DataTypeTracker> TypeTrackerMap;
@@ -139,9 +154,23 @@ class SYNC_EXPORT_PRIVATE NudgeTracker {
base::TimeTicks last_successful_sync_time_;
- // A retry GU should be issued after this time.
+ // A pending update to the current_retry_time_.
+ //
+ // The GU retry time is specified by a call to SetNextRetryTime, but we don't
+ // want that change to take effect right away, since it could happen in the
+ // middle of a sync cycle. We delay the update until the start of the next
+ // sync cycle, which is indicated by a call to SetSyncCycleStartTime().
base::TimeTicks next_retry_time_;
+ // The currently active retry GU time. Will be null if there is no retry GU
+ // pending at this time.
+ base::TimeTicks current_retry_time_;
+
+ // The time when the sync cycle started. This value is maintained by
+ // SetSyncCycleStartTime(). This may contain a stale value if we're not
+ // currently in a sync cycle.
+ base::TimeTicks sync_cycle_start_time_;
+
DISALLOW_COPY_AND_ASSIGN(NudgeTracker);
};

Powered by Google App Engine
This is Rietveld 408576698