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(scoped_ptr<ServiceMetadata>(new ServiceMetadata), contents); |
tzik
2014/07/15 07:17:58
can be make_scoped_ptr?
| |
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 return kInvalidTrackerID; | |
tzik
2014/07/15 07:17:58
could you put NOTREACHED for this case?
peria
2014/07/15 09:00:58
Done.
| |
461 return service_metadata_->next_tracker_id(); | |
462 } | |
463 | |
414 std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const { | 464 std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const { |
415 std::vector<std::string> result; | 465 std::vector<std::string> result; |
416 result.reserve(app_root_by_app_id_.size()); | 466 result.reserve(app_root_by_app_id_.size()); |
417 for (TrackerIDByAppID::const_iterator itr = app_root_by_app_id_.begin(); | 467 for (TrackerIDByAppID::const_iterator itr = app_root_by_app_id_.begin(); |
418 itr != app_root_by_app_id_.end(); ++itr) | 468 itr != app_root_by_app_id_.end(); ++itr) |
419 result.push_back(itr->first); | 469 result.push_back(itr->first); |
420 return result; | 470 return result; |
421 } | 471 } |
422 | 472 |
423 std::vector<int64> MetadataDatabaseIndex::GetAllTrackerIDs() const { | 473 std::vector<int64> MetadataDatabaseIndex::GetAllTrackerIDs() const { |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
689 | 739 |
690 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; | 740 DVLOG(3) << " Remove from dirty_trackers_: " << tracker_id; |
691 dirty_trackers_.erase(tracker_id); | 741 dirty_trackers_.erase(tracker_id); |
692 | 742 |
693 demoted_dirty_trackers_.erase(tracker_id); | 743 demoted_dirty_trackers_.erase(tracker_id); |
694 } | 744 } |
695 } | 745 } |
696 | 746 |
697 } // namespace drive_backend | 747 } // namespace drive_backend |
698 } // namespace sync_file_system | 748 } // namespace sync_file_system |
OLD | NEW |