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

Side by Side Diff: sync/engine/model_thread_sync_entity.cc

Issue 280983002: Implement sync in the NonBlockingTypeProcessor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "sync/engine/model_thread_sync_entity.h"
6 #include "sync/syncable/syncable_util.h"
7
8 namespace syncer {
9
10 ModelThreadSyncEntity* ModelThreadSyncEntity::NewLocalItem(
11 const std::string& client_tag,
12 const sync_pb::EntitySpecifics& specifics,
13 base::Time now) {
14 return new ModelThreadSyncEntity(
15 1,
16 0,
17 0,
18 0,
19 true,
20 std::string(), // Sync thread will assign the initial ID.
21 client_tag,
22 syncable::GenerateSyncableHash(GetModelTypeFromSpecifics(specifics),
23 client_tag),
24 client_tag, // As non-unique name.
25 specifics,
26 false,
27 now,
28 now);
29 }
30
31 ModelThreadSyncEntity* ModelThreadSyncEntity::FromServerUpdate(
32 const std::string& id,
33 const std::string& client_tag_hash,
34 const std::string& non_unique_name,
35 int64 version,
36 const sync_pb::EntitySpecifics& specifics,
37 bool deleted,
38 base::Time ctime,
39 base::Time mtime) {
40 return new ModelThreadSyncEntity(0,
41 0,
42 0,
43 version,
44 true,
45 id,
46 std::string(),
47 client_tag_hash,
48 non_unique_name,
49 specifics,
50 deleted,
51 ctime,
52 mtime);
53 }
54
55 ModelThreadSyncEntity::ModelThreadSyncEntity(
56 int64 sequence_number,
57 int64 commit_requested_sequence_number,
58 int64 acked_sequence_number,
59 int64 base_version,
60 bool is_dirty,
61 const std::string& id,
62 const std::string& client_tag,
63 const std::string& client_tag_hash,
64 const std::string& non_unique_name,
65 const sync_pb::EntitySpecifics& specifics,
66 bool deleted,
67 base::Time ctime,
68 base::Time mtime)
69 : sequence_number_(sequence_number),
70 commit_requested_sequence_number_(commit_requested_sequence_number),
71 acked_sequence_number_(acked_sequence_number),
72 base_version_(base_version),
73 is_dirty_(is_dirty),
74 id_(id),
75 client_tag_(client_tag),
76 client_tag_hash_(client_tag_hash),
77 non_unique_name_(non_unique_name),
78 specifics_(specifics),
79 deleted_(deleted),
80 ctime_(ctime),
81 mtime_(mtime) {
82 }
83
84 ModelThreadSyncEntity::~ModelThreadSyncEntity() {
85 }
86
87 bool ModelThreadSyncEntity::IsWriteRequired() const {
88 return is_dirty_;
89 }
90
91 bool ModelThreadSyncEntity::IsUnsynced() const {
92 return sequence_number_ > acked_sequence_number_;
93 }
94
95 bool ModelThreadSyncEntity::RequiresCommitRequest() const {
96 return sequence_number_ > commit_requested_sequence_number_;
97 }
98
99 bool ModelThreadSyncEntity::UpdateIsReflection(int64 update_version) const {
100 return base_version_ >= update_version;
101 }
102
103 bool ModelThreadSyncEntity::UpdateIsInConflict(int64 update_version) const {
104 return IsUnsynced() && !UpdateIsReflection(update_version);
105 }
106
107 void ModelThreadSyncEntity::ApplyUpdateFromServer(
108 int64 update_version,
109 bool deleted,
110 const sync_pb::EntitySpecifics& specifics,
111 base::Time mtime) {
112 // There was a conflict and the server just won it.
113 // This implicitly acks all outstanding commits because a received update
114 // will clobber any pending commits on the sync thread.
115 acked_sequence_number_ = sequence_number_;
116 commit_requested_sequence_number_ = sequence_number_;
117
118 base_version_ = update_version;
119 specifics_ = specifics;
120 mtime_ = mtime;
121 }
122
123 void ModelThreadSyncEntity::MakeLocalChange(
124 const std::string& client_tag,
125 const sync_pb::EntitySpecifics& specifics) {
126 if (!client_tag_.empty()) {
127 DCHECK_EQ(client_tag, client_tag_);
128 } else {
129 client_tag_ = client_tag;
130 }
131
132 sequence_number_++;
133 specifics_ = specifics;
134 }
135
136 void ModelThreadSyncEntity::Delete(const std::string& client_tag) {
137 if (!client_tag_.empty()) {
138 DCHECK_EQ(client_tag, client_tag_);
139 } else {
140 client_tag_ = client_tag;
141 }
142
143 sequence_number_++;
144 specifics_.Clear();
145 deleted_ = true;
146 }
147
148 void ModelThreadSyncEntity::InitializeCommitRequestData(
149 CommitRequestData* request) const {
150 request->id = id_;
151 request->client_tag = client_tag_;
152 request->sequence_number = sequence_number_;
153 request->base_version = base_version_;
154 request->ctime = ctime_;
155 request->mtime = mtime_;
156 request->deleted = deleted_;
157 request->specifics.CopyFrom(specifics_);
158 }
159
160 void ModelThreadSyncEntity::SetCommitRequestInProgress() {
161 commit_requested_sequence_number_ = sequence_number_;
162 }
163
164 void ModelThreadSyncEntity::ReceiveCommitResponse(const std::string& id,
165 int64 sequence_number,
166 int64 response_version) {
167 id_ = id; // The server can assign us a new ID in a commit response.
168 acked_sequence_number_ = sequence_number;
169 base_version_ = response_version;
170 }
171
172 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698