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

Unified Diff: sync/engine/sync_scheduler_impl.h

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 5 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
« no previous file with comments | « sync/engine/sync_scheduler.cc ('k') | sync/engine/sync_scheduler_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « sync/engine/sync_scheduler.cc ('k') | sync/engine/sync_scheduler_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698