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

Unified Diff: chrome/browser/sync/engine/syncer.cc

Issue 9699057: [Sync] Move 'sync' target to sync/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Tim's comments Created 8 years, 9 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 | « chrome/browser/sync/engine/syncer.h ('k') | chrome/browser/sync/engine/syncer_command.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/engine/syncer.cc
diff --git a/chrome/browser/sync/engine/syncer.cc b/chrome/browser/sync/engine/syncer.cc
deleted file mode 100644
index 3fe46dc45c91246a5ab8f5ab5a97ce945667c158..0000000000000000000000000000000000000000
--- a/chrome/browser/sync/engine/syncer.cc
+++ /dev/null
@@ -1,345 +0,0 @@
-// Copyright (c) 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.
-
-#include "chrome/browser/sync/engine/syncer.h"
-
-#include "base/debug/trace_event.h"
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/message_loop.h"
-#include "base/time.h"
-#include "build/build_config.h"
-#include "chrome/browser/sync/engine/apply_updates_command.h"
-#include "chrome/browser/sync/engine/build_commit_command.h"
-#include "chrome/browser/sync/engine/cleanup_disabled_types_command.h"
-#include "chrome/browser/sync/engine/clear_data_command.h"
-#include "chrome/browser/sync/engine/conflict_resolver.h"
-#include "chrome/browser/sync/engine/download_updates_command.h"
-#include "chrome/browser/sync/engine/get_commit_ids_command.h"
-#include "chrome/browser/sync/engine/net/server_connection_manager.h"
-#include "chrome/browser/sync/engine/post_commit_message_command.h"
-#include "chrome/browser/sync/engine/process_commit_response_command.h"
-#include "chrome/browser/sync/engine/process_updates_command.h"
-#include "chrome/browser/sync/engine/resolve_conflicts_command.h"
-#include "chrome/browser/sync/engine/store_timestamps_command.h"
-#include "chrome/browser/sync/engine/syncer_types.h"
-#include "chrome/browser/sync/engine/syncproto.h"
-#include "chrome/browser/sync/engine/verify_updates_command.h"
-#include "chrome/browser/sync/syncable/syncable-inl.h"
-#include "chrome/browser/sync/syncable/syncable.h"
-
-using base::Time;
-using base::TimeDelta;
-using sync_pb::ClientCommand;
-using syncable::Blob;
-using syncable::IS_UNAPPLIED_UPDATE;
-using syncable::SERVER_CTIME;
-using syncable::SERVER_IS_DEL;
-using syncable::SERVER_IS_DIR;
-using syncable::SERVER_MTIME;
-using syncable::SERVER_NON_UNIQUE_NAME;
-using syncable::SERVER_PARENT_ID;
-using syncable::SERVER_POSITION_IN_PARENT;
-using syncable::SERVER_SPECIFICS;
-using syncable::SERVER_VERSION;
-using syncable::SYNCER;
-using syncable::WriteTransaction;
-
-namespace browser_sync {
-
-using sessions::ScopedSessionContextConflictResolver;
-using sessions::StatusController;
-using sessions::SyncSession;
-using sessions::ConflictProgress;
-
-#define ENUM_CASE(x) case x: return #x
-const char* SyncerStepToString(const SyncerStep step)
-{
- switch (step) {
- ENUM_CASE(SYNCER_BEGIN);
- ENUM_CASE(CLEANUP_DISABLED_TYPES);
- ENUM_CASE(DOWNLOAD_UPDATES);
- ENUM_CASE(PROCESS_CLIENT_COMMAND);
- ENUM_CASE(VERIFY_UPDATES);
- ENUM_CASE(PROCESS_UPDATES);
- ENUM_CASE(STORE_TIMESTAMPS);
- ENUM_CASE(APPLY_UPDATES);
- ENUM_CASE(BUILD_COMMIT_REQUEST);
- ENUM_CASE(POST_COMMIT_MESSAGE);
- ENUM_CASE(PROCESS_COMMIT_RESPONSE);
- ENUM_CASE(RESOLVE_CONFLICTS);
- ENUM_CASE(APPLY_UPDATES_TO_RESOLVE_CONFLICTS);
- ENUM_CASE(CLEAR_PRIVATE_DATA);
- ENUM_CASE(SYNCER_END);
- }
- NOTREACHED();
- return "";
-}
-#undef ENUM_CASE
-
-Syncer::Syncer()
- : early_exit_requested_(false) {
-}
-
-Syncer::~Syncer() {}
-
-bool Syncer::ExitRequested() {
- base::AutoLock lock(early_exit_requested_lock_);
- return early_exit_requested_;
-}
-
-void Syncer::RequestEarlyExit() {
- base::AutoLock lock(early_exit_requested_lock_);
- early_exit_requested_ = true;
-}
-
-void Syncer::SyncShare(sessions::SyncSession* session,
- SyncerStep first_step,
- SyncerStep last_step) {
- ScopedSessionContextConflictResolver scoped(session->context(),
- &resolver_);
- session->mutable_status_controller()->UpdateStartTime();
- SyncerStep current_step = first_step;
-
- SyncerStep next_step = current_step;
- while (!ExitRequested()) {
- TRACE_EVENT1("sync", "SyncerStateMachine",
- "state", SyncerStepToString(current_step));
- DVLOG(1) << "Syncer step:" << SyncerStepToString(current_step);
-
- switch (current_step) {
- case SYNCER_BEGIN:
- // This isn't perfect, as we can end up bundling extensions activity
- // intended for the next session into the current one. We could do a
- // test-and-reset as with the source, but note that also falls short if
- // the commit request fails (e.g. due to lost connection), as we will
- // fall all the way back to the syncer thread main loop in that case,
- // creating a new session when a connection is established, losing the
- // records set here on the original attempt. This should provide us
- // with the right data "most of the time", and we're only using this
- // for analysis purposes, so Law of Large Numbers FTW.
- session->context()->extensions_monitor()->GetAndClearRecords(
- session->mutable_extensions_activity());
- session->context()->PruneUnthrottledTypes(base::TimeTicks::Now());
- session->SendEventNotification(SyncEngineEvent::SYNC_CYCLE_BEGIN);
-
- next_step = CLEANUP_DISABLED_TYPES;
- break;
- case CLEANUP_DISABLED_TYPES: {
- CleanupDisabledTypesCommand cleanup;
- cleanup.Execute(session);
- next_step = DOWNLOAD_UPDATES;
- break;
- }
- case DOWNLOAD_UPDATES: {
- // TODO(akalin): We may want to propagate this switch up
- // eventually.
-#if defined(OS_ANDROID)
- const bool kCreateMobileBookmarksFolder = true;
-#else
- const bool kCreateMobileBookmarksFolder = false;
-#endif
- DownloadUpdatesCommand download_updates(kCreateMobileBookmarksFolder);
- session->mutable_status_controller()->set_last_download_updates_result(
- download_updates.Execute(session));
- next_step = PROCESS_CLIENT_COMMAND;
- break;
- }
- case PROCESS_CLIENT_COMMAND: {
- ProcessClientCommand(session);
- next_step = VERIFY_UPDATES;
- break;
- }
- case VERIFY_UPDATES: {
- VerifyUpdatesCommand verify_updates;
- verify_updates.Execute(session);
- next_step = PROCESS_UPDATES;
- break;
- }
- case PROCESS_UPDATES: {
- ProcessUpdatesCommand process_updates;
- process_updates.Execute(session);
- next_step = STORE_TIMESTAMPS;
- break;
- }
- case STORE_TIMESTAMPS: {
- StoreTimestampsCommand store_timestamps;
- store_timestamps.Execute(session);
- // We should download all of the updates before attempting to process
- // them.
- if (session->status_controller().ServerSaysNothingMoreToDownload() ||
- !session->status_controller().download_updates_succeeded()) {
- next_step = APPLY_UPDATES;
- } else {
- next_step = DOWNLOAD_UPDATES;
- }
- break;
- }
- case APPLY_UPDATES: {
- ApplyUpdatesCommand apply_updates;
- apply_updates.Execute(session);
- if (last_step == APPLY_UPDATES) {
- // We're in configuration mode, but we still need to run the
- // SYNCER_END step.
- last_step = SYNCER_END;
- next_step = SYNCER_END;
- } else {
- next_step = BUILD_COMMIT_REQUEST;
- }
- break;
- }
- // These two steps are combined since they are executed within the same
- // write transaction.
- case BUILD_COMMIT_REQUEST: {
- syncable::Directory* dir = session->context()->directory();
- WriteTransaction trans(FROM_HERE, SYNCER, dir);
- sessions::ScopedSetSessionWriteTransaction set_trans(session, &trans);
-
- DVLOG(1) << "Getting the Commit IDs";
- GetCommitIdsCommand get_commit_ids_command(
- session->context()->max_commit_batch_size());
- get_commit_ids_command.Execute(session);
-
- if (!session->status_controller().commit_ids().empty()) {
- DVLOG(1) << "Building a commit message";
- BuildCommitCommand build_commit_command;
- build_commit_command.Execute(session);
-
- next_step = POST_COMMIT_MESSAGE;
- } else {
- next_step = RESOLVE_CONFLICTS;
- }
-
- break;
- }
- case POST_COMMIT_MESSAGE: {
- PostCommitMessageCommand post_commit_command;
- session->mutable_status_controller()->set_last_post_commit_result(
- post_commit_command.Execute(session));
- next_step = PROCESS_COMMIT_RESPONSE;
- break;
- }
- case PROCESS_COMMIT_RESPONSE: {
- ProcessCommitResponseCommand process_response_command;
- session->mutable_status_controller()->
- set_last_process_commit_response_result(
- process_response_command.Execute(session));
- next_step = RESOLVE_CONFLICTS;
- break;
- }
- case RESOLVE_CONFLICTS: {
- StatusController* status = session->mutable_status_controller();
- status->reset_conflicts_resolved();
- ResolveConflictsCommand resolve_conflicts_command;
- resolve_conflicts_command.Execute(session);
-
- // Has ConflictingUpdates includes both resolvable and unresolvable
- // conflicts. If we have either, we want to attempt to reapply.
- if (status->HasConflictingUpdates())
- next_step = APPLY_UPDATES_TO_RESOLVE_CONFLICTS;
- else
- next_step = SYNCER_END;
- break;
- }
- case APPLY_UPDATES_TO_RESOLVE_CONFLICTS: {
- StatusController* status = session->mutable_status_controller();
- DVLOG(1) << "Applying updates to resolve conflicts";
- ApplyUpdatesCommand apply_updates;
-
- // We only care to resolve conflicts again if we made progress on the
- // simple conflicts.
- int before_blocking_conflicting_updates =
- status->TotalNumSimpleConflictingItems();
- apply_updates.Execute(session);
- int after_blocking_conflicting_updates =
- status->TotalNumSimpleConflictingItems();
- // If the following call sets the conflicts_resolved value to true,
- // SyncSession::HasMoreToSync() will send us into another sync cycle
- // after this one completes.
- //
- // TODO(rlarocque, 109072): Make conflict resolution not require
- // extra sync cycles/GetUpdates.
- status->update_conflicts_resolved(before_blocking_conflicting_updates >
- after_blocking_conflicting_updates);
- next_step = SYNCER_END;
- break;
- }
- case CLEAR_PRIVATE_DATA: {
- ClearDataCommand clear_data_command;
- clear_data_command.Execute(session);
- next_step = SYNCER_END;
- break;
- }
- case SYNCER_END: {
- session->SendEventNotification(SyncEngineEvent::SYNC_CYCLE_ENDED);
- next_step = SYNCER_END;
- break;
- }
- default:
- LOG(ERROR) << "Unknown command: " << current_step;
- }
- DVLOG(2) << "last step: " << SyncerStepToString(last_step) << ", "
- << "current step: " << SyncerStepToString(current_step) << ", "
- << "next step: " << SyncerStepToString(next_step) << ", "
- << "snapshot: " << session->TakeSnapshot().ToString();
- if (last_step == current_step)
- break;
- current_step = next_step;
- }
-}
-
-void Syncer::ProcessClientCommand(sessions::SyncSession* session) {
- const ClientToServerResponse& response =
- session->status_controller().updates_response();
- if (!response.has_client_command())
- return;
- const ClientCommand& command = response.client_command();
-
- // The server limits the number of items a client can commit in one batch.
- if (command.has_max_commit_batch_size()) {
- session->context()->set_max_commit_batch_size(
- command.max_commit_batch_size());
- }
- if (command.has_set_sync_long_poll_interval()) {
- session->delegate()->OnReceivedLongPollIntervalUpdate(
- TimeDelta::FromSeconds(command.set_sync_long_poll_interval()));
- }
- if (command.has_set_sync_poll_interval()) {
- session->delegate()->OnReceivedShortPollIntervalUpdate(
- TimeDelta::FromSeconds(command.set_sync_poll_interval()));
- }
-
- if (command.has_sessions_commit_delay_seconds()) {
- session->delegate()->OnReceivedSessionsCommitDelay(
- TimeDelta::FromSeconds(command.sessions_commit_delay_seconds()));
- }
-}
-
-void CopyServerFields(syncable::Entry* src, syncable::MutableEntry* dest) {
- dest->Put(SERVER_NON_UNIQUE_NAME, src->Get(SERVER_NON_UNIQUE_NAME));
- dest->Put(SERVER_PARENT_ID, src->Get(SERVER_PARENT_ID));
- dest->Put(SERVER_MTIME, src->Get(SERVER_MTIME));
- dest->Put(SERVER_CTIME, src->Get(SERVER_CTIME));
- dest->Put(SERVER_VERSION, src->Get(SERVER_VERSION));
- dest->Put(SERVER_IS_DIR, src->Get(SERVER_IS_DIR));
- dest->Put(SERVER_IS_DEL, src->Get(SERVER_IS_DEL));
- dest->Put(IS_UNAPPLIED_UPDATE, src->Get(IS_UNAPPLIED_UPDATE));
- dest->Put(SERVER_SPECIFICS, src->Get(SERVER_SPECIFICS));
- dest->Put(SERVER_POSITION_IN_PARENT, src->Get(SERVER_POSITION_IN_PARENT));
-}
-
-void ClearServerData(syncable::MutableEntry* entry) {
- entry->Put(SERVER_NON_UNIQUE_NAME, "");
- entry->Put(SERVER_PARENT_ID, syncable::GetNullId());
- entry->Put(SERVER_MTIME, Time());
- entry->Put(SERVER_CTIME, Time());
- entry->Put(SERVER_VERSION, 0);
- entry->Put(SERVER_IS_DIR, false);
- entry->Put(SERVER_IS_DEL, false);
- entry->Put(IS_UNAPPLIED_UPDATE, false);
- entry->Put(SERVER_SPECIFICS, sync_pb::EntitySpecifics::default_instance());
- entry->Put(SERVER_POSITION_IN_PARENT, 0);
-}
-
-} // namespace browser_sync
« no previous file with comments | « chrome/browser/sync/engine/syncer.h ('k') | chrome/browser/sync/engine/syncer_command.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698