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

Unified Diff: sync/engine/process_commit_response_command.cc

Issue 25638003: sync: Implement per-type commit interface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compile warning Created 7 years, 3 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
Index: sync/engine/process_commit_response_command.cc
diff --git a/sync/engine/process_commit_response_command.cc b/sync/engine/process_commit_response_command.cc
index 97f403f795f7f8750e0b77625cb489ee8b120135..1cb06bd4ae160ff82b7a5aa08302af78924c2bd5 100644
--- a/sync/engine/process_commit_response_command.cc
+++ b/sync/engine/process_commit_response_command.cc
@@ -30,7 +30,6 @@ using sync_pb::CommitResponse;
namespace syncer {
-using sessions::OrderedCommitSet;
using sessions::StatusController;
using sessions::SyncSession;
using syncable::ModelNeutralWriteTransaction;
@@ -51,93 +50,6 @@ using syncable::SERVER_VERSION;
using syncable::SYNCER;
using syncable::SYNCING;
-ProcessCommitResponseCommand::ProcessCommitResponseCommand(
- const sessions::OrderedCommitSet& commit_set,
- const sync_pb::ClientToServerMessage& commit_message,
- const sync_pb::ClientToServerResponse& commit_response)
- : commit_set_(commit_set),
- commit_message_(commit_message),
- commit_response_(commit_response) {
-}
-
-ProcessCommitResponseCommand::~ProcessCommitResponseCommand() {}
-
-SyncerError ProcessCommitResponseCommand::ExecuteImpl(SyncSession* session) {
- syncable::Directory* dir = session->context()->directory();
- StatusController* status = session->mutable_status_controller();
- const CommitResponse& cr = commit_response_.commit();
- const sync_pb::CommitMessage& commit_message = commit_message_.commit();
-
- int transient_error_commits = 0;
- int conflicting_commits = 0;
- int error_commits = 0;
- int successes = 0;
-
- set<syncable::Id> deleted_folders;
-
- { // Scope for ModelNeutralWriteTransaction.
- ModelNeutralWriteTransaction trans(FROM_HERE, SYNCER, dir);
- for (size_t i = 0; i < commit_set_.Size(); i++) {
- CommitResponse::ResponseType response_type = ProcessSingleCommitResponse(
- &trans,
- cr.entryresponse(i),
- commit_message.entries(i),
- commit_set_.GetCommitHandleAt(i),
- &deleted_folders);
- switch (response_type) {
- case CommitResponse::INVALID_MESSAGE:
- ++error_commits;
- break;
- case CommitResponse::CONFLICT:
- ++conflicting_commits;
- status->increment_num_server_conflicts();
- break;
- case CommitResponse::SUCCESS:
- // TODO(sync): worry about sync_rate_ rate calc?
- ++successes;
- if (commit_set_.GetModelTypeAt(i) == BOOKMARKS)
- status->increment_num_successful_bookmark_commits();
- status->increment_num_successful_commits();
- break;
- case CommitResponse::OVER_QUOTA:
- // We handle over quota like a retry, which is same as transient.
- case CommitResponse::RETRY:
- case CommitResponse::TRANSIENT_ERROR:
- ++transient_error_commits;
- break;
- default:
- LOG(FATAL) << "Bad return from ProcessSingleCommitResponse";
- }
- }
-
- MarkDeletedChildrenSynced(dir, &trans, &deleted_folders);
- }
-
- int commit_count = static_cast<int>(commit_set_.Size());
- if (commit_count == successes) {
- return SYNCER_OK;
- } else if (error_commits > 0) {
- return SERVER_RETURN_UNKNOWN_ERROR;
- } else if (transient_error_commits > 0) {
- return SERVER_RETURN_TRANSIENT_ERROR;
- } else if (conflicting_commits > 0) {
- // This means that the server already has an item with this version, but
- // we haven't seen that update yet.
- //
- // A well-behaved client should respond to this by proceeding to the
- // download updates phase, fetching the conflicting items, then attempting
- // to resolve the conflict. That's not what this client does.
- //
- // We don't currently have any code to support that exceptional control
- // flow. Instead, we abort the current sync cycle and start a new one. The
- // end result is the same.
- return SERVER_RETURN_CONFLICT;
- } else {
- LOG(FATAL) << "Inconsistent counts when processing commit response";
- return SYNCER_OK;
- }
-}
-
void LogServerError(const sync_pb::CommitResponse_EntryResponse& res) {
if (res.has_error_message())
LOG(WARNING) << " " << res.error_message();

Powered by Google App Engine
This is Rietveld 408576698