summaryrefslogtreecommitdiffstats
path: root/sync/engine
diff options
context:
space:
mode:
Diffstat (limited to 'sync/engine')
-rw-r--r--sync/engine/apply_updates_command.cc3
-rw-r--r--sync/engine/apply_updates_command_unittest.cc158
-rw-r--r--sync/engine/process_updates_command.cc3
-rw-r--r--sync/engine/update_applicator.cc69
-rw-r--r--sync/engine/update_applicator.h35
5 files changed, 57 insertions, 211 deletions
diff --git a/sync/engine/apply_updates_command.cc b/sync/engine/apply_updates_command.cc
index e43f071..bff83f2 100644
--- a/sync/engine/apply_updates_command.cc
+++ b/sync/engine/apply_updates_command.cc
@@ -71,9 +71,6 @@ SyncerError ApplyUpdatesCommand::ModelChangingExecuteImpl(
session->status_controller().group_restriction());
applicator.AttemptApplications(&trans, handles,
session->mutable_status_controller());
- applicator.SaveProgressIntoSessionState(
- session->mutable_status_controller()->mutable_simple_conflict_ids(),
- session->mutable_status_controller()->mutable_update_progress());
// This might be the first time we've fully completed a sync cycle, for
// some subset of the currently synced datatypes.
diff --git a/sync/engine/apply_updates_command_unittest.cc b/sync/engine/apply_updates_command_unittest.cc
index 01ddd93..b261c1d 100644
--- a/sync/engine/apply_updates_command_unittest.cc
+++ b/sync/engine/apply_updates_command_unittest.cc
@@ -81,19 +81,14 @@ TEST_F(ApplyUpdatesCommandTest, Simple) {
ExpectGroupToChange(apply_updates_command_, GROUP_UI);
apply_updates_command_.ExecuteImpl(session());
- sessions::StatusController* status = session()->mutable_status_controller();
-
- EXPECT_EQ(0, status->num_simple_conflicts())
+ const sessions::StatusController& status = session()->status_controller();
+ EXPECT_EQ(0, status.num_simple_conflicts())
<< "Simple update shouldn't result in conflicts";
- EXPECT_EQ(0, status->num_encryption_conflicts())
+ EXPECT_EQ(0, status.num_encryption_conflicts())
<< "Simple update shouldn't result in conflicts";
- EXPECT_EQ(0, status->num_hierarchy_conflicts())
+ EXPECT_EQ(0, status.num_hierarchy_conflicts())
<< "Simple update shouldn't result in conflicts";
- sessions::ScopedModelSafeGroupRestriction r(status, GROUP_UI);
- ASSERT_TRUE(status->update_progress());
- EXPECT_EQ(2, status->update_progress()->AppliedUpdatesSize())
- << "All updates should have been attempted";
- EXPECT_EQ(2, status->update_progress()->SuccessfullyAppliedUpdateCount())
+ EXPECT_EQ(2, status.num_updates_applied())
<< "All items should have been successfully applied";
}
@@ -115,14 +110,10 @@ TEST_F(ApplyUpdatesCommandTest, UpdateWithChildrenBeforeParents) {
ExpectGroupToChange(apply_updates_command_, GROUP_UI);
apply_updates_command_.ExecuteImpl(session());
- sessions::StatusController* status = session()->mutable_status_controller();
- EXPECT_EQ(0, status->num_simple_conflicts())
+ const sessions::StatusController& status = session()->status_controller();
+ EXPECT_EQ(0, status.num_simple_conflicts())
<< "Simple update shouldn't result in conflicts, even if out-of-order";
- sessions::ScopedModelSafeGroupRestriction r(status, GROUP_UI);
- ASSERT_TRUE(status->update_progress());
- EXPECT_EQ(5, status->update_progress()->AppliedUpdatesSize())
- << "All updates should have been attempted";
- EXPECT_EQ(5, status->update_progress()->SuccessfullyAppliedUpdateCount())
+ EXPECT_EQ(5, status.num_updates_applied())
<< "All updates should have been successfully applied";
}
@@ -136,8 +127,8 @@ TEST_F(ApplyUpdatesCommandTest, SimpleConflict) {
ExpectGroupToChange(apply_updates_command_, GROUP_UI);
apply_updates_command_.ExecuteImpl(session());
- sessions::StatusController* status = session()->mutable_status_controller();
- EXPECT_EQ(1, status->num_simple_conflicts())
+ const sessions::StatusController& status = session()->status_controller();
+ EXPECT_EQ(1, status.num_simple_conflicts())
<< "Unsynced and unapplied item should be a simple conflict";
}
@@ -164,15 +155,12 @@ TEST_F(ApplyUpdatesCommandTest, HierarchyAndSimpleConflict) {
ExpectGroupToChange(apply_updates_command_, GROUP_UI);
apply_updates_command_.ExecuteImpl(session());
- sessions::StatusController* status = session()->mutable_status_controller();
+ const sessions::StatusController& status = session()->status_controller();
// An update that is both a simple conflict and a hierarchy conflict should be
// treated as a hierarchy conflict.
- EXPECT_EQ(1, status->num_hierarchy_conflicts());
- EXPECT_EQ(0, status->num_simple_conflicts());
-
- sessions::ScopedModelSafeGroupRestriction r(status, GROUP_UI);
- EXPECT_EQ(1, status->update_progress()->AppliedUpdatesSize());
+ EXPECT_EQ(1, status.num_hierarchy_conflicts());
+ EXPECT_EQ(0, status.num_simple_conflicts());
}
@@ -210,14 +198,11 @@ TEST_F(ApplyUpdatesCommandTest, HierarchyConflictDirectoryLoop) {
ExpectGroupToChange(apply_updates_command_, GROUP_UI);
apply_updates_command_.ExecuteImpl(session());
- sessions::StatusController* status = session()->mutable_status_controller();
+ const sessions::StatusController& status = session()->status_controller();
// This should count as a hierarchy conflict.
- EXPECT_EQ(1, status->num_hierarchy_conflicts());
- EXPECT_EQ(0, status->num_simple_conflicts());
-
- sessions::ScopedModelSafeGroupRestriction r(status, GROUP_UI);
- EXPECT_EQ(1, status->update_progress()->AppliedUpdatesSize());
+ EXPECT_EQ(1, status.num_hierarchy_conflicts());
+ EXPECT_EQ(0, status.num_simple_conflicts());
}
// Runs the ApplyUpdatesCommand on a directory where the server sent us an
@@ -247,9 +232,9 @@ TEST_F(ApplyUpdatesCommandTest, HierarchyConflictDeletedParent) {
ExpectGroupToChange(apply_updates_command_, GROUP_UI);
apply_updates_command_.ExecuteImpl(session());
- sessions::StatusController* status = session()->mutable_status_controller();
- EXPECT_EQ(1, status->num_hierarchy_conflicts());
- EXPECT_EQ(0, status->num_simple_conflicts());
+ const sessions::StatusController& status = session()->status_controller();
+ EXPECT_EQ(1, status.num_hierarchy_conflicts());
+ EXPECT_EQ(0, status.num_simple_conflicts());
}
// Runs the ApplyUpdatesCommand on a directory where the server is trying to
@@ -285,10 +270,10 @@ TEST_F(ApplyUpdatesCommandTest, HierarchyConflictDeleteNonEmptyDirectory) {
ExpectGroupToChange(apply_updates_command_, GROUP_UI);
apply_updates_command_.ExecuteImpl(session());
- sessions::StatusController* status = session()->mutable_status_controller();
+ const sessions::StatusController& status = session()->status_controller();
// This should count as a hierarchy conflict.
- EXPECT_EQ(1, status->num_hierarchy_conflicts());
- EXPECT_EQ(0, status->num_simple_conflicts());
+ EXPECT_EQ(1, status.num_hierarchy_conflicts());
+ EXPECT_EQ(0, status.num_simple_conflicts());
}
// Runs the ApplyUpdatesCommand on a server-created item that has a locally
@@ -304,19 +289,13 @@ TEST_F(ApplyUpdatesCommandTest, HierarchyConflictUnknownParent) {
ExpectGroupToChange(apply_updates_command_, GROUP_UI);
apply_updates_command_.ExecuteImpl(session());
- sessions::StatusController* status = session()->mutable_status_controller();
-
- EXPECT_EQ(0, status->num_simple_conflicts())
+ const sessions::StatusController& status = session()->status_controller();
+ EXPECT_EQ(0, status.num_simple_conflicts())
<< "Updates with unknown parent should not be treated as 'simple'"
<< " conflicts";
- EXPECT_EQ(2, status->num_hierarchy_conflicts())
+ EXPECT_EQ(2, status.num_hierarchy_conflicts())
<< "All updates with an unknown ancestors should be in conflict";
-
- sessions::ScopedModelSafeGroupRestriction r(status, GROUP_UI);
- ASSERT_TRUE(status->update_progress());
- EXPECT_EQ(2, status->update_progress()->AppliedUpdatesSize())
- << "All updates should have been attempted";
- EXPECT_EQ(0, status->update_progress()->SuccessfullyAppliedUpdateCount())
+ EXPECT_EQ(0, status.num_updates_applied())
<< "No item with an unknown ancestor should be applied";
}
@@ -339,16 +318,10 @@ TEST_F(ApplyUpdatesCommandTest, ItemsBothKnownAndUnknown) {
ExpectGroupToChange(apply_updates_command_, GROUP_UI);
apply_updates_command_.ExecuteImpl(session());
- sessions::StatusController* status = session()->mutable_status_controller();
-
- EXPECT_EQ(2, status->num_hierarchy_conflicts())
+ const sessions::StatusController& status = session()->status_controller();
+ EXPECT_EQ(2, status.num_hierarchy_conflicts())
<< "The updates with unknown ancestors should be in conflict";
-
- sessions::ScopedModelSafeGroupRestriction r(status, GROUP_UI);
- ASSERT_TRUE(status->update_progress());
- EXPECT_EQ(6, status->update_progress()->AppliedUpdatesSize())
- << "All updates should have been attempted";
- EXPECT_EQ(4, status->update_progress()->SuccessfullyAppliedUpdateCount())
+ EXPECT_EQ(4, status.num_updates_applied())
<< "The updates with known ancestors should be successfully applied";
}
@@ -376,16 +349,10 @@ TEST_F(ApplyUpdatesCommandTest, DecryptablePassword) {
ExpectGroupToChange(apply_updates_command_, GROUP_PASSWORD);
apply_updates_command_.ExecuteImpl(session());
- sessions::StatusController* status = session()->mutable_status_controller();
-
- EXPECT_EQ(0, status->num_simple_conflicts())
+ const sessions::StatusController& status = session()->status_controller();
+ EXPECT_EQ(0, status.num_simple_conflicts())
<< "No update should be in conflict because they're all decryptable";
-
- sessions::ScopedModelSafeGroupRestriction r(status, GROUP_PASSWORD);
- ASSERT_TRUE(status->update_progress());
- EXPECT_EQ(1, status->update_progress()->AppliedUpdatesSize())
- << "All updates should have been attempted";
- EXPECT_EQ(1, status->update_progress()->SuccessfullyAppliedUpdateCount())
+ EXPECT_EQ(1, status.num_updates_applied())
<< "The updates that can be decrypted should be applied";
}
@@ -405,30 +372,16 @@ TEST_F(ApplyUpdatesCommandTest, UndecryptableData) {
ExpectGroupsToChange(apply_updates_command_, GROUP_UI, GROUP_PASSWORD);
apply_updates_command_.ExecuteImpl(session());
- sessions::StatusController* status = session()->mutable_status_controller();
- EXPECT_TRUE(status->HasConflictingUpdates())
- << "Updates that can't be decrypted should trigger the syncer to have "
- << "conflicting updates.";
- EXPECT_EQ(0, status->num_simple_conflicts())
+ const sessions::StatusController& status = session()->status_controller();
+ EXPECT_TRUE(status.HasConflictingUpdates())
+ << "Updates that can't be decrypted should trigger the syncer to have "
+ << "conflicting updates.";
+ EXPECT_EQ(0, status.num_simple_conflicts())
<< "Updates that can't be decrypted should not be in regular conflict";
- EXPECT_EQ(3, status->num_encryption_conflicts())
+ EXPECT_EQ(3, status.num_encryption_conflicts())
<< "Updates that can't be decrypted should be in encryption conflict";
- {
- sessions::ScopedModelSafeGroupRestriction r(status, GROUP_UI);
- ASSERT_TRUE(status->update_progress());
- EXPECT_EQ(2, status->update_progress()->AppliedUpdatesSize())
- << "All updates should have been attempted";
- EXPECT_EQ(0, status->update_progress()->SuccessfullyAppliedUpdateCount())
- << "No update that can't be decrypted should be applied";
- }
- {
- sessions::ScopedModelSafeGroupRestriction r(status, GROUP_PASSWORD);
- ASSERT_TRUE(status->update_progress());
- EXPECT_EQ(1, status->update_progress()->AppliedUpdatesSize())
- << "All updates should have been attempted";
- EXPECT_EQ(0, status->update_progress()->SuccessfullyAppliedUpdateCount())
- << "No update that can't be decrypted should be applied";
- }
+ EXPECT_EQ(0, status.num_updates_applied())
+ << "No update that can't be decrypted should be applied";
}
TEST_F(ApplyUpdatesCommandTest, SomeUndecryptablePassword) {
@@ -468,25 +421,18 @@ TEST_F(ApplyUpdatesCommandTest, SomeUndecryptablePassword) {
ExpectGroupToChange(apply_updates_command_, GROUP_PASSWORD);
apply_updates_command_.ExecuteImpl(session());
- sessions::StatusController* status = session()->mutable_status_controller();
- EXPECT_TRUE(status->HasConflictingUpdates())
- << "Updates that can't be decrypted should trigger the syncer to have "
- << "conflicting updates.";
- {
- EXPECT_EQ(0, status->num_simple_conflicts())
- << "The updates that can't be decrypted should not be in regular "
- << "conflict";
- EXPECT_EQ(1, status->num_encryption_conflicts())
- << "The updates that can't be decrypted should be in encryption "
- << "conflict";
-
- sessions::ScopedModelSafeGroupRestriction r(status, GROUP_PASSWORD);
- ASSERT_TRUE(status->update_progress());
- EXPECT_EQ(2, status->update_progress()->AppliedUpdatesSize())
- << "All updates should have been attempted";
- EXPECT_EQ(1, status->update_progress()->SuccessfullyAppliedUpdateCount())
- << "The undecryptable password update shouldn't be applied";
- }
+ const sessions::StatusController& status = session()->status_controller();
+ EXPECT_TRUE(status.HasConflictingUpdates())
+ << "Updates that can't be decrypted should trigger the syncer to have "
+ << "conflicting updates.";
+ EXPECT_EQ(0, status.num_simple_conflicts())
+ << "The updates that can't be decrypted should not be in regular "
+ << "conflict";
+ EXPECT_EQ(1, status.num_encryption_conflicts())
+ << "The updates that can't be decrypted should be in encryption "
+ << "conflict";
+ EXPECT_EQ(1, status.num_updates_applied())
+ << "The undecryptable password update shouldn't be applied";
}
} // namespace syncer
diff --git a/sync/engine/process_updates_command.cc b/sync/engine/process_updates_command.cc
index 22d465c..15a14cb 100644
--- a/sync/engine/process_updates_command.cc
+++ b/sync/engine/process_updates_command.cc
@@ -30,7 +30,6 @@ namespace syncer {
using sessions::SyncSession;
using sessions::StatusController;
-using sessions::UpdateProgress;
using syncable::GET_BY_ID;
@@ -141,7 +140,6 @@ SyncerError ProcessUpdatesCommand::ModelChangingExecuteImpl(
VerifyResult verify_result = VerifyUpdate(&trans, update,
requested_types,
session->routing_info());
- status->mutable_update_progress()->AddVerifyResult(verify_result, update);
status->increment_num_updates_downloaded_by(1);
if (!UpdateContainsNewVersion(&trans, update))
status->increment_num_reflected_updates_downloaded_by(1);
@@ -158,7 +156,6 @@ SyncerError ProcessUpdatesCommand::ModelChangingExecuteImpl(
process_result == SUCCESS_STORED);
}
- status->mutable_update_progress()->ClearVerifiedUpdates();
return SYNCER_OK;
}
diff --git a/sync/engine/update_applicator.cc b/sync/engine/update_applicator.cc
index cb09fc7..541b68c 100644
--- a/sync/engine/update_applicator.cc
+++ b/sync/engine/update_applicator.cc
@@ -25,8 +25,7 @@ UpdateApplicator::UpdateApplicator(Cryptographer* cryptographer,
ModelSafeGroup group_filter)
: cryptographer_(cryptographer),
group_filter_(group_filter),
- routing_info_(routes),
- application_results_() {
+ routing_info_(routes) {
}
UpdateApplicator::~UpdateApplicator() {
@@ -48,6 +47,9 @@ void UpdateApplicator::AttemptApplications(
const std::vector<int64>& handles,
sessions::StatusController* status) {
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;
@@ -64,18 +66,15 @@ void UpdateApplicator::AttemptApplications(
switch (result) {
case SUCCESS:
- application_results_.AddSuccess(entry.Get(ID));
status->increment_num_updates_applied();
break;
case CONFLICT_SIMPLE:
- application_results_.AddSimpleConflict(entry.Get(ID));
+ simple_conflict_ids->insert(entry.Get(ID));
break;
case CONFLICT_ENCRYPTION:
- application_results_.AddEncryptionConflict(entry.Get(ID));
status->increment_num_encryption_conflicts();
break;
case CONFLICT_HIERARCHY:
- application_results_.AddHierarchyConflict(entry.Get(ID));
// The decision to classify these as hierarchy conflcits is tentative.
// If we make any progress this round, we'll clear the hierarchy
// conflict count and attempt to reapply these updates.
@@ -96,7 +95,6 @@ void UpdateApplicator::AttemptApplications(
// We made some progress, so prepare for what might be another iteration.
// If everything went well, to_reapply will be empty and we'll break out on
// the while condition.
- application_results_.ClearHierarchyConflicts();
to_apply.swap(to_reapply);
to_reapply.clear();
}
@@ -121,61 +119,4 @@ bool UpdateApplicator::SkipUpdate(const syncable::Entry& entry) {
return false;
}
-void UpdateApplicator::SaveProgressIntoSessionState(
- std::set<syncable::Id>* simple_conflict_ids,
- sessions::UpdateProgress* update_progress) {
- application_results_.SaveProgress(simple_conflict_ids, update_progress);
-}
-
-UpdateApplicator::ResultTracker::ResultTracker() {
-}
-
-UpdateApplicator::ResultTracker::~ResultTracker() {
-}
-
-void UpdateApplicator::ResultTracker::AddSimpleConflict(syncable::Id id) {
- conflicting_ids_.insert(id);
-}
-
-void UpdateApplicator::ResultTracker::AddEncryptionConflict(syncable::Id id) {
- encryption_conflict_ids_.insert(id);
-}
-
-void UpdateApplicator::ResultTracker::AddHierarchyConflict(syncable::Id id) {
- hierarchy_conflict_ids_.insert(id);
-}
-
-void UpdateApplicator::ResultTracker::AddSuccess(syncable::Id id) {
- successful_ids_.insert(id);
-}
-
-void UpdateApplicator::ResultTracker::SaveProgress(
- std::set<syncable::Id>* simple_conflict_ids,
- sessions::UpdateProgress* update_progress) {
- std::set<syncable::Id>::const_iterator i;
- *simple_conflict_ids = conflicting_ids_;
- for (i = conflicting_ids_.begin(); i != conflicting_ids_.end(); ++i) {
- update_progress->AddAppliedUpdate(CONFLICT_SIMPLE, *i);
- }
- for (i = encryption_conflict_ids_.begin();
- i != encryption_conflict_ids_.end(); ++i) {
- update_progress->AddAppliedUpdate(CONFLICT_ENCRYPTION, *i);
- }
- for (i = hierarchy_conflict_ids_.begin();
- i != hierarchy_conflict_ids_.end(); ++i) {
- update_progress->AddAppliedUpdate(CONFLICT_HIERARCHY, *i);
- }
- for (i = successful_ids_.begin(); i != successful_ids_.end(); ++i) {
- update_progress->AddAppliedUpdate(SUCCESS, *i);
- }
-}
-
-void UpdateApplicator::ResultTracker::ClearHierarchyConflicts() {
- hierarchy_conflict_ids_.clear();
-}
-
-bool UpdateApplicator::ResultTracker::no_conflicts() const {
- return conflicting_ids_.empty();
-}
-
} // namespace syncer
diff --git a/sync/engine/update_applicator.h b/sync/engine/update_applicator.h
index 290a76c..c5b27a2 100644
--- a/sync/engine/update_applicator.h
+++ b/sync/engine/update_applicator.h
@@ -23,7 +23,6 @@ namespace syncer {
namespace sessions {
class StatusController;
-class UpdateProgress;
}
namespace syncable {
@@ -48,38 +47,7 @@ class UpdateApplicator {
const std::vector<int64>& handles,
sessions::StatusController* status);
- // This class does not automatically save its progress into the
- // SyncSession -- to get that to happen, call this method after update
- // application is finished (i.e., when AttemptOneAllocation stops returning
- // true).
- void SaveProgressIntoSessionState(
- std::set<syncable::Id>* simple_conflict_ids,
- sessions::UpdateProgress* update_progress);
-
private:
- // Track the status of all applications.
- class ResultTracker {
- public:
- explicit ResultTracker();
- virtual ~ResultTracker();
- void AddSimpleConflict(syncable::Id);
- void AddEncryptionConflict(syncable::Id);
- void AddHierarchyConflict(syncable::Id);
- void AddSuccess(syncable::Id);
- void SaveProgress(std::set<syncable::Id>* simple_conflict_ids,
- sessions::UpdateProgress* update_progress);
- void ClearHierarchyConflicts();
-
- // Returns true iff conflicting_ids_ is empty. Does not check
- // encryption_conflict_ids_.
- bool no_conflicts() const;
- private:
- std::set<syncable::Id> conflicting_ids_;
- std::set<syncable::Id> successful_ids_;
- std::set<syncable::Id> encryption_conflict_ids_;
- std::set<syncable::Id> hierarchy_conflict_ids_;
- };
-
// If true, AttemptOneApplication will skip over |entry| and return true.
bool SkipUpdate(const syncable::Entry& entry);
@@ -90,9 +58,6 @@ class UpdateApplicator {
const ModelSafeRoutingInfo routing_info_;
- // Track the result of the attempts to update applications.
- ResultTracker application_results_;
-
DISALLOW_COPY_AND_ASSIGN(UpdateApplicator);
};