| Index: chrome/browser/sync/engine/process_commit_response_command.cc
|
| diff --git a/chrome/browser/sync/engine/process_commit_response_command.cc b/chrome/browser/sync/engine/process_commit_response_command.cc
|
| index a4c3291e041101184f59b8bb64db0d600eef49c2..395088017e2b33762ba6c5eebbfc8e44d3f27240 100644
|
| --- a/chrome/browser/sync/engine/process_commit_response_command.cc
|
| +++ b/chrome/browser/sync/engine/process_commit_response_command.cc
|
| @@ -81,13 +81,13 @@ std::set<ModelSafeGroup> ProcessCommitResponseCommand::GetGroupsToChange(
|
| return groups_with_commits;
|
| }
|
|
|
| -bool ProcessCommitResponseCommand::ModelNeutralExecuteImpl(
|
| +SyncerError ProcessCommitResponseCommand::ModelNeutralExecuteImpl(
|
| sessions::SyncSession* session) {
|
| ScopedDirLookup dir(session->context()->directory_manager(),
|
| session->context()->account_name());
|
| if (!dir.good()) {
|
| LOG(ERROR) << "Scoped dir lookup failed!";
|
| - return false;
|
| + return DIRECTORY_LOOKUP_FAILED;
|
| }
|
|
|
| const StatusController& status = session->status_controller();
|
| @@ -98,7 +98,7 @@ bool ProcessCommitResponseCommand::ModelNeutralExecuteImpl(
|
| // TODO(sync): What if we didn't try to commit anything?
|
| LOG(WARNING) << "Commit response has no commit body!";
|
| IncrementErrorCounters(session->mutable_status_controller());
|
| - return false;
|
| + return SERVER_RESPONSE_VALIDATION_FAILED;
|
| }
|
|
|
| const CommitResponse& cr = response.commit();
|
| @@ -113,14 +113,14 @@ bool ProcessCommitResponseCommand::ModelNeutralExecuteImpl(
|
| LOG(ERROR) << " " << cr.entryresponse(i).error_message();
|
| }
|
| IncrementErrorCounters(session->mutable_status_controller());
|
| - return false;
|
| + return SERVER_RESPONSE_VALIDATION_FAILED;
|
| }
|
| - return true;
|
| + return NO_ERROR;
|
| }
|
|
|
| -void ProcessCommitResponseCommand::ModelChangingExecuteImpl(
|
| +SyncerError ProcessCommitResponseCommand::ModelChangingExecuteImpl(
|
| SyncSession* session) {
|
| - ProcessCommitResponse(session);
|
| + SyncerError result = ProcessCommitResponse(session);
|
| ExtensionsActivityMonitor* monitor = session->context()->extensions_monitor();
|
| if (session->status_controller().HasBookmarkCommitActivity() &&
|
| session->status_controller().syncer_status()
|
| @@ -128,17 +128,16 @@ void ProcessCommitResponseCommand::ModelChangingExecuteImpl(
|
| monitor->PutRecords(session->extensions_activity());
|
| session->mutable_extensions_activity()->clear();
|
| }
|
| + return result;
|
| }
|
|
|
| -void ProcessCommitResponseCommand::ProcessCommitResponse(
|
| +SyncerError ProcessCommitResponseCommand::ProcessCommitResponse(
|
| SyncSession* session) {
|
| - // TODO(sync): This function returns if it sees problems. We probably want
|
| - // to flag the need for an update or similar.
|
| ScopedDirLookup dir(session->context()->directory_manager(),
|
| session->context()->account_name());
|
| if (!dir.good()) {
|
| LOG(ERROR) << "Scoped dir lookup failed!";
|
| - return;
|
| + return DIRECTORY_LOOKUP_FAILED;
|
| }
|
|
|
| StatusController* status = session->mutable_status_controller();
|
| @@ -189,10 +188,6 @@ void ProcessCommitResponseCommand::ProcessCommitResponse(
|
| // We handle over quota like a retry, which is same as transient.
|
| case CommitResponse::RETRY:
|
| case CommitResponse::TRANSIENT_ERROR:
|
| - // TODO(tim): Now that we have SyncSession::Delegate, we
|
| - // should plumb this directly for exponential backoff purposes rather
|
| - // than trying to infer from HasMoreToSync(). See
|
| - // SyncerThread::CalculatePollingWaitTime.
|
| ++transient_error_commits;
|
| break;
|
| default:
|
| @@ -202,6 +197,7 @@ void ProcessCommitResponseCommand::ProcessCommitResponse(
|
| }
|
|
|
| // TODO(sync): move status reporting elsewhere.
|
| + int commit_count = static_cast<int>(proj.size());
|
| status->increment_num_conflicting_commits_by(conflicting_commits);
|
| if (0 == successes) {
|
| status->increment_num_consecutive_transient_error_commits_by(
|
| @@ -211,14 +207,26 @@ void ProcessCommitResponseCommand::ProcessCommitResponse(
|
| status->set_num_consecutive_transient_error_commits(0);
|
| status->set_num_consecutive_errors(0);
|
| }
|
| - int commit_count = static_cast<int>(proj.size());
|
| if (commit_count != (conflicting_commits + error_commits +
|
| transient_error_commits)) {
|
| ResetErrorCounters(status);
|
| }
|
| SyncerUtil::MarkDeletedChildrenSynced(dir, &deleted_folders);
|
|
|
| - return;
|
| + if (commit_count == (successes + conflicting_commits)) {
|
| + // We consider conflicting commits as a success because things will work out
|
| + // on their own when we receive them. Flags will be set so that
|
| + // HasMoreToSync() will cause SyncScheduler to enter another sync cycle to
|
| + // handle this condition.
|
| + return NO_ERROR;
|
| + } else if (error_commits > 0) {
|
| + return SERVER_RETURN_UNKNOWN_ERROR;
|
| + } else if (transient_error_commits > 0) {
|
| + return SERVER_RETURN_TRANSIENT_ERROR;
|
| + } else {
|
| + LOG(FATAL) << "Inconsistent counts when processing commit response";
|
| + return NO_ERROR;
|
| + }
|
| }
|
|
|
| void LogServerError(const CommitResponse_EntryResponse& res) {
|
|
|