| 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 "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
| 10 #include "base/threading/thread_restrictions.h" |
| 10 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" | 11 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.
h" |
| 11 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" | 12 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" |
| 12 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 13 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
| 13 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" | 14 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" |
| 14 #include "chrome/browser/sync_file_system/logger.h" | 15 #include "chrome/browser/sync_file_system/logger.h" |
| 15 #include "third_party/leveldatabase/src/include/leveldb/db.h" | 16 #include "third_party/leveldatabase/src/include/leveldb/db.h" |
| 16 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" | 17 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" |
| 17 | 18 |
| 18 // LevelDB database schema | 19 // LevelDB database schema |
| 19 // ======================= | 20 // ======================= |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 PutFileMetadataDeletionToBatch(metadata->file_id(), batch); | 193 PutFileMetadataDeletionToBatch(metadata->file_id(), batch); |
| 193 } | 194 } |
| 194 } | 195 } |
| 195 contents->file_metadata = referred_file_metadata.Pass(); | 196 contents->file_metadata = referred_file_metadata.Pass(); |
| 196 } | 197 } |
| 197 | 198 |
| 198 } // namespace | 199 } // namespace |
| 199 | 200 |
| 200 // static | 201 // static |
| 201 scoped_ptr<MetadataDatabaseIndex> | 202 scoped_ptr<MetadataDatabaseIndex> |
| 202 MetadataDatabaseIndex::Create(leveldb::DB* db, | 203 MetadataDatabaseIndex::Create(leveldb::DB* db, leveldb::WriteBatch* batch) { |
| 203 int64 sync_root_tracker_id, | 204 DCHECK(db); |
| 204 leveldb::WriteBatch* batch) { | 205 DCHECK(batch); |
| 206 |
| 207 scoped_ptr<ServiceMetadata> service_metadata = InitializeServiceMetadata(db); |
| 205 DatabaseContents contents; | 208 DatabaseContents contents; |
| 206 ReadDatabaseContents(db, &contents); | 209 ReadDatabaseContents(db, &contents); |
| 207 RemoveUnreachableItems(&contents, sync_root_tracker_id, batch); | 210 RemoveUnreachableItems(&contents, |
| 211 service_metadata->sync_root_tracker_id(), |
| 212 batch); |
| 208 | 213 |
| 209 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex); | 214 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex); |
| 210 index->Initialize(&contents); | 215 index->Initialize(service_metadata.Pass(), &contents); |
| 211 return index.Pass(); | 216 return index.Pass(); |
| 212 } | 217 } |
| 213 | 218 |
| 214 // static | 219 // static |
| 215 scoped_ptr<MetadataDatabaseIndex> | 220 scoped_ptr<MetadataDatabaseIndex> |
| 216 MetadataDatabaseIndex::CreateForTesting(DatabaseContents* contents) { | 221 MetadataDatabaseIndex::CreateForTesting(DatabaseContents* contents) { |
| 217 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex); | 222 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex); |
| 218 index->Initialize(contents); | 223 index->Initialize(make_scoped_ptr(new ServiceMetadata), contents); |
| 219 return index.Pass(); | 224 return index.Pass(); |
| 220 } | 225 } |
| 221 | 226 |
| 222 void MetadataDatabaseIndex::Initialize(DatabaseContents* contents) { | 227 void MetadataDatabaseIndex::Initialize( |
| 228 scoped_ptr<ServiceMetadata> service_metadata, |
| 229 DatabaseContents* contents) { |
| 230 service_metadata_ = service_metadata.Pass(); |
| 231 |
| 223 for (size_t i = 0; i < contents->file_metadata.size(); ++i) | 232 for (size_t i = 0; i < contents->file_metadata.size(); ++i) |
| 224 StoreFileMetadata(make_scoped_ptr(contents->file_metadata[i]), NULL); | 233 StoreFileMetadata(make_scoped_ptr(contents->file_metadata[i]), NULL); |
| 225 contents->file_metadata.weak_clear(); | 234 contents->file_metadata.weak_clear(); |
| 226 | 235 |
| 227 for (size_t i = 0; i < contents->file_trackers.size(); ++i) | 236 for (size_t i = 0; i < contents->file_trackers.size(); ++i) |
| 228 StoreFileTracker(make_scoped_ptr(contents->file_trackers[i]), NULL); | 237 StoreFileTracker(make_scoped_ptr(contents->file_trackers[i]), NULL); |
| 229 contents->file_trackers.weak_clear(); | 238 contents->file_trackers.weak_clear(); |
| 230 | 239 |
| 231 UMA_HISTOGRAM_COUNTS("SyncFileSystem.MetadataNumber", metadata_by_id_.size()); | 240 UMA_HISTOGRAM_COUNTS("SyncFileSystem.MetadataNumber", metadata_by_id_.size()); |
| 232 UMA_HISTOGRAM_COUNTS("SyncFileSystem.TrackerNumber", tracker_by_id_.size()); | 241 UMA_HISTOGRAM_COUNTS("SyncFileSystem.TrackerNumber", tracker_by_id_.size()); |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 } | 413 } |
| 405 | 414 |
| 406 size_t MetadataDatabaseIndex::CountFileMetadata() const { | 415 size_t MetadataDatabaseIndex::CountFileMetadata() const { |
| 407 return metadata_by_id_.size(); | 416 return metadata_by_id_.size(); |
| 408 } | 417 } |
| 409 | 418 |
| 410 size_t MetadataDatabaseIndex::CountFileTracker() const { | 419 size_t MetadataDatabaseIndex::CountFileTracker() const { |
| 411 return tracker_by_id_.size(); | 420 return tracker_by_id_.size(); |
| 412 } | 421 } |
| 413 | 422 |
| 423 void MetadataDatabaseIndex::SetSyncRootTrackerID( |
| 424 int64 sync_root_id, leveldb::WriteBatch* batch) const { |
| 425 service_metadata_->set_sync_root_tracker_id(sync_root_id); |
| 426 PutServiceMetadataToBatch(*service_metadata_, batch); |
| 427 } |
| 428 |
| 429 void MetadataDatabaseIndex::SetLargestChangeID( |
| 430 int64 largest_change_id, leveldb::WriteBatch* batch) const { |
| 431 service_metadata_->set_largest_change_id(largest_change_id); |
| 432 PutServiceMetadataToBatch(*service_metadata_, batch); |
| 433 } |
| 434 |
| 435 void MetadataDatabaseIndex::SetNextTrackerID( |
| 436 int64 next_tracker_id, leveldb::WriteBatch* batch) const { |
| 437 service_metadata_->set_next_tracker_id(next_tracker_id); |
| 438 PutServiceMetadataToBatch(*service_metadata_, batch); |
| 439 } |
| 440 |
| 441 int64 MetadataDatabaseIndex::GetSyncRootTrackerID() const { |
| 442 if (!service_metadata_->has_sync_root_tracker_id()) |
| 443 return kInvalidTrackerID; |
| 444 return service_metadata_->sync_root_tracker_id(); |
| 445 } |
| 446 |
| 447 int64 MetadataDatabaseIndex::GetLargestChangeID() const { |
| 448 if (!service_metadata_->has_largest_change_id()) |
| 449 return kInvalidTrackerID; |
| 450 return service_metadata_->largest_change_id(); |
| 451 } |
| 452 |
| 453 int64 MetadataDatabaseIndex::GetNextTrackerID() const { |
| 454 if (!service_metadata_->has_next_tracker_id()) { |
| 455 NOTREACHED(); |
| 456 return kInvalidTrackerID; |
| 457 } |
| 458 return service_metadata_->next_tracker_id(); |
| 459 } |
| 460 |
| 414 std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const { | 461 std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const { |
| 415 std::vector<std::string> result; | 462 std::vector<std::string> result; |
| 416 result.reserve(app_root_by_app_id_.size()); | 463 result.reserve(app_root_by_app_id_.size()); |
| 417 for (TrackerIDByAppID::const_iterator itr = app_root_by_app_id_.begin(); | 464 for (TrackerIDByAppID::const_iterator itr = app_root_by_app_id_.begin(); |
| 418 itr != app_root_by_app_id_.end(); ++itr) | 465 itr != app_root_by_app_id_.end(); ++itr) |
| 419 result.push_back(itr->first); | 466 result.push_back(itr->first); |
| 420 return result; | 467 return result; |
| 421 } | 468 } |
| 422 | 469 |
| 423 std::vector<int64> MetadataDatabaseIndex::GetAllTrackerIDs() const { | 470 std::vector<int64> MetadataDatabaseIndex::GetAllTrackerIDs() const { |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 689 | 736 |
| 690 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; | 737 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; |
| 691 dirty_trackers_.erase(tracker_id); | 738 dirty_trackers_.erase(tracker_id); |
| 692 | 739 |
| 693 demoted_dirty_trackers_.erase(tracker_id); | 740 demoted_dirty_trackers_.erase(tracker_id); |
| 694 } | 741 } |
| 695 } | 742 } |
| 696 | 743 |
| 697 } // namespace drive_backend | 744 } // namespace drive_backend |
| 698 } // namespace sync_file_system | 745 } // namespace sync_file_system |
| OLD | NEW |