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

Side by Side Diff: chrome/browser/sync/glue/model_association_manager.cc

Issue 18132003: [Sync] Trigger unapply + getupdates for persistence errors (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Self review Created 7 years, 5 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/glue/model_association_manager.h" 5 #include "chrome/browser/sync/glue/model_association_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 9
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 // TODO(tim): Bug 134550. CHECKing to ensure no reentrancy on dev channel. 139 // TODO(tim): Bug 134550. CHECKing to ensure no reentrancy on dev channel.
140 // Remove this. 140 // Remove this.
141 CHECK_EQ(state_, IDLE); 141 CHECK_EQ(state_, IDLE);
142 needs_start_.clear(); 142 needs_start_.clear();
143 needs_stop_.clear(); 143 needs_stop_.clear();
144 failed_data_types_info_.clear(); 144 failed_data_types_info_.clear();
145 associating_types_.Clear(); 145 associating_types_.Clear();
146 needs_crypto_types_.Clear(); 146 needs_crypto_types_.Clear();
147 state_ = INITIALIZED_TO_CONFIGURE; 147 state_ = INITIALIZED_TO_CONFIGURE;
148 148
149 DVLOG(1) << "ModelAssociationManager: Initializing"; 149 DVLOG(1) << "ModelAssociationManager: Initializing for "
150 << syncer::ModelTypeSetToString(desired_types);
150 151
151 // Stop the types that are still loading from the previous configuration. 152 // Stop the types that are still loading from the previous configuration.
152 // If they are enabled we will start them here once again. 153 // If they are enabled we will start them here once again.
153 for (std::vector<DataTypeController*>::const_iterator it = 154 for (std::vector<DataTypeController*>::const_iterator it =
154 pending_model_load_.begin(); 155 pending_model_load_.begin();
155 it != pending_model_load_.end(); 156 it != pending_model_load_.end();
156 ++it) { 157 ++it) {
157 DVLOG(1) << "ModelAssociationManager: Stopping " 158 DVLOG(1) << "ModelAssociationManager: Stopping "
158 << (*it)->name() 159 << (*it)->name()
159 << " before initialization"; 160 << " before initialization";
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 state_ = IDLE; 207 state_ = IDLE;
207 DVLOG(1) << "ModelAssociationManager: Reseting for reconfiguration"; 208 DVLOG(1) << "ModelAssociationManager: Reseting for reconfiguration";
208 needs_start_.clear(); 209 needs_start_.clear();
209 needs_stop_.clear(); 210 needs_stop_.clear();
210 associating_types_.Clear(); 211 associating_types_.Clear();
211 failed_data_types_info_.clear(); 212 failed_data_types_info_.clear();
212 needs_crypto_types_.Clear(); 213 needs_crypto_types_.Clear();
213 } 214 }
214 215
215 void ModelAssociationManager::StopDisabledTypes() { 216 void ModelAssociationManager::StopDisabledTypes() {
216 DCHECK_EQ(state_, INITIALIZED_TO_CONFIGURE);
217 DVLOG(1) << "ModelAssociationManager: Stopping disabled types."; 217 DVLOG(1) << "ModelAssociationManager: Stopping disabled types.";
218 // Stop requested data types. 218 // Stop requested data types.
219 for (size_t i = 0; i < needs_stop_.size(); ++i) { 219 for (size_t i = 0; i < needs_stop_.size(); ++i) {
220 DVLOG(1) << "ModelAssociationManager: Stopping " << needs_stop_[i]->name(); 220 DVLOG(1) << "ModelAssociationManager: Stopping " << needs_stop_[i]->name();
221 needs_stop_[i]->Stop(); 221 needs_stop_[i]->Stop();
222 } 222 }
223 needs_stop_.clear(); 223 needs_stop_.clear();
224 } 224 }
225 225
226 void ModelAssociationManager::Stop() { 226 void ModelAssociationManager::Stop() {
227 bool need_to_call_model_association_done = false; 227 bool need_to_call_model_association_done = false;
228 DVLOG(1) << "ModelAssociationManager: Stopping MAM"; 228 DVLOG(1) << "ModelAssociationManager: Stopping MAM";
229 if (state_ == CONFIGURING) { 229 if (state_ == CONFIGURING) {
230 DVLOG(1) << "ModelAssociationManager: In the middle of configuratio while" 230 DVLOG(1) << "ModelAssociationManager: In the middle of configuration while"
231 << " stopping"; 231 << " stopping";
232 state_ = ABORTED; 232 state_ = ABORTED;
233 DCHECK(currently_associating_ != NULL || 233 DCHECK(currently_associating_ != NULL ||
234 needs_start_.size() > 0 || 234 needs_start_.size() > 0 ||
235 pending_model_load_.size() > 0 || 235 pending_model_load_.size() > 0 ||
236 waiting_to_associate_.size() > 0); 236 waiting_to_associate_.size() > 0);
237 237
238 if (currently_associating_) { 238 if (currently_associating_) {
239 TRACE_EVENT_END0("sync", "ModelAssociation"); 239 TRACE_EVENT_END0("sync", "ModelAssociation");
240 DVLOG(1) << "ModelAssociationManager: stopping " 240 DVLOG(1) << "ModelAssociationManager: stopping "
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 base::TimeDelta::FromSeconds(kDataTypeLoadWaitTimeInSeconds), 424 base::TimeDelta::FromSeconds(kDataTypeLoadWaitTimeInSeconds),
425 this, 425 this,
426 &ModelAssociationManager::LoadModelForNextType); 426 &ModelAssociationManager::LoadModelForNextType);
427 dtc->LoadModels(base::Bind( 427 dtc->LoadModels(base::Bind(
428 &ModelAssociationManager::ModelLoadCallback, 428 &ModelAssociationManager::ModelLoadCallback,
429 weak_ptr_factory_.GetWeakPtr())); 429 weak_ptr_factory_.GetWeakPtr()));
430 430
431 return; 431 return;
432 } 432 }
433 433
434 DVLOG(1) << "ModelAssociationManager: All types have models loaded." 434 DVLOG(1) << "ModelAssociationManager: All types have models loaded. "
435 << "Moving on to StartAssociatingNextType."; 435 << "Moving on to StartAssociatingNextType.";
436 436
437 // If all controllers have their |LoadModels| invoked then pass onto 437 // If all controllers have their |LoadModels| invoked then pass onto
438 // |StartAssociatingNextType|. 438 // |StartAssociatingNextType|.
439 StartAssociatingNextType(); 439 StartAssociatingNextType();
440 } 440 }
441 441
442 void ModelAssociationManager::ModelLoadCallback( 442 void ModelAssociationManager::ModelLoadCallback(
443 syncer::ModelType type, syncer::SyncError error) { 443 syncer::ModelType type, syncer::SyncError error) {
444 DVLOG(1) << "ModelAssociationManager: ModelLoadCallback for " 444 DVLOG(1) << "ModelAssociationManager: ModelLoadCallback for "
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 TypeStartCallback(DataTypeController::ASSOCIATION_FAILED, 479 TypeStartCallback(DataTypeController::ASSOCIATION_FAILED,
480 local_merge_result, 480 local_merge_result,
481 syncer::SyncMergeResult(type)); 481 syncer::SyncMergeResult(type));
482 } 482 }
483 return; 483 return;
484 } 484 }
485 } 485 }
486 NOTREACHED(); 486 NOTREACHED();
487 return; 487 return;
488 } else if (state_ == IDLE) { 488 } else if (state_ == IDLE) {
489 DVLOG(1) << "ModelAssociationManager: Models loaded after configure cycle" 489 DVLOG(1) << "ModelAssociationManager: Models loaded after configure cycle. "
490 << "Informing DTM"; 490 << "Informing DTM";
491 // This datatype finished loading after the deadline imposed by the 491 // This datatype finished loading after the deadline imposed by the
492 // originating configuration cycle. Inform the DataTypeManager that the 492 // originating configuration cycle. Inform the DataTypeManager that the
493 // type has loaded, so that association may begin. 493 // type has loaded, so that association may begin.
494 result_processor_->OnTypesLoaded(); 494 result_processor_->OnTypesLoaded();
495 } else { 495 } else {
496 // If we're not IDLE or CONFIGURING, we're being invoked as part of an abort 496 // If we're not IDLE or CONFIGURING, we're being invoked as part of an abort
497 // process (possibly a reconfiguration, or disabling of a broken data type). 497 // process (possibly a reconfiguration, or disabling of a broken data type).
498 DVLOG(1) << "ModelAssociationManager: ModelLoadCallback occurred while " 498 DVLOG(1) << "ModelAssociationManager: ModelLoadCallback occurred while "
499 << "not IDLE or CONFIGURING. Doing nothing."; 499 << "not IDLE or CONFIGURING. Doing nothing.";
(...skipping 15 matching lines...) Expand all
515 DataTypeController* dtc = waiting_to_associate_[0]; 515 DataTypeController* dtc = waiting_to_associate_[0];
516 waiting_to_associate_.erase(waiting_to_associate_.begin()); 516 waiting_to_associate_.erase(waiting_to_associate_.begin());
517 currently_associating_ = dtc; 517 currently_associating_ = dtc;
518 current_type_association_start_time_ = base::Time::Now(); 518 current_type_association_start_time_ = base::Time::Now();
519 dtc->StartAssociating(base::Bind( 519 dtc->StartAssociating(base::Bind(
520 &ModelAssociationManager::TypeStartCallback, 520 &ModelAssociationManager::TypeStartCallback,
521 weak_ptr_factory_.GetWeakPtr())); 521 weak_ptr_factory_.GetWeakPtr()));
522 return; 522 return;
523 } 523 }
524 524
525 // We are done with this cycle of association. 525 // We are done with this cycle of association. Stop any failed types now.
526 needs_stop_.clear();
527 for (DataTypeController::TypeMap::const_iterator it = controllers_->begin();
528 it != controllers_->end(); ++it) {
529 DataTypeController* dtc = (*it).second.get();
530 if (failed_data_types_info_.count(dtc->type()) > 0 &&
531 dtc->state() != DataTypeController::NOT_RUNNING) {
532 needs_stop_.push_back(dtc);
533 DVLOG(1) << "ModelTypeToString: Will stop " << dtc->name();
534 }
535 }
536 StopDisabledTypes();
537
526 state_ = IDLE; 538 state_ = IDLE;
527 539
528 DataTypeManager::ConfigureStatus configure_status = DataTypeManager::OK; 540 DataTypeManager::ConfigureStatus configure_status = DataTypeManager::OK;
529 541
530 if (!failed_data_types_info_.empty() || 542 if (!failed_data_types_info_.empty() ||
531 !GetTypesWaitingToLoad().Empty() || 543 !GetTypesWaitingToLoad().Empty() ||
532 !needs_crypto_types_.Empty()) { 544 !needs_crypto_types_.Empty()) {
533 // We have not configured all types that we have been asked to configure. 545 // We have not configured all types that we have been asked to configure.
534 // Either we have failed types or types that have not completed loading 546 // Either we have failed types or types that have not completed loading
535 // yet. 547 // yet.
(...skipping 20 matching lines...) Expand all
556 } 568 }
557 return result; 569 return result;
558 } 570 }
559 571
560 base::OneShotTimer<ModelAssociationManager>* 572 base::OneShotTimer<ModelAssociationManager>*
561 ModelAssociationManager::GetTimerForTesting() { 573 ModelAssociationManager::GetTimerForTesting() {
562 return &timer_; 574 return &timer_;
563 } 575 }
564 576
565 } // namespace browser_sync 577 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698