Index: sync/sessions/nudge_tracker.cc |
diff --git a/sync/sessions/nudge_tracker.cc b/sync/sessions/nudge_tracker.cc |
index f96d3464826e86653fb04d515c7d9575d891f2be..13186c7a678008c1f5f740384472298a59d25d4c 100644 |
--- a/sync/sessions/nudge_tracker.cc |
+++ b/sync/sessions/nudge_tracker.cc |
@@ -18,7 +18,8 @@ size_t NudgeTracker::kDefaultMaxPayloadsPerType = 10; |
NudgeTracker::NudgeTracker() |
: updates_source_(sync_pb::GetUpdatesCallerInfo::UNKNOWN), |
invalidations_enabled_(false), |
- invalidations_out_of_sync_(true) { |
+ invalidations_out_of_sync_(true), |
+ is_retry_required_(false) { |
ModelTypeSet protocol_types = ProtocolTypes(); |
// Default initialize all the type trackers. |
for (ModelTypeSet::Iterator it = protocol_types.First(); it.Good(); |
@@ -44,11 +45,11 @@ bool NudgeTracker::IsSyncRequired() const { |
return false; |
} |
-bool NudgeTracker::IsGetUpdatesRequired(base::TimeTicks now) const { |
+bool NudgeTracker::IsGetUpdatesRequired() const { |
if (invalidations_out_of_sync_) |
return true; |
- if (IsRetryRequired(now)) |
+ if (IsRetryRequired()) |
return true; |
for (TypeTrackerMap::const_iterator it = type_trackers_.begin(); |
@@ -60,16 +61,18 @@ bool NudgeTracker::IsGetUpdatesRequired(base::TimeTicks now) const { |
return false; |
} |
-bool NudgeTracker::IsRetryRequired(base::TimeTicks now) const { |
- return !next_retry_time_.is_null() && next_retry_time_ < now; |
+bool NudgeTracker::IsRetryRequired() const { |
+ return is_retry_required_; |
} |
-void NudgeTracker::RecordSuccessfulSyncCycle(base::TimeTicks now) { |
+void NudgeTracker::RecordSuccessfulSyncCycle() { |
updates_source_ = sync_pb::GetUpdatesCallerInfo::UNKNOWN; |
- last_successful_sync_time_ = now; |
- if (next_retry_time_ < now) |
- next_retry_time_ = base::TimeTicks(); |
+ // If a retry was required, we've just serviced it. Unset the flag. |
+ is_retry_required_ = false; |
+ |
+ // We don't unset the next_retry_time_ flag here, since it may have been |
+ // updated during the sync cycle that just completed. |
// A successful cycle while invalidations are enabled puts us back into sync. |
invalidations_out_of_sync_ = !invalidations_enabled_; |
@@ -239,6 +242,20 @@ void NudgeTracker::FillProtoMessage( |
type_trackers_.find(type)->second.FillGetUpdatesTriggersMessage(msg); |
} |
+void NudgeTracker::ToggleRetryFlagIfRequired(base::TimeTicks now) { |
+ // Assume we have nothing to do. |
+ is_retry_required_ = false; |
+ |
+ // Nothing to do if no retries are scheduled. |
+ if (next_retry_time_.is_null()) |
+ return; |
+ |
+ if (next_retry_time_ < now) { |
haitaol1
2014/01/28 20:09:20
where is next_retry_time nulled? Seems nudge track
rlarocque
2014/01/28 22:24:38
Thanks!
I had a nagging feeling that this code wa
|
+ // The time has come. We should perform a GU retry as soon as possible. |
+ is_retry_required_ = true; |
+ } |
+} |
+ |
void NudgeTracker::SetHintBufferSize(size_t size) { |
for (TypeTrackerMap::iterator it = type_trackers_.begin(); |
it != type_trackers_.end(); ++it) { |
@@ -246,5 +263,9 @@ void NudgeTracker::SetHintBufferSize(size_t size) { |
} |
} |
+void NudgeTracker::SetNextRetryTime(base::TimeTicks retry_time) { |
+ next_retry_time_ = retry_time; |
+} |
+ |
} // namespace sessions |
} // namespace syncer |