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

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: Add some expectations on non_unique_name 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 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 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 new ModelThreadSyncEntity(0,
40 0,
41 0,
42 version,
43 true,
44 id,
45 client_tag_hash,
46 non_unique_name,
47 specifics,
48 deleted,
49 ctime,
50 mtime);
51 }
52
53 ModelThreadSyncEntity::ModelThreadSyncEntity(
54 int64 sequence_number,
55 int64 commit_requested_sequence_number,
56 int64 acked_sequence_number,
57 int64 base_version,
58 bool is_dirty,
59 const std::string& id,
60 const std::string& client_tag_hash,
61 const std::string& non_unique_name,
62 const sync_pb::EntitySpecifics& specifics,
63 bool deleted,
64 base::Time ctime,
65 base::Time mtime)
66 : sequence_number_(sequence_number),
67 commit_requested_sequence_number_(commit_requested_sequence_number),
68 acked_sequence_number_(acked_sequence_number),
69 base_version_(base_version),
70 is_dirty_(is_dirty),
71 id_(id),
72 client_tag_hash_(client_tag_hash),
73 non_unique_name_(non_unique_name),
74 specifics_(specifics),
75 deleted_(deleted),
76 ctime_(ctime),
77 mtime_(mtime) {
78 }
79
80 ModelThreadSyncEntity::~ModelThreadSyncEntity() {
81 }
82
83 bool ModelThreadSyncEntity::IsWriteRequired() const {
84 return is_dirty_;
85 }
86
87 bool ModelThreadSyncEntity::IsUnsynced() const {
88 return sequence_number_ > acked_sequence_number_;
89 }
90
91 bool ModelThreadSyncEntity::RequiresCommitRequest() const {
92 return sequence_number_ > commit_requested_sequence_number_;
93 }
94
95 bool ModelThreadSyncEntity::UpdateIsReflection(int64 update_version) const {
96 return base_version_ >= update_version;
97 }
98
99 bool ModelThreadSyncEntity::UpdateIsInConflict(int64 update_version) const {
100 return IsUnsynced() && !UpdateIsReflection(update_version);
101 }
102
103 void ModelThreadSyncEntity::ApplyUpdateFromServer(
104 int64 update_version,
105 bool deleted,
106 const sync_pb::EntitySpecifics& specifics,
107 base::Time mtime) {
108 // There was a conflict and the server just won it.
109 // This implicitly acks all outstanding commits because a received update
110 // will clobber any pending commits on the sync thread.
111 acked_sequence_number_ = sequence_number_;
112 commit_requested_sequence_number_ = sequence_number_;
113
114 base_version_ = update_version;
115 specifics_ = specifics;
116 mtime_ = mtime;
117 }
118
119 void ModelThreadSyncEntity::MakeLocalChange(
120 const sync_pb::EntitySpecifics& specifics) {
121 sequence_number_++;
122 specifics_ = specifics;
123 }
124
125 void ModelThreadSyncEntity::Delete() {
126 sequence_number_++;
127 specifics_.Clear();
128 deleted_ = true;
129 }
130
131 void ModelThreadSyncEntity::InitializeCommitRequestData(
132 CommitRequestData* request) const {
133 request->id = id_;
134 request->client_tag_hash = client_tag_hash_;
135 request->sequence_number = sequence_number_;
136 request->base_version = base_version_;
137 request->ctime = ctime_;
138 request->mtime = mtime_;
139 request->non_unique_name = non_unique_name_;
140 request->deleted = deleted_;
141 request->specifics.CopyFrom(specifics_);
142 }
143
144 void ModelThreadSyncEntity::SetCommitRequestInProgress() {
145 commit_requested_sequence_number_ = sequence_number_;
146 }
147
148 void ModelThreadSyncEntity::ReceiveCommitResponse(const std::string& id,
149 int64 sequence_number,
150 int64 response_version) {
151 id_ = id; // The server can assign us a new ID in a commit response.
152 acked_sequence_number_ = sequence_number;
153 base_version_ = response_version;
154 }
155
156 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698