Chromium Code Reviews| 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 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 712 return service_metadata_->has_sync_root_tracker_id() && | 712 return service_metadata_->has_sync_root_tracker_id() && |
| 713 !!service_metadata_->sync_root_tracker_id(); | 713 !!service_metadata_->sync_root_tracker_id(); |
| 714 } | 714 } |
| 715 | 715 |
| 716 void MetadataDatabase::PopulateInitialData( | 716 void MetadataDatabase::PopulateInitialData( |
| 717 int64 largest_change_id, | 717 int64 largest_change_id, |
| 718 const google_apis::FileResource& sync_root_folder, | 718 const google_apis::FileResource& sync_root_folder, |
| 719 const ScopedVector<google_apis::FileResource>& app_root_folders, | 719 const ScopedVector<google_apis::FileResource>& app_root_folders, |
| 720 const SyncStatusCallback& callback) { | 720 const SyncStatusCallback& callback) { |
| 721 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 721 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
| 722 DCHECK(index_->tracker_by_id_.empty()); | |
| 723 DCHECK(index_->metadata_by_id_.empty()); | |
| 724 | 722 |
| 725 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch); | 723 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch); |
| 726 service_metadata_->set_largest_change_id(largest_change_id); | 724 service_metadata_->set_largest_change_id(largest_change_id); |
| 727 UpdateLargestKnownChangeID(largest_change_id); | 725 UpdateLargestKnownChangeID(largest_change_id); |
| 728 | 726 |
| 729 AttachSyncRoot(sync_root_folder, batch.get()); | 727 AttachSyncRoot(sync_root_folder, batch.get()); |
| 730 for (size_t i = 0; i < app_root_folders.size(); ++i) | 728 for (size_t i = 0; i < app_root_folders.size(); ++i) |
| 731 AttachInitialAppRoot(*app_root_folders[i], batch.get()); | 729 AttachInitialAppRoot(*app_root_folders[i], batch.get()); |
| 732 | 730 |
| 733 WriteToDatabase(batch.Pass(), callback); | 731 WriteToDatabase(batch.Pass(), callback); |
| (...skipping 726 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1460 return index_->HasDemotedDirtyTracker(); | 1458 return index_->HasDemotedDirtyTracker(); |
| 1461 } | 1459 } |
| 1462 | 1460 |
| 1463 bool MetadataDatabase::HasDirtyTracker() const { | 1461 bool MetadataDatabase::HasDirtyTracker() const { |
| 1464 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1462 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
| 1465 return index_->PickDirtyTracker() != kInvalidTrackerID; | 1463 return index_->PickDirtyTracker() != kInvalidTrackerID; |
| 1466 } | 1464 } |
| 1467 | 1465 |
| 1468 size_t MetadataDatabase::CountDirtyTracker() const { | 1466 size_t MetadataDatabase::CountDirtyTracker() const { |
| 1469 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1467 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
| 1470 return index_->dirty_trackers_.size() + | 1468 return index_->CountDirtyTracker(); |
| 1471 index_->demoted_dirty_trackers_.size(); | |
| 1472 } | 1469 } |
| 1473 | 1470 |
| 1474 bool MetadataDatabase::GetMultiParentFileTrackers(std::string* file_id_out, | 1471 bool MetadataDatabase::GetMultiParentFileTrackers(std::string* file_id_out, |
| 1475 TrackerIDSet* trackers_out) { | 1472 TrackerIDSet* trackers_out) { |
| 1476 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1473 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
| 1477 DCHECK(file_id_out); | 1474 DCHECK(file_id_out); |
| 1478 DCHECK(trackers_out); | 1475 DCHECK(trackers_out); |
| 1479 | 1476 |
| 1480 std::string file_id = index_->PickMultiTrackerFileID(); | 1477 std::string file_id = index_->PickMultiTrackerFileID(); |
| 1481 if (file_id.empty()) | 1478 if (file_id.empty()) |
| 1482 return false; | 1479 return false; |
| 1483 | 1480 |
| 1484 TrackerIDSet trackers = index_->GetFileTrackerIDsByFileID(file_id); | 1481 TrackerIDSet trackers = index_->GetFileTrackerIDsByFileID(file_id); |
| 1485 if (trackers.size() <= 1) { | 1482 if (trackers.size() <= 1) { |
| 1486 NOTREACHED(); | 1483 NOTREACHED(); |
| 1487 return false; | 1484 return false; |
| 1488 } | 1485 } |
| 1489 | 1486 |
| 1490 *file_id_out = file_id; | 1487 *file_id_out = file_id; |
| 1491 std::swap(*trackers_out, trackers); | 1488 std::swap(*trackers_out, trackers); |
| 1492 return true; | 1489 return true; |
| 1493 } | 1490 } |
| 1494 | 1491 |
| 1495 size_t MetadataDatabase::CountFileMetadata() const { | 1492 size_t MetadataDatabase::CountFileMetadata() const { |
| 1496 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1493 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
| 1497 return index_->metadata_by_id_.size(); | 1494 return index_->CountFileMetadata(); |
| 1498 } | 1495 } |
| 1499 | 1496 |
| 1500 size_t MetadataDatabase::CountFileTracker() const { | 1497 size_t MetadataDatabase::CountFileTracker() const { |
| 1501 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1498 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
| 1502 return index_->tracker_by_id_.size(); | 1499 return index_->CountFileTracker(); |
| 1503 } | 1500 } |
| 1504 | 1501 |
| 1505 bool MetadataDatabase::GetConflictingTrackers(TrackerIDSet* trackers_out) { | 1502 bool MetadataDatabase::GetConflictingTrackers(TrackerIDSet* trackers_out) { |
| 1506 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1503 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
| 1507 DCHECK(trackers_out); | 1504 DCHECK(trackers_out); |
| 1508 | 1505 |
| 1509 ParentIDAndTitle parent_and_title = index_->PickMultiBackingFilePath(); | 1506 ParentIDAndTitle parent_and_title = index_->PickMultiBackingFilePath(); |
| 1510 if (parent_and_title.parent_id == kInvalidTrackerID) | 1507 if (parent_and_title.parent_id == kInvalidTrackerID) |
| 1511 return false; | 1508 return false; |
| 1512 | 1509 |
| (...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1969 }; | 1966 }; |
| 1970 std::vector<std::string> key_strings( | 1967 std::vector<std::string> key_strings( |
| 1971 trackerKeys, trackerKeys + ARRAYSIZE_UNSAFE(trackerKeys)); | 1968 trackerKeys, trackerKeys + ARRAYSIZE_UNSAFE(trackerKeys)); |
| 1972 base::ListValue* keys = new base::ListValue; | 1969 base::ListValue* keys = new base::ListValue; |
| 1973 keys->AppendStrings(key_strings); | 1970 keys->AppendStrings(key_strings); |
| 1974 metadata->SetString("title", "Trackers"); | 1971 metadata->SetString("title", "Trackers"); |
| 1975 metadata->Set("keys", keys); | 1972 metadata->Set("keys", keys); |
| 1976 trackers->Append(metadata); | 1973 trackers->Append(metadata); |
| 1977 | 1974 |
| 1978 // Append tracker data. | 1975 // Append tracker data. |
| 1979 for (MetadataDatabaseIndex::TrackerByID::const_iterator itr = | 1976 std::vector<int64> tracker_ids(index_->GetAllTrackerIDs()); |
| 1980 index_->tracker_by_id_.begin(); | 1977 for (std::vector<int64>::const_iterator itr = tracker_ids.begin(); |
| 1981 itr != index_->tracker_by_id_.end(); ++itr) { | 1978 itr != tracker_ids.end(); ++itr) { |
| 1982 const FileTracker& tracker = *itr->second; | 1979 const int64 tracker_id = *itr; |
| 1980 const FileTracker& tracker = *(index_->GetFileTracker(tracker_id)); | |
|
tzik
2014/06/19 06:23:11
Could you change this type to FileTracker* and add
peria
2014/06/19 06:30:55
Done.
| |
| 1981 | |
| 1983 base::DictionaryValue* dict = new base::DictionaryValue; | 1982 base::DictionaryValue* dict = new base::DictionaryValue; |
| 1984 base::FilePath path = BuildDisplayPathForTracker(tracker); | 1983 base::FilePath path = BuildDisplayPathForTracker(tracker); |
| 1985 dict->SetString("tracker_id", base::Int64ToString(tracker.tracker_id())); | 1984 dict->SetString("tracker_id", base::Int64ToString(tracker_id)); |
| 1986 dict->SetString("path", path.AsUTF8Unsafe()); | 1985 dict->SetString("path", path.AsUTF8Unsafe()); |
| 1987 dict->SetString("file_id", tracker.file_id()); | 1986 dict->SetString("file_id", tracker.file_id()); |
| 1988 TrackerKind tracker_kind = tracker.tracker_kind(); | 1987 TrackerKind tracker_kind = tracker.tracker_kind(); |
| 1989 dict->SetString( | 1988 dict->SetString( |
| 1990 "tracker_kind", | 1989 "tracker_kind", |
| 1991 tracker_kind == TRACKER_KIND_APP_ROOT ? "AppRoot" : | 1990 tracker_kind == TRACKER_KIND_APP_ROOT ? "AppRoot" : |
| 1992 tracker_kind == TRACKER_KIND_DISABLED_APP_ROOT ? "Disabled App" : | 1991 tracker_kind == TRACKER_KIND_DISABLED_APP_ROOT ? "Disabled App" : |
| 1993 tracker.tracker_id() == GetSyncRootTrackerID() ? "SyncRoot" : | 1992 tracker.tracker_id() == GetSyncRootTrackerID() ? "SyncRoot" : |
| 1994 "Regular"); | 1993 "Regular"); |
| 1995 dict->SetString("app_id", tracker.app_id()); | 1994 dict->SetString("app_id", tracker.app_id()); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 2024 }; | 2023 }; |
| 2025 std::vector<std::string> key_strings( | 2024 std::vector<std::string> key_strings( |
| 2026 fileKeys, fileKeys + ARRAYSIZE_UNSAFE(fileKeys)); | 2025 fileKeys, fileKeys + ARRAYSIZE_UNSAFE(fileKeys)); |
| 2027 base::ListValue* keys = new base::ListValue; | 2026 base::ListValue* keys = new base::ListValue; |
| 2028 keys->AppendStrings(key_strings); | 2027 keys->AppendStrings(key_strings); |
| 2029 metadata->SetString("title", "Metadata"); | 2028 metadata->SetString("title", "Metadata"); |
| 2030 metadata->Set("keys", keys); | 2029 metadata->Set("keys", keys); |
| 2031 files->Append(metadata); | 2030 files->Append(metadata); |
| 2032 | 2031 |
| 2033 // Append metadata data. | 2032 // Append metadata data. |
| 2034 for (MetadataDatabaseIndex::MetadataByID::const_iterator itr = | 2033 std::vector<std::string> metadata_ids(index_->GetAllMetadataIDs()); |
| 2035 index_->metadata_by_id_.begin(); | 2034 for (std::vector<std::string>::const_iterator itr = metadata_ids.begin(); |
| 2036 itr != index_->metadata_by_id_.end(); ++itr) { | 2035 itr != metadata_ids.end(); ++itr) { |
| 2037 const FileMetadata& file = *itr->second; | 2036 const std::string& file_id = *itr; |
| 2037 const FileMetadata *file = index_->GetFileMetadata(file_id); | |
|
tzik
2014/06/19 06:23:11
ditto.
peria
2014/06/19 06:30:55
Done.
| |
| 2038 | 2038 |
| 2039 base::DictionaryValue* dict = new base::DictionaryValue; | 2039 base::DictionaryValue* dict = new base::DictionaryValue; |
| 2040 dict->SetString("file_id", file.file_id()); | 2040 dict->SetString("file_id", file_id); |
| 2041 if (file.has_details()) { | 2041 if (file->has_details()) { |
| 2042 const FileDetails& details = file.details(); | 2042 const FileDetails& details = file->details(); |
| 2043 dict->SetString("title", details.title()); | 2043 dict->SetString("title", details.title()); |
| 2044 dict->SetString("type", FileKindToString(details.file_kind())); | 2044 dict->SetString("type", FileKindToString(details.file_kind())); |
| 2045 dict->SetString("md5", details.md5()); | 2045 dict->SetString("md5", details.md5()); |
| 2046 dict->SetString("etag", details.etag()); | 2046 dict->SetString("etag", details.etag()); |
| 2047 dict->SetString("missing", details.missing() ? "true" : "false"); | 2047 dict->SetString("missing", details.missing() ? "true" : "false"); |
| 2048 dict->SetString("change_id", base::Int64ToString(details.change_id())); | 2048 dict->SetString("change_id", base::Int64ToString(details.change_id())); |
| 2049 | 2049 |
| 2050 std::vector<std::string> parents; | 2050 std::vector<std::string> parents; |
| 2051 for (int i = 0; i < details.parent_folder_ids_size(); ++i) | 2051 for (int i = 0; i < details.parent_folder_ids_size(); ++i) |
| 2052 parents.push_back(details.parent_folder_ids(i)); | 2052 parents.push_back(details.parent_folder_ids(i)); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2095 index_->StoreFileMetadata(app_root_metadata.Pass()); | 2095 index_->StoreFileMetadata(app_root_metadata.Pass()); |
| 2096 index_->StoreFileTracker(app_root_tracker.Pass()); | 2096 index_->StoreFileTracker(app_root_tracker.Pass()); |
| 2097 } | 2097 } |
| 2098 | 2098 |
| 2099 void MetadataDatabase::DetachFromSequence() { | 2099 void MetadataDatabase::DetachFromSequence() { |
| 2100 worker_sequence_checker_.DetachFromSequence(); | 2100 worker_sequence_checker_.DetachFromSequence(); |
| 2101 } | 2101 } |
| 2102 | 2102 |
| 2103 } // namespace drive_backend | 2103 } // namespace drive_backend |
| 2104 } // namespace sync_file_system | 2104 } // namespace sync_file_system |
| OLD | NEW |