| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_index.
h" | 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index.
h" |
| 6 | 6 |
| 7 #include <tuple> | 7 #include <tuple> |
| 8 #include <utility> |
| 8 | 9 |
| 9 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| 10 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
| 12 #include "base/threading/thread_restrictions.h" | 13 #include "base/threading/thread_restrictions.h" |
| 13 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" | 14 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" |
| 14 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" | 15 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" |
| 15 #include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h" | 16 #include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h" |
| 16 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 17 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
| 17 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" | 18 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 ScopedVector<FileTracker> reachable_trackers; | 169 ScopedVector<FileTracker> reachable_trackers; |
| 169 for (size_t i = 0; i < contents->file_trackers.size(); ++i) { | 170 for (size_t i = 0; i < contents->file_trackers.size(); ++i) { |
| 170 FileTracker* tracker = contents->file_trackers[i]; | 171 FileTracker* tracker = contents->file_trackers[i]; |
| 171 if (ContainsKey(visited_trackers, tracker->tracker_id())) { | 172 if (ContainsKey(visited_trackers, tracker->tracker_id())) { |
| 172 reachable_trackers.push_back(tracker); | 173 reachable_trackers.push_back(tracker); |
| 173 contents->file_trackers[i] = nullptr; | 174 contents->file_trackers[i] = nullptr; |
| 174 } else { | 175 } else { |
| 175 PutFileTrackerDeletionToDB(tracker->tracker_id(), db); | 176 PutFileTrackerDeletionToDB(tracker->tracker_id(), db); |
| 176 } | 177 } |
| 177 } | 178 } |
| 178 contents->file_trackers = reachable_trackers.Pass(); | 179 contents->file_trackers = std::move(reachable_trackers); |
| 179 | 180 |
| 180 // List all |file_id| referred by a tracker. | 181 // List all |file_id| referred by a tracker. |
| 181 base::hash_set<std::string> referred_file_ids; | 182 base::hash_set<std::string> referred_file_ids; |
| 182 for (size_t i = 0; i < contents->file_trackers.size(); ++i) | 183 for (size_t i = 0; i < contents->file_trackers.size(); ++i) |
| 183 referred_file_ids.insert(contents->file_trackers[i]->file_id()); | 184 referred_file_ids.insert(contents->file_trackers[i]->file_id()); |
| 184 | 185 |
| 185 // Delete all unreferred metadata. | 186 // Delete all unreferred metadata. |
| 186 ScopedVector<FileMetadata> referred_file_metadata; | 187 ScopedVector<FileMetadata> referred_file_metadata; |
| 187 for (size_t i = 0; i < contents->file_metadata.size(); ++i) { | 188 for (size_t i = 0; i < contents->file_metadata.size(); ++i) { |
| 188 FileMetadata* metadata = contents->file_metadata[i]; | 189 FileMetadata* metadata = contents->file_metadata[i]; |
| 189 if (ContainsKey(referred_file_ids, metadata->file_id())) { | 190 if (ContainsKey(referred_file_ids, metadata->file_id())) { |
| 190 referred_file_metadata.push_back(metadata); | 191 referred_file_metadata.push_back(metadata); |
| 191 contents->file_metadata[i] = nullptr; | 192 contents->file_metadata[i] = nullptr; |
| 192 } else { | 193 } else { |
| 193 PutFileMetadataDeletionToDB(metadata->file_id(), db); | 194 PutFileMetadataDeletionToDB(metadata->file_id(), db); |
| 194 } | 195 } |
| 195 } | 196 } |
| 196 contents->file_metadata = referred_file_metadata.Pass(); | 197 contents->file_metadata = std::move(referred_file_metadata); |
| 197 } | 198 } |
| 198 | 199 |
| 199 } // namespace | 200 } // namespace |
| 200 | 201 |
| 201 // static | 202 // static |
| 202 scoped_ptr<MetadataDatabaseIndex> | 203 scoped_ptr<MetadataDatabaseIndex> |
| 203 MetadataDatabaseIndex::Create(LevelDBWrapper* db) { | 204 MetadataDatabaseIndex::Create(LevelDBWrapper* db) { |
| 204 DCHECK(db); | 205 DCHECK(db); |
| 205 | 206 |
| 206 scoped_ptr<ServiceMetadata> service_metadata = InitializeServiceMetadata(db); | 207 scoped_ptr<ServiceMetadata> service_metadata = InitializeServiceMetadata(db); |
| 207 if (!service_metadata) | 208 if (!service_metadata) |
| 208 return scoped_ptr<MetadataDatabaseIndex>(); | 209 return scoped_ptr<MetadataDatabaseIndex>(); |
| 209 | 210 |
| 210 DatabaseContents contents; | 211 DatabaseContents contents; |
| 211 PutVersionToDB(kCurrentDatabaseVersion, db); | 212 PutVersionToDB(kCurrentDatabaseVersion, db); |
| 212 ReadDatabaseContents(db, &contents); | 213 ReadDatabaseContents(db, &contents); |
| 213 RemoveUnreachableItemsFromDB(&contents, | 214 RemoveUnreachableItemsFromDB(&contents, |
| 214 service_metadata->sync_root_tracker_id(), | 215 service_metadata->sync_root_tracker_id(), |
| 215 db); | 216 db); |
| 216 | 217 |
| 217 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex(db)); | 218 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex(db)); |
| 218 index->Initialize(service_metadata.Pass(), &contents); | 219 index->Initialize(std::move(service_metadata), &contents); |
| 219 return index.Pass(); | 220 return index; |
| 220 } | 221 } |
| 221 | 222 |
| 222 // static | 223 // static |
| 223 scoped_ptr<MetadataDatabaseIndex> | 224 scoped_ptr<MetadataDatabaseIndex> |
| 224 MetadataDatabaseIndex::CreateForTesting(DatabaseContents* contents, | 225 MetadataDatabaseIndex::CreateForTesting(DatabaseContents* contents, |
| 225 LevelDBWrapper* db) { | 226 LevelDBWrapper* db) { |
| 226 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex(db)); | 227 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex(db)); |
| 227 index->Initialize(make_scoped_ptr(new ServiceMetadata), contents); | 228 index->Initialize(make_scoped_ptr(new ServiceMetadata), contents); |
| 228 return index.Pass(); | 229 return index; |
| 229 } | 230 } |
| 230 | 231 |
| 231 void MetadataDatabaseIndex::Initialize( | 232 void MetadataDatabaseIndex::Initialize( |
| 232 scoped_ptr<ServiceMetadata> service_metadata, | 233 scoped_ptr<ServiceMetadata> service_metadata, |
| 233 DatabaseContents* contents) { | 234 DatabaseContents* contents) { |
| 234 service_metadata_ = service_metadata.Pass(); | 235 service_metadata_ = std::move(service_metadata); |
| 235 | 236 |
| 236 for (size_t i = 0; i < contents->file_metadata.size(); ++i) | 237 for (size_t i = 0; i < contents->file_metadata.size(); ++i) |
| 237 StoreFileMetadata(make_scoped_ptr(contents->file_metadata[i])); | 238 StoreFileMetadata(make_scoped_ptr(contents->file_metadata[i])); |
| 238 contents->file_metadata.weak_clear(); | 239 contents->file_metadata.weak_clear(); |
| 239 | 240 |
| 240 for (size_t i = 0; i < contents->file_trackers.size(); ++i) | 241 for (size_t i = 0; i < contents->file_trackers.size(); ++i) |
| 241 StoreFileTracker(make_scoped_ptr(contents->file_trackers[i])); | 242 StoreFileTracker(make_scoped_ptr(contents->file_trackers[i])); |
| 242 contents->file_trackers.weak_clear(); | 243 contents->file_trackers.weak_clear(); |
| 243 | 244 |
| 244 UMA_HISTOGRAM_COUNTS("SyncFileSystem.MetadataNumber", metadata_by_id_.size()); | 245 UMA_HISTOGRAM_COUNTS("SyncFileSystem.MetadataNumber", metadata_by_id_.size()); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 | 279 |
| 279 void MetadataDatabaseIndex::StoreFileMetadata( | 280 void MetadataDatabaseIndex::StoreFileMetadata( |
| 280 scoped_ptr<FileMetadata> metadata) { | 281 scoped_ptr<FileMetadata> metadata) { |
| 281 PutFileMetadataToDB(*metadata.get(), db_); | 282 PutFileMetadataToDB(*metadata.get(), db_); |
| 282 if (!metadata) { | 283 if (!metadata) { |
| 283 NOTREACHED(); | 284 NOTREACHED(); |
| 284 return; | 285 return; |
| 285 } | 286 } |
| 286 | 287 |
| 287 std::string file_id = metadata->file_id(); | 288 std::string file_id = metadata->file_id(); |
| 288 metadata_by_id_.set(file_id, metadata.Pass()); | 289 metadata_by_id_.set(file_id, std::move(metadata)); |
| 289 } | 290 } |
| 290 | 291 |
| 291 void MetadataDatabaseIndex::StoreFileTracker( | 292 void MetadataDatabaseIndex::StoreFileTracker( |
| 292 scoped_ptr<FileTracker> tracker) { | 293 scoped_ptr<FileTracker> tracker) { |
| 293 PutFileTrackerToDB(*tracker.get(), db_); | 294 PutFileTrackerToDB(*tracker.get(), db_); |
| 294 if (!tracker) { | 295 if (!tracker) { |
| 295 NOTREACHED(); | 296 NOTREACHED(); |
| 296 return; | 297 return; |
| 297 } | 298 } |
| 298 | 299 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 310 } else { | 311 } else { |
| 311 DVLOG(3) << "Updating tracker: " << tracker->tracker_id() | 312 DVLOG(3) << "Updating tracker: " << tracker->tracker_id() |
| 312 << " " << GetTrackerTitle(*tracker); | 313 << " " << GetTrackerTitle(*tracker); |
| 313 | 314 |
| 314 UpdateInAppIDIndex(*old_tracker, *tracker); | 315 UpdateInAppIDIndex(*old_tracker, *tracker); |
| 315 UpdateInPathIndexes(*old_tracker, *tracker); | 316 UpdateInPathIndexes(*old_tracker, *tracker); |
| 316 UpdateInFileIDIndexes(*old_tracker, *tracker); | 317 UpdateInFileIDIndexes(*old_tracker, *tracker); |
| 317 UpdateInDirtyTrackerIndexes(*old_tracker, *tracker); | 318 UpdateInDirtyTrackerIndexes(*old_tracker, *tracker); |
| 318 } | 319 } |
| 319 | 320 |
| 320 tracker_by_id_.set(tracker_id, tracker.Pass()); | 321 tracker_by_id_.set(tracker_id, std::move(tracker)); |
| 321 } | 322 } |
| 322 | 323 |
| 323 void MetadataDatabaseIndex::RemoveFileMetadata(const std::string& file_id) { | 324 void MetadataDatabaseIndex::RemoveFileMetadata(const std::string& file_id) { |
| 324 PutFileMetadataDeletionToDB(file_id, db_); | 325 PutFileMetadataDeletionToDB(file_id, db_); |
| 325 metadata_by_id_.erase(file_id); | 326 metadata_by_id_.erase(file_id); |
| 326 } | 327 } |
| 327 | 328 |
| 328 void MetadataDatabaseIndex::RemoveFileTracker(int64_t tracker_id) { | 329 void MetadataDatabaseIndex::RemoveFileTracker(int64_t tracker_id) { |
| 329 PutFileTrackerDeletionToDB(tracker_id, db_); | 330 PutFileTrackerDeletionToDB(tracker_id, db_); |
| 330 | 331 |
| (...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 | 763 |
| 763 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; | 764 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; |
| 764 dirty_trackers_.erase(tracker_id); | 765 dirty_trackers_.erase(tracker_id); |
| 765 | 766 |
| 766 demoted_dirty_trackers_.erase(tracker_id); | 767 demoted_dirty_trackers_.erase(tracker_id); |
| 767 } | 768 } |
| 768 } | 769 } |
| 769 | 770 |
| 770 } // namespace drive_backend | 771 } // namespace drive_backend |
| 771 } // namespace sync_file_system | 772 } // namespace sync_file_system |
| OLD | NEW |