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 |