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

Unified Diff: sync/internal_api/processor_entity_tracker.cc

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 5 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
Index: sync/internal_api/processor_entity_tracker.cc
diff --git a/sync/internal_api/processor_entity_tracker.cc b/sync/internal_api/processor_entity_tracker.cc
deleted file mode 100644
index 8c37c02d550ed05bd186b3a103c8d7fb8563d941..0000000000000000000000000000000000000000
--- a/sync/internal_api/processor_entity_tracker.cc
+++ /dev/null
@@ -1,255 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "sync/internal_api/public/processor_entity_tracker.h"
-
-#include <stdint.h>
-
-#include "base/base64.h"
-#include "base/sha1.h"
-#include "base/time/time.h"
-#include "sync/internal_api/public/non_blocking_sync_common.h"
-#include "sync/syncable/syncable_util.h"
-#include "sync/util/time.h"
-
-namespace syncer_v2 {
-
-namespace {
-
-void HashSpecifics(const sync_pb::EntitySpecifics& specifics,
- std::string* hash) {
- DCHECK_GT(specifics.ByteSize(), 0);
- base::Base64Encode(base::SHA1HashString(specifics.SerializeAsString()), hash);
-}
-
-} // namespace
-
-std::unique_ptr<ProcessorEntityTracker> ProcessorEntityTracker::CreateNew(
- const std::string& client_tag,
- const std::string& client_tag_hash,
- const std::string& id,
- base::Time creation_time) {
- // Initialize metadata
- sync_pb::EntityMetadata metadata;
- metadata.set_client_tag_hash(client_tag_hash);
- if (!id.empty())
- metadata.set_server_id(id);
- metadata.set_sequence_number(0);
- metadata.set_acked_sequence_number(0);
- metadata.set_server_version(kUncommittedVersion);
- metadata.set_creation_time(syncer::TimeToProtoTime(creation_time));
-
- return std::unique_ptr<ProcessorEntityTracker>(
- new ProcessorEntityTracker(client_tag, &metadata));
-}
-
-std::unique_ptr<ProcessorEntityTracker>
-ProcessorEntityTracker::CreateFromMetadata(const std::string& client_tag,
- sync_pb::EntityMetadata* metadata) {
- return std::unique_ptr<ProcessorEntityTracker>(
- new ProcessorEntityTracker(client_tag, metadata));
-}
-
-ProcessorEntityTracker::ProcessorEntityTracker(
- const std::string& client_tag,
- sync_pb::EntityMetadata* metadata)
- : client_tag_(client_tag),
- commit_requested_sequence_number_(metadata->acked_sequence_number()) {
- DCHECK(metadata->has_client_tag_hash());
- DCHECK(metadata->has_creation_time());
- metadata_.Swap(metadata);
-}
-
-ProcessorEntityTracker::~ProcessorEntityTracker() {}
-
-void ProcessorEntityTracker::CacheCommitData(EntityData* data) {
- DCHECK(data);
- if (data->client_tag_hash.empty()) {
- data->client_tag_hash = metadata_.client_tag_hash();
- }
- CacheCommitData(data->PassToPtr());
-}
-
-void ProcessorEntityTracker::CacheCommitData(const EntityDataPtr& data_ptr) {
- DCHECK(RequiresCommitData());
- commit_data_ = data_ptr;
- DCHECK(HasCommitData());
-}
-
-bool ProcessorEntityTracker::HasCommitData() const {
- return !commit_data_->client_tag_hash.empty();
-}
-
-bool ProcessorEntityTracker::MatchesData(const EntityData& data) const {
- return metadata_.is_deleted() ? data.is_deleted() :
- MatchesSpecificsHash(data.specifics);
-}
-
-bool ProcessorEntityTracker::MatchesBaseData(const EntityData& data) const {
- DCHECK(IsUnsynced());
- if (data.is_deleted() || metadata_.base_specifics_hash().empty()) {
- return false;
- }
- std::string hash;
- HashSpecifics(data.specifics, &hash);
- return hash == metadata_.base_specifics_hash();
-}
-
-bool ProcessorEntityTracker::IsUnsynced() const {
- return metadata_.sequence_number() > metadata_.acked_sequence_number();
-}
-
-bool ProcessorEntityTracker::RequiresCommitRequest() const {
- return metadata_.sequence_number() > commit_requested_sequence_number_;
-}
-
-bool ProcessorEntityTracker::RequiresCommitData() const {
- return RequiresCommitRequest() && !HasCommitData() && !metadata_.is_deleted();
-}
-
-bool ProcessorEntityTracker::CanClearMetadata() const {
- return metadata_.is_deleted() && !IsUnsynced();
-}
-
-bool ProcessorEntityTracker::UpdateIsReflection(int64_t update_version) const {
- return metadata_.server_version() >= update_version;
-}
-
-void ProcessorEntityTracker::RecordIgnoredUpdate(
- const UpdateResponseData& update) {
- DCHECK(metadata_.server_id().empty() ||
- metadata_.server_id() == update.entity->id);
- metadata_.set_server_id(update.entity->id);
- metadata_.set_server_version(update.response_version);
- // Either these already matched, acked was just bumped to squash a pending
- // commit and this should follow, or the pending commit needs to be requeued.
- commit_requested_sequence_number_ = metadata_.acked_sequence_number();
-}
-
-void ProcessorEntityTracker::RecordAcceptedUpdate(
- const UpdateResponseData& update) {
- DCHECK(!IsUnsynced());
- RecordIgnoredUpdate(update);
- metadata_.set_is_deleted(update.entity->is_deleted());
- metadata_.set_modification_time(
- syncer::TimeToProtoTime(update.entity->modification_time));
- UpdateSpecificsHash(update.entity->specifics);
-}
-
-void ProcessorEntityTracker::RecordForcedUpdate(
- const UpdateResponseData& update) {
- DCHECK(IsUnsynced());
- // There was a conflict and the server just won it. Explicitly ack all
- // pending commits so they are never enqueued again.
- metadata_.set_acked_sequence_number(metadata_.sequence_number());
- commit_data_.reset();
- RecordAcceptedUpdate(update);
-}
-
-void ProcessorEntityTracker::MakeLocalChange(std::unique_ptr<EntityData> data) {
- DCHECK(!metadata_.client_tag_hash().empty());
- DCHECK_EQ(metadata_.client_tag_hash(), data->client_tag_hash);
-
- if (data->modification_time.is_null()) {
- data->modification_time = base::Time::Now();
- }
-
- IncrementSequenceNumber();
- UpdateSpecificsHash(data->specifics);
- metadata_.set_modification_time(
- syncer::TimeToProtoTime(data->modification_time));
- metadata_.set_is_deleted(false);
-
- data->id = metadata_.server_id();
- data->creation_time = syncer::ProtoTimeToTime(metadata_.creation_time());
- commit_data_.reset();
- CacheCommitData(data.get());
-}
-
-void ProcessorEntityTracker::Delete() {
- IncrementSequenceNumber();
- metadata_.set_modification_time(syncer::TimeToProtoTime(base::Time::Now()));
- metadata_.set_is_deleted(true);
- metadata_.clear_specifics_hash();
- // Clear any cached pending commit data.
- commit_data_.reset();
-}
-
-void ProcessorEntityTracker::InitializeCommitRequestData(
- CommitRequestData* request) {
- if (!metadata_.is_deleted()) {
- DCHECK(HasCommitData());
- DCHECK_EQ(commit_data_->client_tag_hash, metadata_.client_tag_hash());
- request->entity = commit_data_;
- } else {
- // Make an EntityData with empty specifics to indicate deletion. This is
- // done lazily here to simplify loading a pending deletion on startup.
- EntityData data;
- data.client_tag_hash = metadata_.client_tag_hash();
- data.id = metadata_.server_id();
- data.creation_time = syncer::ProtoTimeToTime(metadata_.creation_time());
- data.modification_time =
- syncer::ProtoTimeToTime(metadata_.modification_time());
- request->entity = data.PassToPtr();
- }
-
- request->sequence_number = metadata_.sequence_number();
- request->base_version = metadata_.server_version();
- request->specifics_hash = metadata_.specifics_hash();
- commit_requested_sequence_number_ = metadata_.sequence_number();
-}
-
-void ProcessorEntityTracker::ReceiveCommitResponse(
- const CommitResponseData& data) {
- DCHECK_EQ(metadata_.client_tag_hash(), data.client_tag_hash);
- DCHECK_GT(data.sequence_number, metadata_.acked_sequence_number());
- DCHECK_GT(data.response_version, metadata_.server_version());
-
- // The server can assign us a new ID in a commit response.
- metadata_.set_server_id(data.id);
- metadata_.set_acked_sequence_number(data.sequence_number);
- metadata_.set_server_version(data.response_version);
- if (!IsUnsynced()) {
- // Clear pending commit data if there hasn't been another commit request
- // since the one that is currently getting acked.
- commit_data_.reset();
- metadata_.clear_base_specifics_hash();
- } else {
- metadata_.set_base_specifics_hash(data.specifics_hash);
- }
-}
-
-void ProcessorEntityTracker::ClearTransientSyncState() {
- // If we have any unacknowledged commit requests outstanding, they've been
- // dropped and we should forget about them.
- commit_requested_sequence_number_ = metadata_.acked_sequence_number();
-}
-
-void ProcessorEntityTracker::IncrementSequenceNumber() {
- DCHECK(metadata_.has_sequence_number());
- if (!IsUnsynced()) {
- // Update the base specifics hash if this entity wasn't already out of sync.
- metadata_.set_base_specifics_hash(metadata_.specifics_hash());
- }
- metadata_.set_sequence_number(metadata_.sequence_number() + 1);
-}
-
-bool ProcessorEntityTracker::MatchesSpecificsHash(
- const sync_pb::EntitySpecifics& specifics) const {
- DCHECK(!metadata_.is_deleted());
- std::string hash;
- HashSpecifics(specifics, &hash);
- return hash == metadata_.specifics_hash();
-}
-
-void ProcessorEntityTracker::UpdateSpecificsHash(
- const sync_pb::EntitySpecifics& specifics) {
- if (specifics.ByteSize() > 0) {
- HashSpecifics(specifics, metadata_.mutable_specifics_hash());
- } else {
- metadata_.clear_specifics_hash();
- }
-}
-
-} // namespace syncer_v2
« no previous file with comments | « sync/internal_api/model_type_store_impl_unittest.cc ('k') | sync/internal_api/processor_entity_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698