| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_file_system/drive_backend/metadata_database.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <stack> | 8 #include <stack> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 964 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 975 bool MetadataDatabase::GetLowPriorityDirtyTracker( | 975 bool MetadataDatabase::GetLowPriorityDirtyTracker( |
| 976 FileTracker* tracker) const { | 976 FileTracker* tracker) const { |
| 977 DCHECK(tracker); | 977 DCHECK(tracker); |
| 978 DirtyTrackers::const_iterator itr = low_priority_dirty_trackers_.begin(); | 978 DirtyTrackers::const_iterator itr = low_priority_dirty_trackers_.begin(); |
| 979 if (itr == low_priority_dirty_trackers_.end()) | 979 if (itr == low_priority_dirty_trackers_.end()) |
| 980 return false; | 980 return false; |
| 981 *tracker = **itr; | 981 *tracker = **itr; |
| 982 return true; | 982 return true; |
| 983 } | 983 } |
| 984 | 984 |
| 985 void MetadataDatabase::GetRegisteredAppIDs(std::vector<std::string>* app_ids) { |
| 986 DCHECK(app_ids); |
| 987 app_ids->clear(); |
| 988 app_ids->reserve(app_root_by_app_id_.size()); |
| 989 for (TrackerByAppID::iterator itr = app_root_by_app_id_.begin(); |
| 990 itr != app_root_by_app_id_.end(); ++itr) { |
| 991 app_ids->push_back(itr->first); |
| 992 } |
| 993 } |
| 994 |
| 995 void MetadataDatabase::MarkTrackerDirty(int64 tracker_id, |
| 996 const SyncStatusCallback& callback) { |
| 997 TrackerByID::iterator found = tracker_by_id_.find(tracker_id); |
| 998 if (found == tracker_by_id_.end()) { |
| 999 RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_OK)); |
| 1000 return; |
| 1001 } |
| 1002 |
| 1003 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch); |
| 1004 MarkSingleTrackerDirty(found->second, batch.get()); |
| 1005 WriteToDatabase(batch.Pass(), callback); |
| 1006 } |
| 1007 |
| 985 MetadataDatabase::MetadataDatabase(base::SequencedTaskRunner* task_runner) | 1008 MetadataDatabase::MetadataDatabase(base::SequencedTaskRunner* task_runner) |
| 986 : task_runner_(task_runner), | 1009 : task_runner_(task_runner), |
| 987 largest_known_change_id_(0), | 1010 largest_known_change_id_(0), |
| 988 weak_ptr_factory_(this) { | 1011 weak_ptr_factory_(this) { |
| 989 DCHECK(task_runner); | 1012 DCHECK(task_runner); |
| 990 } | 1013 } |
| 991 | 1014 |
| 992 // static | 1015 // static |
| 993 void MetadataDatabase::CreateOnTaskRunner( | 1016 void MetadataDatabase::CreateOnTaskRunner( |
| 994 base::SingleThreadTaskRunner* callback_runner, | 1017 base::SingleThreadTaskRunner* callback_runner, |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1369 TrackerSet* conflicting_trackers = &found_by_title->second; | 1392 TrackerSet* conflicting_trackers = &found_by_title->second; |
| 1370 conflicting_trackers->Erase(tracker); | 1393 conflicting_trackers->Erase(tracker); |
| 1371 | 1394 |
| 1372 if (conflicting_trackers->tracker_set().empty()) { | 1395 if (conflicting_trackers->tracker_set().empty()) { |
| 1373 trackers_by_title->erase(found_by_title); | 1396 trackers_by_title->erase(found_by_title); |
| 1374 if (trackers_by_title->empty()) | 1397 if (trackers_by_title->empty()) |
| 1375 trackers_by_parent_and_title_.erase(found); | 1398 trackers_by_parent_and_title_.erase(found); |
| 1376 } | 1399 } |
| 1377 } | 1400 } |
| 1378 | 1401 |
| 1402 void MetadataDatabase::MarkSingleTrackerDirty(FileTracker* tracker, |
| 1403 leveldb::WriteBatch* batch) { |
| 1404 if (!tracker->dirty()) { |
| 1405 tracker->set_dirty(true); |
| 1406 PutTrackerToBatch(*tracker, batch); |
| 1407 } |
| 1408 dirty_trackers_.insert(tracker); |
| 1409 low_priority_dirty_trackers_.erase(tracker); |
| 1410 } |
| 1411 |
| 1379 void MetadataDatabase::MarkTrackerSetDirty( | 1412 void MetadataDatabase::MarkTrackerSetDirty( |
| 1380 TrackerSet* trackers, | 1413 TrackerSet* trackers, |
| 1381 leveldb::WriteBatch* batch) { | 1414 leveldb::WriteBatch* batch) { |
| 1382 for (TrackerSet::iterator itr = trackers->begin(); | 1415 for (TrackerSet::iterator itr = trackers->begin(); |
| 1383 itr != trackers->end(); ++itr) { | 1416 itr != trackers->end(); ++itr) { |
| 1384 FileTracker* tracker = *itr; | 1417 MarkSingleTrackerDirty(*itr, batch); |
| 1385 if (tracker->dirty()) | |
| 1386 continue; | |
| 1387 tracker->set_dirty(true); | |
| 1388 PutTrackerToBatch(*tracker, batch); | |
| 1389 dirty_trackers_.insert(tracker); | |
| 1390 low_priority_dirty_trackers_.erase(tracker); | |
| 1391 } | 1418 } |
| 1392 } | 1419 } |
| 1393 | 1420 |
| 1394 void MetadataDatabase::MarkTrackersDirtyByFileID( | 1421 void MetadataDatabase::MarkTrackersDirtyByFileID( |
| 1395 const std::string& file_id, | 1422 const std::string& file_id, |
| 1396 leveldb::WriteBatch* batch) { | 1423 leveldb::WriteBatch* batch) { |
| 1397 TrackersByFileID::iterator found = trackers_by_file_id_.find(file_id); | 1424 TrackersByFileID::iterator found = trackers_by_file_id_.find(file_id); |
| 1398 if (found != trackers_by_file_id_.end()) | 1425 if (found != trackers_by_file_id_.end()) |
| 1399 MarkTrackerSetDirty(&found->second, batch); | 1426 MarkTrackerSetDirty(&found->second, batch); |
| 1400 } | 1427 } |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1580 details->SetString("dirty", tracker->dirty() ? "true" : "false"); | 1607 details->SetString("dirty", tracker->dirty() ? "true" : "false"); |
| 1581 | 1608 |
| 1582 file->Set("details", details); | 1609 file->Set("details", details); |
| 1583 | 1610 |
| 1584 files->Append(file); | 1611 files->Append(file); |
| 1585 } | 1612 } |
| 1586 | 1613 |
| 1587 return files.Pass(); | 1614 return files.Pass(); |
| 1588 } | 1615 } |
| 1589 | 1616 |
| 1590 void MetadataDatabase::GetRegisteredAppIDs(std::vector<std::string>* app_ids) { | |
| 1591 DCHECK(app_ids); | |
| 1592 app_ids->clear(); | |
| 1593 app_ids->reserve(app_root_by_app_id_.size()); | |
| 1594 for (TrackerByAppID::iterator itr = app_root_by_app_id_.begin(); | |
| 1595 itr != app_root_by_app_id_.end(); ++itr) { | |
| 1596 app_ids->push_back(itr->first); | |
| 1597 } | |
| 1598 } | |
| 1599 | |
| 1600 bool MetadataDatabase::HasNewerFileMetadata(const std::string& file_id, | 1617 bool MetadataDatabase::HasNewerFileMetadata(const std::string& file_id, |
| 1601 int64 change_id) { | 1618 int64 change_id) { |
| 1602 FileByID::const_iterator found = file_by_id_.find(file_id); | 1619 FileByID::const_iterator found = file_by_id_.find(file_id); |
| 1603 if (found == file_by_id_.end()) | 1620 if (found == file_by_id_.end()) |
| 1604 return false; | 1621 return false; |
| 1605 DCHECK(found->second->has_details()); | 1622 DCHECK(found->second->has_details()); |
| 1606 return found->second->details().change_id() >= change_id; | 1623 return found->second->details().change_id() >= change_id; |
| 1607 } | 1624 } |
| 1608 | 1625 |
| 1609 } // namespace drive_backend | 1626 } // namespace drive_backend |
| 1610 } // namespace sync_file_system | 1627 } // namespace sync_file_system |
| OLD | NEW |