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 |