| 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/conflict_resolver.h" | 5 #include "chrome/browser/sync/engine/conflict_resolver.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| 11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
| 12 #include "base/tracked.h" |
| 12 #include "chrome/browser/sync/engine/syncer.h" | 13 #include "chrome/browser/sync/engine/syncer.h" |
| 13 #include "chrome/browser/sync/engine/syncer_util.h" | 14 #include "chrome/browser/sync/engine/syncer_util.h" |
| 14 #include "chrome/browser/sync/protocol/service_constants.h" | 15 #include "chrome/browser/sync/protocol/service_constants.h" |
| 15 #include "chrome/browser/sync/sessions/status_controller.h" | 16 #include "chrome/browser/sync/sessions/status_controller.h" |
| 16 #include "chrome/browser/sync/syncable/directory_manager.h" | 17 #include "chrome/browser/sync/syncable/directory_manager.h" |
| 17 #include "chrome/browser/sync/syncable/syncable.h" | 18 #include "chrome/browser/sync/syncable/syncable.h" |
| 18 #include "chrome/common/deprecated/event_sys-inl.h" | 19 #include "chrome/common/deprecated/event_sys-inl.h" |
| 19 | 20 |
| 20 using std::map; | 21 using std::map; |
| 21 using std::set; | 22 using std::set; |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 UMA_HISTOGRAM_COUNTS("Sync.SyncerConflictStuck", 1); | 426 UMA_HISTOGRAM_COUNTS("Sync.SyncerConflictStuck", 1); |
| 426 | 427 |
| 427 return true; | 428 return true; |
| 428 // TODO(sync): If we're stuck for a while we need to alert the user, clear | 429 // TODO(sync): If we're stuck for a while we need to alert the user, clear |
| 429 // cache or reset syncing. At the very least we should stop trying something | 430 // cache or reset syncing. At the very least we should stop trying something |
| 430 // that's obviously not working. | 431 // that's obviously not working. |
| 431 } | 432 } |
| 432 | 433 |
| 433 bool ConflictResolver::ResolveSimpleConflicts(const ScopedDirLookup& dir, | 434 bool ConflictResolver::ResolveSimpleConflicts(const ScopedDirLookup& dir, |
| 434 StatusController* status) { | 435 StatusController* status) { |
| 435 WriteTransaction trans(dir, syncable::SYNCER, __FILE__, __LINE__); | 436 WriteTransaction trans(dir, syncable::SYNCER, FROM_HERE); |
| 436 bool forward_progress = false; | 437 bool forward_progress = false; |
| 437 const ConflictProgress& progress = status->conflict_progress(); | 438 const ConflictProgress& progress = status->conflict_progress(); |
| 438 // First iterate over simple conflict items (those that belong to no set). | 439 // First iterate over simple conflict items (those that belong to no set). |
| 439 set<Id>::const_iterator conflicting_item_it; | 440 set<Id>::const_iterator conflicting_item_it; |
| 440 for (conflicting_item_it = progress.ConflictingItemsBeginConst(); | 441 for (conflicting_item_it = progress.ConflictingItemsBeginConst(); |
| 441 conflicting_item_it != progress.ConflictingItemsEnd(); | 442 conflicting_item_it != progress.ConflictingItemsEnd(); |
| 442 ++conflicting_item_it) { | 443 ++conflicting_item_it) { |
| 443 Id id = *conflicting_item_it; | 444 Id id = *conflicting_item_it; |
| 444 map<Id, ConflictSet*>::const_iterator item_set_it = | 445 map<Id, ConflictSet*>::const_iterator item_set_it = |
| 445 progress.IdToConflictSetFind(id); | 446 progress.IdToConflictSetFind(id); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 470 } | 471 } |
| 471 return forward_progress; | 472 return forward_progress; |
| 472 } | 473 } |
| 473 | 474 |
| 474 bool ConflictResolver::ResolveConflicts(const ScopedDirLookup& dir, | 475 bool ConflictResolver::ResolveConflicts(const ScopedDirLookup& dir, |
| 475 StatusController* status) { | 476 StatusController* status) { |
| 476 const ConflictProgress& progress = status->conflict_progress(); | 477 const ConflictProgress& progress = status->conflict_progress(); |
| 477 bool rv = false; | 478 bool rv = false; |
| 478 if (ResolveSimpleConflicts(dir, status)) | 479 if (ResolveSimpleConflicts(dir, status)) |
| 479 rv = true; | 480 rv = true; |
| 480 WriteTransaction trans(dir, syncable::SYNCER, __FILE__, __LINE__); | 481 WriteTransaction trans(dir, syncable::SYNCER, FROM_HERE); |
| 481 set<ConflictSet*>::const_iterator set_it; | 482 set<ConflictSet*>::const_iterator set_it; |
| 482 for (set_it = progress.ConflictSetsBegin(); | 483 for (set_it = progress.ConflictSetsBegin(); |
| 483 set_it != progress.ConflictSetsEnd(); | 484 set_it != progress.ConflictSetsEnd(); |
| 484 set_it++) { | 485 set_it++) { |
| 485 ConflictSet* conflict_set = *set_it; | 486 ConflictSet* conflict_set = *set_it; |
| 486 ConflictSetCountMapKey key = GetSetKey(conflict_set); | 487 ConflictSetCountMapKey key = GetSetKey(conflict_set); |
| 487 conflict_set_count_map_[key] += 2; | 488 conflict_set_count_map_[key] += 2; |
| 488 int conflict_count = conflict_set_count_map_[key]; | 489 int conflict_count = conflict_set_count_map_[key]; |
| 489 // Keep a metric for new sets. | 490 // Keep a metric for new sets. |
| 490 if (2 == conflict_count) { | 491 if (2 == conflict_count) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 513 conflict_set_count_map_.erase(i++); | 514 conflict_set_count_map_.erase(i++); |
| 514 // METRIC self resolved conflict sets ++. | 515 // METRIC self resolved conflict sets ++. |
| 515 } else { | 516 } else { |
| 516 ++i; | 517 ++i; |
| 517 } | 518 } |
| 518 } | 519 } |
| 519 return rv; | 520 return rv; |
| 520 } | 521 } |
| 521 | 522 |
| 522 } // namespace browser_sync | 523 } // namespace browser_sync |
| OLD | NEW |