Index: sync/engine/sync_scheduler_impl.h |
diff --git a/sync/engine/sync_scheduler_impl.h b/sync/engine/sync_scheduler_impl.h |
deleted file mode 100644 |
index f701ab8f95bbf555d7810aaf9b5bf34088929c80..0000000000000000000000000000000000000000 |
--- a/sync/engine/sync_scheduler_impl.h |
+++ /dev/null |
@@ -1,331 +0,0 @@ |
-// Copyright 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef SYNC_ENGINE_SYNC_SCHEDULER_IMPL_H_ |
-#define SYNC_ENGINE_SYNC_SCHEDULER_IMPL_H_ |
- |
-#include <map> |
-#include <memory> |
-#include <string> |
- |
-#include "base/callback.h" |
-#include "base/cancelable_callback.h" |
-#include "base/compiler_specific.h" |
-#include "base/gtest_prod_util.h" |
-#include "base/macros.h" |
-#include "base/memory/linked_ptr.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/threading/non_thread_safe.h" |
-#include "base/time/time.h" |
-#include "base/timer/timer.h" |
-#include "sync/base/sync_export.h" |
-#include "sync/engine/net/server_connection_manager.h" |
-#include "sync/engine/nudge_source.h" |
-#include "sync/engine/sync_scheduler.h" |
-#include "sync/engine/syncer.h" |
-#include "sync/internal_api/public/engine/polling_constants.h" |
-#include "sync/internal_api/public/util/weak_handle.h" |
-#include "sync/sessions/nudge_tracker.h" |
-#include "sync/sessions/sync_session.h" |
-#include "sync/sessions/sync_session_context.h" |
- |
-namespace syncer { |
- |
-class BackoffDelayProvider; |
- |
-namespace sessions { |
-struct ModelNeutralState; |
-} |
- |
-class SYNC_EXPORT SyncSchedulerImpl : public SyncScheduler, |
- public base::NonThreadSafe { |
- public: |
- // |name| is a display string to identify the syncer thread. Takes |
- // |ownership of |syncer| and |delay_provider|. |
- SyncSchedulerImpl(const std::string& name, |
- BackoffDelayProvider* delay_provider, |
- sessions::SyncSessionContext* context, |
- Syncer* syncer); |
- |
- // Calls Stop(). |
- ~SyncSchedulerImpl() override; |
- |
- void Start(Mode mode, base::Time last_poll_time) override; |
- void ScheduleConfiguration(const ConfigurationParams& params) override; |
- void ScheduleClearServerData(const ClearParams& params) override; |
- void Stop() override; |
- void ScheduleLocalNudge( |
- ModelTypeSet types, |
- const tracked_objects::Location& nudge_location) override; |
- void ScheduleLocalRefreshRequest( |
- ModelTypeSet types, |
- const tracked_objects::Location& nudge_location) override; |
- void ScheduleInvalidationNudge( |
- syncer::ModelType type, |
- std::unique_ptr<InvalidationInterface> invalidation, |
- const tracked_objects::Location& nudge_location) override; |
- void ScheduleInitialSyncNudge(syncer::ModelType model_type) override; |
- void SetNotificationsEnabled(bool notifications_enabled) override; |
- |
- void OnCredentialsUpdated() override; |
- void OnConnectionStatusChange() override; |
- |
- // SyncSession::Delegate implementation. |
- void OnThrottled(const base::TimeDelta& throttle_duration) override; |
- void OnTypesThrottled(ModelTypeSet types, |
- const base::TimeDelta& throttle_duration) override; |
- bool IsCurrentlyThrottled() override; |
- void OnReceivedShortPollIntervalUpdate( |
- const base::TimeDelta& new_interval) override; |
- void OnReceivedLongPollIntervalUpdate( |
- const base::TimeDelta& new_interval) override; |
- void OnReceivedCustomNudgeDelays( |
- const std::map<ModelType, base::TimeDelta>& nudge_delays) override; |
- void OnReceivedClientInvalidationHintBufferSize(int size) override; |
- void OnSyncProtocolError( |
- const SyncProtocolError& sync_protocol_error) override; |
- void OnReceivedGuRetryDelay(const base::TimeDelta& delay) override; |
- void OnReceivedMigrationRequest(syncer::ModelTypeSet types) override; |
- |
- // Returns true if the client is currently in exponential backoff. |
- bool IsBackingOff() const; |
- |
- private: |
- enum JobPriority { |
- // Non-canary jobs respect exponential backoff. |
- NORMAL_PRIORITY, |
- // Canary jobs bypass exponential backoff, so use with extreme caution. |
- CANARY_PRIORITY |
- }; |
- |
- enum PollAdjustType { |
- // Restart the poll interval. |
- FORCE_RESET, |
- // Restart the poll interval only if its length has changed. |
- UPDATE_INTERVAL, |
- }; |
- |
- friend class SyncSchedulerTest; |
- friend class SyncSchedulerWhiteboxTest; |
- friend class SyncerTest; |
- |
- FRIEND_TEST_ALL_PREFIXES(SyncSchedulerTest, TransientPollFailure); |
- FRIEND_TEST_ALL_PREFIXES(SyncSchedulerTest, |
- ServerConnectionChangeDuringBackoff); |
- FRIEND_TEST_ALL_PREFIXES(SyncSchedulerTest, |
- ConnectionChangeCanaryPreemptedByNudge); |
- FRIEND_TEST_ALL_PREFIXES(BackoffTriggersSyncSchedulerTest, |
- FailGetEncryptionKey); |
- FRIEND_TEST_ALL_PREFIXES(SyncSchedulerTest, SuccessfulRetry); |
- FRIEND_TEST_ALL_PREFIXES(SyncSchedulerTest, FailedRetry); |
- FRIEND_TEST_ALL_PREFIXES(SyncSchedulerTest, ReceiveNewRetryDelay); |
- |
- struct SYNC_EXPORT WaitInterval { |
- enum Mode { |
- // Uninitialized state, should not be set in practice. |
- UNKNOWN = -1, |
- // We enter a series of increasingly longer WaitIntervals if we experience |
- // repeated transient failures. We retry at the end of each interval. |
- EXPONENTIAL_BACKOFF, |
- // A server-initiated throttled interval. We do not allow any syncing |
- // during such an interval. |
- THROTTLED, |
- }; |
- WaitInterval(); |
- ~WaitInterval(); |
- WaitInterval(Mode mode, base::TimeDelta length); |
- |
- static const char* GetModeString(Mode mode); |
- |
- Mode mode; |
- base::TimeDelta length; |
- }; |
- |
- static const char* GetModeString(Mode mode); |
- |
- void SetDefaultNudgeDelay(base::TimeDelta delay_ms); |
- |
- // Invoke the syncer to perform a nudge job. |
- void DoNudgeSyncSessionJob(JobPriority priority); |
- |
- // Invoke the syncer to perform a configuration job. |
- void DoConfigurationSyncSessionJob(JobPriority priority); |
- |
- void DoClearServerDataSyncSessionJob(JobPriority priority); |
- |
- // Helper function for Do{Nudge,Configuration,Poll}SyncSessionJob. |
- void HandleSuccess(); |
- |
- // Helper function for Do{Nudge,Configuration,Poll}SyncSessionJob. |
- void HandleFailure( |
- const sessions::ModelNeutralState& model_neutral_state); |
- |
- // Invoke the Syncer to perform a poll job. |
- void DoPollSyncSessionJob(); |
- |
- // Helper function to calculate poll interval. |
- base::TimeDelta GetPollInterval(); |
- |
- // Adjusts the poll timer to account for new poll interval, and possibly |
- // resets the poll interval, depedning on the flag's value. |
- void AdjustPolling(PollAdjustType type); |
- |
- // Helper to restart waiting with |wait_interval_|'s timer. |
- void RestartWaiting(); |
- |
- // Determines if we're allowed to contact the server right now. |
- bool CanRunJobNow(JobPriority priority); |
- |
- // Determines if we're allowed to contact the server right now. |
- bool CanRunNudgeJobNow(JobPriority priority); |
- |
- // If the scheduler's current state supports it, this will create a job based |
- // on the passed in parameters and coalesce it with any other pending jobs, |
- // then post a delayed task to run it. It may also choose to drop the job or |
- // save it for later, depending on the scheduler's current state. |
- void ScheduleNudgeImpl( |
- const base::TimeDelta& delay, |
- const tracked_objects::Location& nudge_location); |
- |
- // Helper to signal listeners about changed retry time. |
- void NotifyRetryTime(base::Time retry_time); |
- |
- // Helper to signal listeners about changed throttled types. |
- void NotifyThrottledTypesChanged(ModelTypeSet types); |
- |
- // Looks for pending work and, if it finds any, run this work at "canary" |
- // priority. |
- void TryCanaryJob(); |
- |
- // At the moment TrySyncSessionJob just posts call to TrySyncSessionJobImpl on |
- // current thread. In the future it will request access token here. |
- void TrySyncSessionJob(); |
- void TrySyncSessionJobImpl(); |
- |
- // Transitions out of the THROTTLED WaitInterval then calls TryCanaryJob(). |
- void Unthrottle(); |
- |
- // Called when a per-type throttling interval expires. |
- void TypeUnthrottle(base::TimeTicks unthrottle_time); |
- |
- // Runs a normal nudge job when the scheduled timer expires. |
- void PerformDelayedNudge(); |
- |
- // Attempts to exit EXPONENTIAL_BACKOFF by calling TryCanaryJob(). |
- void ExponentialBackoffRetry(); |
- |
- // Called when the root cause of the current connection error is fixed. |
- void OnServerConnectionErrorFixed(); |
- |
- // Creates a session for a poll and performs the sync. |
- void PollTimerCallback(); |
- |
- // Creates a session for a retry and performs the sync. |
- void RetryTimerCallback(); |
- |
- // Returns the set of types that are enabled and not currently throttled. |
- ModelTypeSet GetEnabledAndUnthrottledTypes(); |
- |
- // Called as we are started to broadcast an initial session snapshot |
- // containing data like initial_sync_ended. Important when the client starts |
- // up and does not need to perform an initial sync. |
- void SendInitialSnapshot(); |
- |
- // This is used for histogramming and analysis of ScheduleNudge* APIs. |
- // SyncScheduler is the ultimate choke-point for all such invocations (with |
- // and without InvalidationState variants, all NudgeSources, etc) and as such |
- // is the most flexible place to do this bookkeeping. |
- void UpdateNudgeTimeRecords(ModelTypeSet types); |
- |
- // For certain methods that need to worry about X-thread posting. |
- WeakHandle<SyncSchedulerImpl> weak_handle_this_; |
- |
- // Used for logging. |
- const std::string name_; |
- |
- // Set in Start(), unset in Stop(). |
- bool started_; |
- |
- // Modifiable versions of kDefaultLongPollIntervalSeconds which can be |
- // updated by the server. |
- base::TimeDelta syncer_short_poll_interval_seconds_; |
- base::TimeDelta syncer_long_poll_interval_seconds_; |
- |
- // Timer for polling. Restarted on each successful poll, and when entering |
- // normal sync mode or exiting an error state. Not active in configuration |
- // mode. |
- base::OneShotTimer poll_timer_; |
- |
- // The mode of operation. |
- Mode mode_; |
- |
- // Current wait state. Null if we're not in backoff and not throttled. |
- std::unique_ptr<WaitInterval> wait_interval_; |
- |
- std::unique_ptr<BackoffDelayProvider> delay_provider_; |
- |
- // The event that will wake us up. |
- base::OneShotTimer pending_wakeup_timer_; |
- |
- // An event that fires when data type throttling expires. |
- base::OneShotTimer type_unthrottle_timer_; |
- |
- // Storage for variables related to an in-progress configure request. Note |
- // that (mode_ != CONFIGURATION_MODE) \implies !pending_configure_params_. |
- std::unique_ptr<ConfigurationParams> pending_configure_params_; |
- |
- std::unique_ptr<ClearParams> pending_clear_params_; |
- |
- // If we have a nudge pending to run soon, it will be listed here. |
- base::TimeTicks scheduled_nudge_time_; |
- |
- // Keeps track of work that the syncer needs to handle. |
- sessions::NudgeTracker nudge_tracker_; |
- |
- // Invoked to run through the sync cycle. |
- std::unique_ptr<Syncer> syncer_; |
- |
- sessions::SyncSessionContext* session_context_; |
- |
- // A map tracking LOCAL NudgeSource invocations of ScheduleNudge* APIs, |
- // organized by datatype. Each datatype that was part of the types requested |
- // in the call will have its TimeTicks value updated. |
- typedef std::map<ModelType, base::TimeTicks> ModelTypeTimeMap; |
- ModelTypeTimeMap last_local_nudges_by_model_type_; |
- |
- // Used as an "anti-reentrancy defensive assertion". |
- // While true, it is illegal for any new scheduling activity to take place. |
- // Ensures that higher layers don't break this law in response to events that |
- // take place during a sync cycle. We call this out because such violations |
- // could result in tight sync loops hitting sync servers. |
- bool no_scheduling_allowed_; |
- |
- // TryJob might get called for multiple reasons. It should only call |
- // DoPollSyncSessionJob after some time since the last attempt. |
- // last_poll_reset_ keeps track of when was last attempt. |
- base::TimeTicks last_poll_reset_; |
- |
- // next_sync_session_job_priority_ defines which priority will be used next |
- // time TrySyncSessionJobImpl is called. CANARY_PRIORITY allows syncer to run |
- // even if scheduler is in exponential backoff. This is needed for events that |
- // have chance of resolving previous error (e.g. network connection change |
- // after NETWORK_UNAVAILABLE error). |
- // It is reset back to NORMAL_PRIORITY on every call to TrySyncSessionJobImpl. |
- JobPriority next_sync_session_job_priority_; |
- |
- // One-shot timer for scheduling GU retry according to delay set by server. |
- base::OneShotTimer retry_timer_; |
- |
- base::WeakPtrFactory<SyncSchedulerImpl> weak_ptr_factory_; |
- |
- // A second factory specially for weak_handle_this_, to allow the handle |
- // to be const and alleviate threading concerns. |
- base::WeakPtrFactory<SyncSchedulerImpl> weak_ptr_factory_for_weak_handle_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SyncSchedulerImpl); |
-}; |
- |
-} // namespace syncer |
- |
-#endif // SYNC_ENGINE_SYNC_SCHEDULER_IMPL_H_ |