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

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: Fix gyp error and some tests 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 scoped_ptr<ModelThreadSyncEntity> ModelThreadSyncEntity::NewLocalItem(
11 const std::string& client_tag,
12 const sync_pb::EntitySpecifics& specifics,
13 base::Time now) {
14 return scoped_ptr<ModelThreadSyncEntity>(new ModelThreadSyncEntity(
15 1,
16 0,
17 0,
18 0,
19 true,
20 std::string(), // Sync thread will assign the initial ID.
21 syncable::GenerateSyncableHash(GetModelTypeFromSpecifics(specifics),
22 client_tag),
23 client_tag, // As non-unique name.
24 specifics,
25 false,
26 now,
27 now));
28 }
29
30 scoped_ptr<ModelThreadSyncEntity> ModelThreadSyncEntity::FromServerUpdate(
31 const std::string& id,
32 const std::string& client_tag_hash,
33 const std::string& non_unique_name,
34 int64 version,
35 const sync_pb::EntitySpecifics& specifics,
36 bool deleted,
37 base::Time ctime,
38 base::Time mtime) {
39 return scoped_ptr<ModelThreadSyncEntity>(
40 new ModelThreadSyncEntity(0,
41 0,
42 0,
43 version,
44 true,
45 id,
46 client_tag_hash,
47 non_unique_name,
48 specifics,
49 deleted,
50 ctime,
51 mtime));
52 }
53
54 ModelThreadSyncEntity::ModelThreadSyncEntity(
55 int64 sequence_number,
56 int64 commit_requested_sequence_number,
57 int64 acked_sequence_number,
58 int64 base_version,
59 bool is_dirty,
60 const std::string& id,
61 const std::string& client_tag_hash,
62 const std::string& non_unique_name,
63 const sync_pb::EntitySpecifics& specifics,
64 bool deleted,
65 base::Time ctime,
66 base::Time mtime)
67 : sequence_number_(sequence_number),
68 commit_requested_sequence_number_(commit_requested_sequence_number),
69 acked_sequence_number_(acked_sequence_number),
70 base_version_(base_version),
71 is_dirty_(is_dirty),
72 id_(id),
73 client_tag_hash_(client_tag_hash),
74 non_unique_name_(non_unique_name),
75 specifics_(specifics),
76 deleted_(deleted),
77 ctime_(ctime),
78 mtime_(mtime) {
79 }
80
81 ModelThreadSyncEntity::~ModelThreadSyncEntity() {
82 }
83
84 bool ModelThreadSyncEntity::IsWriteRequired() const {
85 return is_dirty_;
86 }
87
88 bool ModelThreadSyncEntity::IsUnsynced() const {
89 return sequence_number_ > acked_sequence_number_;
90 }
91
92 bool ModelThreadSyncEntity::RequiresCommitRequest() const {
93 return sequence_number_ > commit_requested_sequence_number_;
94 }
95
96 bool ModelThreadSyncEntity::UpdateIsReflection(int64 update_version) const {
97 return base_version_ >= update_version;
98 }
99
100 bool ModelThreadSyncEntity::UpdateIsInConflict(int64 update_version) const {
101 return IsUnsynced() && !UpdateIsReflection(update_version);
102 }
103
104 void ModelThreadSyncEntity::ApplyUpdateFromServer(
105 int64 update_version,
106 bool deleted,
107 const sync_pb::EntitySpecifics& specifics,
108 base::Time mtime) {
109 // There was a conflict and the server just won it.
110 // This implicitly acks all outstanding commits because a received update
111 // will clobber any pending commits on the sync thread.
112 acked_sequence_number_ = sequence_number_;
113 commit_requested_sequence_number_ = sequence_number_;
114
115 base_version_ = update_version;
116 specifics_ = specifics;
117 mtime_ = mtime;
118 }
119
120 void ModelThreadSyncEntity::MakeLocalChange(
121 const sync_pb::EntitySpecifics& specifics) {
122 sequence_number_++;
123 specifics_ = specifics;
124 }
125
126 void ModelThreadSyncEntity::Delete() {
127 sequence_number_++;
128 specifics_.Clear();
129 deleted_ = true;
130 }
131
132 void ModelThreadSyncEntity::InitializeCommitRequestData(
133 CommitRequestData* request) const {
134 request->id = id_;
135 request->client_tag_hash = client_tag_hash_;
136 request->sequence_number = sequence_number_;
137 request->base_version = base_version_;
138 request->ctime = ctime_;
139 request->mtime = mtime_;
140 request->non_unique_name = non_unique_name_;
141 request->deleted = deleted_;
142 request->specifics.CopyFrom(specifics_);
143 }
144
145 void ModelThreadSyncEntity::SetCommitRequestInProgress() {
146 commit_requested_sequence_number_ = sequence_number_;
147 }
148
149 void ModelThreadSyncEntity::ReceiveCommitResponse(const std::string& id,
150 int64 sequence_number,
151 int64 response_version) {
152 id_ = id; // The server can assign us a new ID in a commit response.
153 acked_sequence_number_ = sequence_number;
154 base_version_ = response_version;
155 }
156
157 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/engine/model_thread_sync_entity.h ('k') | sync/engine/model_thread_sync_entity_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698