diff options
Diffstat (limited to 'sync/engine/sync_scheduler_impl.cc')
-rw-r--r-- | sync/engine/sync_scheduler_impl.cc | 81 |
1 files changed, 4 insertions, 77 deletions
diff --git a/sync/engine/sync_scheduler_impl.cc b/sync/engine/sync_scheduler_impl.cc index 6db3260..ff177b4 100644 --- a/sync/engine/sync_scheduler_impl.cc +++ b/sync/engine/sync_scheduler_impl.cc @@ -12,7 +12,7 @@ #include "base/location.h" #include "base/logging.h" #include "base/message_loop.h" -#include "base/rand_util.h" +#include "sync/engine/backoff_delay_provider.h" #include "sync/engine/syncer.h" #include "sync/engine/throttled_data_type_tracker.h" #include "sync/protocol/proto_enum_conversions.h" @@ -32,11 +32,6 @@ using sync_pb::GetUpdatesCallerInfo; namespace { -// For integration tests only. Override initial backoff value. -// TODO(tim): Remove this egregiousness, use command line flag and plumb -// through. Done this way to reduce diffs in hotfix. -static bool g_force_short_retry = false; - bool ShouldRequestEarlyExit(const SyncProtocolError& error) { switch (error.error_type) { case SYNC_SUCCESS: @@ -85,9 +80,6 @@ ConfigurationParams::ConfigurationParams( } ConfigurationParams::~ConfigurationParams() {} -SyncSchedulerImpl::DelayProvider::DelayProvider() {} -SyncSchedulerImpl::DelayProvider::~DelayProvider() {} - SyncSchedulerImpl::WaitInterval::WaitInterval() : mode(UNKNOWN), had_nudge(false) { @@ -140,11 +132,6 @@ const char* SyncSchedulerImpl::SyncSessionJob::GetPurposeString( return ""; } -TimeDelta SyncSchedulerImpl::DelayProvider::GetDelay( - const base::TimeDelta& last_delay) { - return SyncSchedulerImpl::GetRecommendedDelay(last_delay); -} - GetUpdatesCallerInfo::GetUpdatesSource GetUpdatesFromNudgeSource( NudgeSource source) { switch (source) { @@ -197,6 +184,7 @@ bool IsConfigRelatedUpdateSourceValue( } // namespace SyncSchedulerImpl::SyncSchedulerImpl(const std::string& name, + BackoffDelayProvider* delay_provider, sessions::SyncSessionContext* context, Syncer* syncer) : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), @@ -216,7 +204,7 @@ SyncSchedulerImpl::SyncSchedulerImpl(const std::string& name, // Start with assuming everything is fine with the connection. // At the end of the sync cycle we would have the correct status. connection_code_(HttpResponse::SERVER_CONNECTION_OK), - delay_provider_(new DelayProvider()), + delay_provider_(delay_provider), syncer_(syncer), session_context_(context) { DCHECK(sync_loop_); @@ -903,43 +891,6 @@ void SyncSchedulerImpl::RestartWaiting() { this, &SyncSchedulerImpl::DoCanaryJob); } -namespace { -// TODO(tim): Move this function to syncer_error.h. -// Return true if the command in question was attempted and did not complete -// successfully. -bool IsError(SyncerError error) { - return error != UNSET && error != SYNCER_OK; -} -} // namespace - -// static -void SyncSchedulerImpl::ForceShortInitialBackoffRetry() { - g_force_short_retry = true; -} - -TimeDelta SyncSchedulerImpl::GetInitialBackoffDelay( - const sessions::ModelNeutralState& state) const { - // TODO(tim): Remove this, provide integration-test-only mechanism - // for override. - if (g_force_short_retry) { - return TimeDelta::FromSeconds(kInitialBackoffShortRetrySeconds); - } - - if (IsError(state.last_get_key_result)) - return TimeDelta::FromSeconds(kInitialBackoffRetrySeconds); - // Note: If we received a MIGRATION_DONE on download updates, then commit - // should not have taken place. Moreover, if we receive a MIGRATION_DONE - // on commit, it means that download updates succeeded. Therefore, we only - // need to check if either code is equal to SERVER_RETURN_MIGRATION_DONE, - // and not if there were any more serious errors requiring the long retry. - if (state.last_download_updates_result == SERVER_RETURN_MIGRATION_DONE || - state.commit_result == SERVER_RETURN_MIGRATION_DONE) { - return TimeDelta::FromSeconds(kInitialBackoffShortRetrySeconds); - } - - return TimeDelta::FromSeconds(kInitialBackoffRetrySeconds); -} - void SyncSchedulerImpl::HandleContinuationError( const SyncSessionJob& old_job) { DCHECK_EQ(MessageLoop::current(), sync_loop_); @@ -951,7 +902,7 @@ void SyncSchedulerImpl::HandleContinuationError( TimeDelta length = delay_provider_->GetDelay( IsBackingOff() ? wait_interval_->length : - GetInitialBackoffDelay( + delay_provider_->GetInitialDelay( old_job.session->status_controller().model_neutral_state())); SDVLOG(2) << "In handle continuation error with " @@ -984,30 +935,6 @@ void SyncSchedulerImpl::HandleContinuationError( RestartWaiting(); } -// static -TimeDelta SyncSchedulerImpl::GetRecommendedDelay(const TimeDelta& last_delay) { - if (last_delay.InSeconds() >= kMaxBackoffSeconds) - return TimeDelta::FromSeconds(kMaxBackoffSeconds); - - // This calculates approx. base_delay_seconds * 2 +/- base_delay_seconds / 2 - int64 backoff_s = - std::max(static_cast<int64>(1), - last_delay.InSeconds() * kBackoffRandomizationFactor); - - // Flip a coin to randomize backoff interval by +/- 50%. - int rand_sign = base::RandInt(0, 1) * 2 - 1; - - // Truncation is adequate for rounding here. - backoff_s = backoff_s + - (rand_sign * (last_delay.InSeconds() / kBackoffRandomizationFactor)); - - // Cap the backoff interval. - backoff_s = std::max(static_cast<int64>(1), - std::min(backoff_s, kMaxBackoffSeconds)); - - return TimeDelta::FromSeconds(backoff_s); -} - void SyncSchedulerImpl::RequestStop(const base::Closure& callback) { syncer_->RequestEarlyExit(); // Safe to call from any thread. DCHECK(weak_handle_this_.IsInitialized()); |