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

Unified Diff: sync/sessions/sync_session.cc

Issue 10537032: [Sync] Fix sync scheduler/session logic determining successful commands. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove comment Created 8 years, 6 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/sessions/sync_session.h ('k') | sync/sessions/test_util.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sync/sessions/sync_session.cc
diff --git a/sync/sessions/sync_session.cc b/sync/sessions/sync_session.cc
index 85ac8ccd7b72b6785191bc3915ae544f96420bd4..e219412d34e1e5546767edf04433d269383b5596 100644
--- a/sync/sessions/sync_session.cc
+++ b/sync/sessions/sync_session.cc
@@ -59,7 +59,8 @@ SyncSession::SyncSession(SyncSessionContext* context, Delegate* delegate,
delegate_(delegate),
workers_(workers),
routing_info_(routing_info),
- enabled_groups_(ComputeEnabledGroups(routing_info_, workers_)) {
+ enabled_groups_(ComputeEnabledGroups(routing_info_, workers_)),
+ finished_(false) {
status_controller_.reset(new StatusController(routing_info_));
std::sort(workers_.begin(), workers_.end());
}
@@ -127,6 +128,7 @@ void SyncSession::RebaseRoutingInfoWithLatest(const SyncSession& session) {
}
void SyncSession::PrepareForAnotherSyncCycle() {
+ finished_ = false;
source_.updates_source =
sync_pb::GetUpdatesCallerInfo::SYNC_CYCLE_CONTINUATION;
status_controller_.reset(new StatusController(routing_info_));
@@ -226,21 +228,41 @@ namespace {
// successfully.
//
bool IsError(SyncerError error) {
- return error != UNSET
- && error != SYNCER_OK;
+ return error != UNSET && error != SYNCER_OK;
}
-} // namespace
-bool SyncSession::Succeeded() const {
+// Returns false iff one of the command results had an error.
+bool HadErrors(const ErrorCounters& error) {
const bool download_updates_error =
- IsError(status_controller_->error().last_download_updates_result);
- const bool post_commit_error =
- IsError(status_controller_->error().last_post_commit_result);
+ IsError(error.last_download_updates_result);
+ const bool post_commit_error = IsError(error.last_post_commit_result);
const bool process_commit_response_error =
- IsError(status_controller_->error().last_process_commit_response_result);
- return !download_updates_error
- && !post_commit_error
- && !process_commit_response_error;
+ IsError(error.last_process_commit_response_result);
+ return download_updates_error ||
+ post_commit_error ||
+ process_commit_response_error;
+}
+} // namespace
+
+bool SyncSession::Succeeded() const {
+ const ErrorCounters& error = status_controller_->error();
+ return finished_ && !HadErrors(error);
+}
+
+bool SyncSession::SuccessfullyReachedServer() const {
+ const ErrorCounters& error = status_controller_->error();
+ bool reached_server = error.last_download_updates_result == SYNCER_OK ||
+ error.last_post_commit_result == SYNCER_OK ||
+ error.last_process_commit_response_result == SYNCER_OK;
+ // It's possible that we reached the server on one attempt, then had an error
+ // on the next (or didn't perform some of the server-communicating commands).
+ // We want to verify that, for all commands attempted, we successfully spoke
+ // with the server. Therefore, we verify no errors and at least one SYNCER_OK.
+ return reached_server && !HadErrors(error);
+}
+
+void SyncSession::SetFinished() {
+ finished_ = true;
}
} // namespace sessions
« no previous file with comments | « sync/sessions/sync_session.h ('k') | sync/sessions/test_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698