OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/sync/engine/syncer.h" | 5 #include "chrome/browser/sync/engine/syncer.h" |
6 | 6 |
7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
8 #include "base/location.h" | 8 #include "base/location.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 ENUM_CASE(CLEAR_PRIVATE_DATA); | 77 ENUM_CASE(CLEAR_PRIVATE_DATA); |
78 ENUM_CASE(SYNCER_END); | 78 ENUM_CASE(SYNCER_END); |
79 } | 79 } |
80 NOTREACHED(); | 80 NOTREACHED(); |
81 return ""; | 81 return ""; |
82 } | 82 } |
83 #undef ENUM_CASE | 83 #undef ENUM_CASE |
84 | 84 |
85 Syncer::ScopedSyncStartStopTracker::ScopedSyncStartStopTracker( | 85 Syncer::ScopedSyncStartStopTracker::ScopedSyncStartStopTracker( |
86 sessions::SyncSession* session) : session_(session) { | 86 sessions::SyncSession* session) : session_(session) { |
87 session_->status_controller()->SetSyncInProgressAndUpdateStartTime(true); | 87 session_->mutable_status_controller()-> |
| 88 SetSyncInProgressAndUpdateStartTime(true); |
88 } | 89 } |
89 | 90 |
90 Syncer::ScopedSyncStartStopTracker::~ScopedSyncStartStopTracker() { | 91 Syncer::ScopedSyncStartStopTracker::~ScopedSyncStartStopTracker() { |
91 session_->status_controller()->SetSyncInProgressAndUpdateStartTime(false); | 92 session_->mutable_status_controller()-> |
| 93 SetSyncInProgressAndUpdateStartTime(false); |
92 } | 94 } |
93 | 95 |
94 Syncer::Syncer() | 96 Syncer::Syncer() |
95 : early_exit_requested_(false), | 97 : early_exit_requested_(false), |
96 pre_conflict_resolution_closure_(NULL) { | 98 pre_conflict_resolution_closure_(NULL) { |
97 } | 99 } |
98 | 100 |
99 Syncer::~Syncer() {} | 101 Syncer::~Syncer() {} |
100 | 102 |
101 bool Syncer::ExitRequested() { | 103 bool Syncer::ExitRequested() { |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 ProcessUpdatesCommand process_updates; | 174 ProcessUpdatesCommand process_updates; |
173 process_updates.Execute(session); | 175 process_updates.Execute(session); |
174 next_step = STORE_TIMESTAMPS; | 176 next_step = STORE_TIMESTAMPS; |
175 break; | 177 break; |
176 } | 178 } |
177 case STORE_TIMESTAMPS: { | 179 case STORE_TIMESTAMPS: { |
178 StoreTimestampsCommand store_timestamps; | 180 StoreTimestampsCommand store_timestamps; |
179 store_timestamps.Execute(session); | 181 store_timestamps.Execute(session); |
180 // We should download all of the updates before attempting to process | 182 // We should download all of the updates before attempting to process |
181 // them. | 183 // them. |
182 if (session->status_controller()->ServerSaysNothingMoreToDownload() || | 184 if (session->status_controller().ServerSaysNothingMoreToDownload() || |
183 !session->status_controller()->download_updates_succeeded()) { | 185 !session->status_controller().download_updates_succeeded()) { |
184 next_step = APPLY_UPDATES; | 186 next_step = APPLY_UPDATES; |
185 } else { | 187 } else { |
186 next_step = DOWNLOAD_UPDATES; | 188 next_step = DOWNLOAD_UPDATES; |
187 } | 189 } |
188 break; | 190 break; |
189 } | 191 } |
190 case APPLY_UPDATES: { | 192 case APPLY_UPDATES: { |
191 ApplyUpdatesCommand apply_updates; | 193 ApplyUpdatesCommand apply_updates; |
192 apply_updates.Execute(session); | 194 apply_updates.Execute(session); |
193 if (last_step == APPLY_UPDATES) { | 195 if (last_step == APPLY_UPDATES) { |
(...skipping 16 matching lines...) Expand all Loading... |
210 return; | 212 return; |
211 } | 213 } |
212 WriteTransaction trans(FROM_HERE, SYNCER, dir); | 214 WriteTransaction trans(FROM_HERE, SYNCER, dir); |
213 sessions::ScopedSetSessionWriteTransaction set_trans(session, &trans); | 215 sessions::ScopedSetSessionWriteTransaction set_trans(session, &trans); |
214 | 216 |
215 VLOG(1) << "Getting the Commit IDs"; | 217 VLOG(1) << "Getting the Commit IDs"; |
216 GetCommitIdsCommand get_commit_ids_command( | 218 GetCommitIdsCommand get_commit_ids_command( |
217 session->context()->max_commit_batch_size()); | 219 session->context()->max_commit_batch_size()); |
218 get_commit_ids_command.Execute(session); | 220 get_commit_ids_command.Execute(session); |
219 | 221 |
220 if (!session->status_controller()->commit_ids().empty()) { | 222 if (!session->status_controller().commit_ids().empty()) { |
221 VLOG(1) << "Building a commit message"; | 223 VLOG(1) << "Building a commit message"; |
222 BuildCommitCommand build_commit_command; | 224 BuildCommitCommand build_commit_command; |
223 build_commit_command.Execute(session); | 225 build_commit_command.Execute(session); |
224 | 226 |
225 next_step = POST_COMMIT_MESSAGE; | 227 next_step = POST_COMMIT_MESSAGE; |
226 } else { | 228 } else { |
227 next_step = BUILD_AND_PROCESS_CONFLICT_SETS; | 229 next_step = BUILD_AND_PROCESS_CONFLICT_SETS; |
228 } | 230 } |
229 | 231 |
230 break; | 232 break; |
231 } | 233 } |
232 case POST_COMMIT_MESSAGE: { | 234 case POST_COMMIT_MESSAGE: { |
233 PostCommitMessageCommand post_commit_command; | 235 PostCommitMessageCommand post_commit_command; |
234 post_commit_command.Execute(session); | 236 post_commit_command.Execute(session); |
235 next_step = PROCESS_COMMIT_RESPONSE; | 237 next_step = PROCESS_COMMIT_RESPONSE; |
236 break; | 238 break; |
237 } | 239 } |
238 case PROCESS_COMMIT_RESPONSE: { | 240 case PROCESS_COMMIT_RESPONSE: { |
239 session->status_controller()->reset_num_conflicting_commits(); | 241 session->mutable_status_controller()->reset_num_conflicting_commits(); |
240 ProcessCommitResponseCommand process_response_command; | 242 ProcessCommitResponseCommand process_response_command; |
241 process_response_command.Execute(session); | 243 process_response_command.Execute(session); |
242 next_step = BUILD_AND_PROCESS_CONFLICT_SETS; | 244 next_step = BUILD_AND_PROCESS_CONFLICT_SETS; |
243 break; | 245 break; |
244 } | 246 } |
245 case BUILD_AND_PROCESS_CONFLICT_SETS: { | 247 case BUILD_AND_PROCESS_CONFLICT_SETS: { |
246 BuildAndProcessConflictSetsCommand build_process_conflict_sets; | 248 BuildAndProcessConflictSetsCommand build_process_conflict_sets; |
247 build_process_conflict_sets.Execute(session); | 249 build_process_conflict_sets.Execute(session); |
248 if (session->status_controller()->conflict_sets_built()) | 250 if (session->status_controller().conflict_sets_built()) |
249 next_step = SYNCER_END; | 251 next_step = SYNCER_END; |
250 else | 252 else |
251 next_step = RESOLVE_CONFLICTS; | 253 next_step = RESOLVE_CONFLICTS; |
252 break; | 254 break; |
253 } | 255 } |
254 case RESOLVE_CONFLICTS: { | 256 case RESOLVE_CONFLICTS: { |
255 | 257 |
256 // Trigger the pre_conflict_resolution_closure_, which is a testing | 258 // Trigger the pre_conflict_resolution_closure_, which is a testing |
257 // hook for the unit tests, if it is non-NULL. | 259 // hook for the unit tests, if it is non-NULL. |
258 if (pre_conflict_resolution_closure_) { | 260 if (pre_conflict_resolution_closure_) { |
259 pre_conflict_resolution_closure_->Run(); | 261 pre_conflict_resolution_closure_->Run(); |
260 } | 262 } |
261 | 263 |
262 StatusController* status = session->status_controller(); | 264 StatusController* status = session->mutable_status_controller(); |
263 status->reset_conflicts_resolved(); | 265 status->reset_conflicts_resolved(); |
264 ResolveConflictsCommand resolve_conflicts_command; | 266 ResolveConflictsCommand resolve_conflicts_command; |
265 resolve_conflicts_command.Execute(session); | 267 resolve_conflicts_command.Execute(session); |
266 | 268 |
267 // Has ConflictingUpdates includes both blocking and non-blocking | 269 // Has ConflictingUpdates includes both blocking and non-blocking |
268 // conflicts. If we have either, we want to attempt to reapply. | 270 // conflicts. If we have either, we want to attempt to reapply. |
269 if (status->HasConflictingUpdates()) | 271 if (status->HasConflictingUpdates()) |
270 next_step = APPLY_UPDATES_TO_RESOLVE_CONFLICTS; | 272 next_step = APPLY_UPDATES_TO_RESOLVE_CONFLICTS; |
271 else | 273 else |
272 next_step = SYNCER_END; | 274 next_step = SYNCER_END; |
273 break; | 275 break; |
274 } | 276 } |
275 case APPLY_UPDATES_TO_RESOLVE_CONFLICTS: { | 277 case APPLY_UPDATES_TO_RESOLVE_CONFLICTS: { |
276 StatusController* status = session->status_controller(); | 278 StatusController* status = session->mutable_status_controller(); |
277 VLOG(1) << "Applying updates to resolve conflicts"; | 279 VLOG(1) << "Applying updates to resolve conflicts"; |
278 ApplyUpdatesCommand apply_updates; | 280 ApplyUpdatesCommand apply_updates; |
279 | 281 |
280 // We only care to resolve conflicts again if we made progress on the | 282 // We only care to resolve conflicts again if we made progress on the |
281 // blocking conflicts. Whether or not we made progress on the | 283 // blocking conflicts. Whether or not we made progress on the |
282 // non-blocking doesn't matter. | 284 // non-blocking doesn't matter. |
283 int before_blocking_conflicting_updates = | 285 int before_blocking_conflicting_updates = |
284 status->TotalNumBlockingConflictingItems(); | 286 status->TotalNumBlockingConflictingItems(); |
285 apply_updates.Execute(session); | 287 apply_updates.Execute(session); |
286 int after_blocking_conflicting_updates = | 288 int after_blocking_conflicting_updates = |
(...skipping 26 matching lines...) Expand all Loading... |
313 << "next step: " << SyncerStepToString(next_step) << ", " | 315 << "next step: " << SyncerStepToString(next_step) << ", " |
314 << "snapshot: " << session->TakeSnapshot().ToString(); | 316 << "snapshot: " << session->TakeSnapshot().ToString(); |
315 if (last_step == current_step) | 317 if (last_step == current_step) |
316 break; | 318 break; |
317 current_step = next_step; | 319 current_step = next_step; |
318 } | 320 } |
319 } | 321 } |
320 | 322 |
321 void Syncer::ProcessClientCommand(sessions::SyncSession* session) { | 323 void Syncer::ProcessClientCommand(sessions::SyncSession* session) { |
322 const ClientToServerResponse& response = | 324 const ClientToServerResponse& response = |
323 session->status_controller()->updates_response(); | 325 session->status_controller().updates_response(); |
324 if (!response.has_client_command()) | 326 if (!response.has_client_command()) |
325 return; | 327 return; |
326 const ClientCommand& command = response.client_command(); | 328 const ClientCommand& command = response.client_command(); |
327 | 329 |
328 // The server limits the number of items a client can commit in one batch. | 330 // The server limits the number of items a client can commit in one batch. |
329 if (command.has_max_commit_batch_size()) { | 331 if (command.has_max_commit_batch_size()) { |
330 session->context()->set_max_commit_batch_size( | 332 session->context()->set_max_commit_batch_size( |
331 command.max_commit_batch_size()); | 333 command.max_commit_batch_size()); |
332 } | 334 } |
333 if (command.has_set_sync_long_poll_interval()) { | 335 if (command.has_set_sync_long_poll_interval()) { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 entry->Put(SERVER_CTIME, Time()); | 367 entry->Put(SERVER_CTIME, Time()); |
366 entry->Put(SERVER_VERSION, 0); | 368 entry->Put(SERVER_VERSION, 0); |
367 entry->Put(SERVER_IS_DIR, false); | 369 entry->Put(SERVER_IS_DIR, false); |
368 entry->Put(SERVER_IS_DEL, false); | 370 entry->Put(SERVER_IS_DEL, false); |
369 entry->Put(IS_UNAPPLIED_UPDATE, false); | 371 entry->Put(IS_UNAPPLIED_UPDATE, false); |
370 entry->Put(SERVER_SPECIFICS, sync_pb::EntitySpecifics::default_instance()); | 372 entry->Put(SERVER_SPECIFICS, sync_pb::EntitySpecifics::default_instance()); |
371 entry->Put(SERVER_POSITION_IN_PARENT, 0); | 373 entry->Put(SERVER_POSITION_IN_PARENT, 0); |
372 } | 374 } |
373 | 375 |
374 } // namespace browser_sync | 376 } // namespace browser_sync |
OLD | NEW |