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 = |
| 208 InitializeServiceMetadata(db, batch); |
| 209 |
205 DatabaseContents contents; | 210 DatabaseContents contents; |
206 ReadDatabaseContents(db, &contents); | 211 ReadDatabaseContents(db, &contents); |
207 RemoveUnreachableItems(&contents, sync_root_tracker_id, batch); | 212 RemoveUnreachableItems(&contents, |
| 213 service_metadata->sync_root_tracker_id(), |
| 214 batch); |
208 | 215 |
209 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex); | 216 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex); |
210 index->Initialize(&contents); | 217 index->Initialize(service_metadata.Pass(), &contents); |
211 return index.Pass(); | 218 return index.Pass(); |
212 } | 219 } |
213 | 220 |
214 // static | 221 // static |
215 scoped_ptr<MetadataDatabaseIndex> | 222 scoped_ptr<MetadataDatabaseIndex> |
216 MetadataDatabaseIndex::CreateForTesting(DatabaseContents* contents) { | 223 MetadataDatabaseIndex::CreateForTesting(DatabaseContents* contents) { |
217 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex); | 224 scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex); |
218 index->Initialize(contents); | 225 index->Initialize(make_scoped_ptr(new ServiceMetadata), contents); |
219 return index.Pass(); | 226 return index.Pass(); |
220 } | 227 } |
221 | 228 |
222 void MetadataDatabaseIndex::Initialize(DatabaseContents* contents) { | 229 void MetadataDatabaseIndex::Initialize( |
| 230 scoped_ptr<ServiceMetadata> service_metadata, |
| 231 DatabaseContents* contents) { |
| 232 service_metadata_ = service_metadata.Pass(); |
| 233 |
223 for (size_t i = 0; i < contents->file_metadata.size(); ++i) | 234 for (size_t i = 0; i < contents->file_metadata.size(); ++i) |
224 StoreFileMetadata(make_scoped_ptr(contents->file_metadata[i]), NULL); | 235 StoreFileMetadata(make_scoped_ptr(contents->file_metadata[i]), NULL); |
225 contents->file_metadata.weak_clear(); | 236 contents->file_metadata.weak_clear(); |
226 | 237 |
227 for (size_t i = 0; i < contents->file_trackers.size(); ++i) | 238 for (size_t i = 0; i < contents->file_trackers.size(); ++i) |
228 StoreFileTracker(make_scoped_ptr(contents->file_trackers[i]), NULL); | 239 StoreFileTracker(make_scoped_ptr(contents->file_trackers[i]), NULL); |
229 contents->file_trackers.weak_clear(); | 240 contents->file_trackers.weak_clear(); |
230 | 241 |
231 UMA_HISTOGRAM_COUNTS("SyncFileSystem.MetadataNumber", metadata_by_id_.size()); | 242 UMA_HISTOGRAM_COUNTS("SyncFileSystem.MetadataNumber", metadata_by_id_.size()); |
232 UMA_HISTOGRAM_COUNTS("SyncFileSystem.TrackerNumber", tracker_by_id_.size()); | 243 UMA_HISTOGRAM_COUNTS("SyncFileSystem.TrackerNumber", tracker_by_id_.size()); |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 } | 415 } |
405 | 416 |
406 size_t MetadataDatabaseIndex::CountFileMetadata() const { | 417 size_t MetadataDatabaseIndex::CountFileMetadata() const { |
407 return metadata_by_id_.size(); | 418 return metadata_by_id_.size(); |
408 } | 419 } |
409 | 420 |
410 size_t MetadataDatabaseIndex::CountFileTracker() const { | 421 size_t MetadataDatabaseIndex::CountFileTracker() const { |
411 return tracker_by_id_.size(); | 422 return tracker_by_id_.size(); |
412 } | 423 } |
413 | 424 |
| 425 void MetadataDatabaseIndex::SetSyncRootTrackerID( |
| 426 int64 sync_root_id, leveldb::WriteBatch* batch) const { |
| 427 service_metadata_->set_sync_root_tracker_id(sync_root_id); |
| 428 if (batch) |
| 429 PutServiceMetadataToBatch(*service_metadata_, batch); |
| 430 } |
| 431 |
| 432 void MetadataDatabaseIndex::SetLargestChangeID( |
| 433 int64 largest_change_id, leveldb::WriteBatch* batch) const { |
| 434 service_metadata_->set_largest_change_id(largest_change_id); |
| 435 if (batch) |
| 436 PutServiceMetadataToBatch(*service_metadata_, batch); |
| 437 } |
| 438 |
| 439 void MetadataDatabaseIndex::SetNextTrackerID( |
| 440 int64 next_tracker_id, leveldb::WriteBatch* batch) const { |
| 441 service_metadata_->set_next_tracker_id(next_tracker_id); |
| 442 if (batch) |
| 443 PutServiceMetadataToBatch(*service_metadata_, batch); |
| 444 } |
| 445 |
| 446 int64 MetadataDatabaseIndex::GetSyncRootTrackerID() const { |
| 447 if (!service_metadata_->has_sync_root_tracker_id()) |
| 448 return kInvalidTrackerID; |
| 449 return service_metadata_->sync_root_tracker_id(); |
| 450 } |
| 451 |
| 452 int64 MetadataDatabaseIndex::GetLargestChangeID() const { |
| 453 if (!service_metadata_->has_largest_change_id()) |
| 454 return kInvalidTrackerID; |
| 455 return service_metadata_->largest_change_id(); |
| 456 } |
| 457 |
| 458 int64 MetadataDatabaseIndex::GetNextTrackerID() const { |
| 459 if (!service_metadata_->has_next_tracker_id()) { |
| 460 NOTREACHED(); |
| 461 return kInvalidTrackerID; |
| 462 } |
| 463 return service_metadata_->next_tracker_id(); |
| 464 } |
| 465 |
414 std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const { | 466 std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const { |
415 std::vector<std::string> result; | 467 std::vector<std::string> result; |
416 result.reserve(app_root_by_app_id_.size()); | 468 result.reserve(app_root_by_app_id_.size()); |
417 for (TrackerIDByAppID::const_iterator itr = app_root_by_app_id_.begin(); | 469 for (TrackerIDByAppID::const_iterator itr = app_root_by_app_id_.begin(); |
418 itr != app_root_by_app_id_.end(); ++itr) | 470 itr != app_root_by_app_id_.end(); ++itr) |
419 result.push_back(itr->first); | 471 result.push_back(itr->first); |
420 return result; | 472 return result; |
421 } | 473 } |
422 | 474 |
423 std::vector<int64> MetadataDatabaseIndex::GetAllTrackerIDs() const { | 475 std::vector<int64> MetadataDatabaseIndex::GetAllTrackerIDs() const { |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 | 741 |
690 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; | 742 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; |
691 dirty_trackers_.erase(tracker_id); | 743 dirty_trackers_.erase(tracker_id); |
692 | 744 |
693 demoted_dirty_trackers_.erase(tracker_id); | 745 demoted_dirty_trackers_.erase(tracker_id); |
694 } | 746 } |
695 } | 747 } |
696 | 748 |
697 } // namespace drive_backend | 749 } // namespace drive_backend |
698 } // namespace sync_file_system | 750 } // namespace sync_file_system |
OLD | NEW |