This source file includes following definitions.
- hierarchy_conflicts_
- AttemptApplications
#include "sync/engine/update_applicator.h"
#include <vector>
#include "base/logging.h"
#include "sync/engine/syncer_util.h"
#include "sync/syncable/entry.h"
#include "sync/syncable/mutable_entry.h"
#include "sync/syncable/syncable_id.h"
#include "sync/syncable/syncable_write_transaction.h"
using std::vector;
namespace syncer {
using syncable::ID;
UpdateApplicator::UpdateApplicator(Cryptographer* cryptographer)
: cryptographer_(cryptographer),
updates_applied_(0),
encryption_conflicts_(0),
hierarchy_conflicts_(0) {
}
UpdateApplicator::~UpdateApplicator() {
}
void UpdateApplicator::AttemptApplications(
syncable::WriteTransaction* trans,
const std::vector<int64>& handles) {
std::vector<int64> to_apply = handles;
DVLOG(1) << "UpdateApplicator running over " << to_apply.size() << " items.";
while (!to_apply.empty()) {
std::vector<int64> to_reapply;
for (std::vector<int64>::iterator i = to_apply.begin();
i != to_apply.end(); ++i) {
syncable::MutableEntry entry(trans, syncable::GET_BY_HANDLE, *i);
UpdateAttemptResponse result = AttemptToUpdateEntry(
trans, &entry, cryptographer_);
switch (result) {
case SUCCESS:
updates_applied_++;
break;
case CONFLICT_SIMPLE:
simple_conflict_ids_.insert(entry.GetId());
break;
case CONFLICT_ENCRYPTION:
encryption_conflicts_++;
break;
case CONFLICT_HIERARCHY:
to_reapply.push_back(*i);
break;
default:
NOTREACHED();
break;
}
}
if (to_reapply.size() == to_apply.size()) {
hierarchy_conflicts_ = to_apply.size();
break;
}
to_apply.swap(to_reapply);
to_reapply.clear();
}
}
}