Index: sync/engine/update_applicator.cc |
diff --git a/sync/engine/update_applicator.cc b/sync/engine/update_applicator.cc |
index 541b68ca95d9839e6dfb61d1d32636603fa1fb78..e9fcac4070aa9e011bdd0c92f0b01047b4733518 100644 |
--- a/sync/engine/update_applicator.cc |
+++ b/sync/engine/update_applicator.cc |
@@ -8,7 +8,6 @@ |
#include "base/logging.h" |
#include "sync/engine/syncer_util.h" |
-#include "sync/sessions/session_state.h" |
#include "sync/syncable/entry.h" |
#include "sync/syncable/mutable_entry.h" |
#include "sync/syncable/syncable_id.h" |
@@ -25,7 +24,10 @@ UpdateApplicator::UpdateApplicator(Cryptographer* cryptographer, |
ModelSafeGroup group_filter) |
: cryptographer_(cryptographer), |
group_filter_(group_filter), |
- routing_info_(routes) { |
+ routing_info_(routes), |
+ updates_applied_(0), |
+ encryption_conflicts_(0), |
+ hierarchy_conflicts_(0) { |
} |
UpdateApplicator::~UpdateApplicator() { |
@@ -39,22 +41,23 @@ UpdateApplicator::~UpdateApplicator() { |
// making progress, which would indicate that the hierarchy is invalid. |
// |
// The update applicator also has to deal with simple conflicts, which occur |
-// when an item is modified on both the server and the local model, and |
-// encryption conflicts. There's not much we can do about them here, so we |
-// don't bother re-processing them on subsequent passes. |
+// when an item is modified on both the server and the local model. We remember |
+// their IDs so they can be passed to the conflict resolver after all the other |
+// applications are complete. |
+// |
+// Finally, there are encryption conflicts, which can occur when we don't have |
+// access to all the Nigori keys. There's nothing we can do about them here. |
void UpdateApplicator::AttemptApplications( |
syncable::WriteTransaction* trans, |
- const std::vector<int64>& handles, |
- sessions::StatusController* status) { |
+ const std::vector<int64>& handles) { |
std::vector<int64> to_apply = handles; |
- std::set<syncable::Id>* simple_conflict_ids = |
- status->mutable_simple_conflict_ids(); |
DVLOG(1) << "UpdateApplicator running over " << to_apply.size() << " items."; |
while (!to_apply.empty()) { |
std::vector<int64> to_reapply; |
- for (UpdateIterator i = to_apply.begin(); i != to_apply.end(); ++i) { |
+ for (std::vector<int64>::iterator i = to_apply.begin(); |
+ i != to_apply.end(); ++i) { |
syncable::Entry read_entry(trans, syncable::GET_BY_HANDLE, *i); |
if (SkipUpdate(read_entry)) { |
continue; |
@@ -66,13 +69,13 @@ void UpdateApplicator::AttemptApplications( |
switch (result) { |
case SUCCESS: |
- status->increment_num_updates_applied(); |
+ updates_applied_++; |
break; |
case CONFLICT_SIMPLE: |
- simple_conflict_ids->insert(entry.Get(ID)); |
+ simple_conflict_ids_.insert(entry.Get(ID)); |
break; |
case CONFLICT_ENCRYPTION: |
- status->increment_num_encryption_conflicts(); |
+ encryption_conflicts_++; |
break; |
case CONFLICT_HIERARCHY: |
// The decision to classify these as hierarchy conflcits is tentative. |
@@ -88,7 +91,7 @@ void UpdateApplicator::AttemptApplications( |
if (to_reapply.size() == to_apply.size()) { |
// We made no progress. Must be stubborn hierarchy conflicts. |
- status->set_num_hierarchy_conflicts(to_apply.size()); |
+ hierarchy_conflicts_ = to_apply.size(); |
break; |
} |