Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(224)

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/metadata_database_index_on_disk.cc

Issue 1873683002: Convert //chrome/browser/sync_file_system from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_ on_disk.h" 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database_index_ on_disk.h"
6 6
7 #include "base/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 151
152 void RemoveUnreachableItemsFromDB(LevelDBWrapper* db, 152 void RemoveUnreachableItemsFromDB(LevelDBWrapper* db,
153 int64_t sync_root_tracker_id) { 153 int64_t sync_root_tracker_id) {
154 DCHECK(db); 154 DCHECK(db);
155 155
156 typedef std::map<int64_t, std::set<int64_t>> ChildTrackersByParent; 156 typedef std::map<int64_t, std::set<int64_t>> ChildTrackersByParent;
157 ChildTrackersByParent trackers_by_parent; 157 ChildTrackersByParent trackers_by_parent;
158 { 158 {
159 // Set up links from parent tracker to child trackers. 159 // Set up links from parent tracker to child trackers.
160 std::set<int64_t> inactive_trackers; 160 std::set<int64_t> inactive_trackers;
161 scoped_ptr<LevelDBWrapper::Iterator> itr = db->NewIterator(); 161 std::unique_ptr<LevelDBWrapper::Iterator> itr = db->NewIterator();
162 for (itr->Seek(kFileTrackerKeyPrefix); itr->Valid(); itr->Next()) { 162 for (itr->Seek(kFileTrackerKeyPrefix); itr->Valid(); itr->Next()) {
163 if (!RemovePrefix(itr->key().ToString(), kFileTrackerKeyPrefix, nullptr)) 163 if (!RemovePrefix(itr->key().ToString(), kFileTrackerKeyPrefix, nullptr))
164 break; 164 break;
165 165
166 scoped_ptr<FileTracker> tracker(new FileTracker); 166 std::unique_ptr<FileTracker> tracker(new FileTracker);
167 if (!tracker->ParseFromString(itr->value().ToString())) { 167 if (!tracker->ParseFromString(itr->value().ToString())) {
168 util::Log(logging::LOG_WARNING, FROM_HERE, 168 util::Log(logging::LOG_WARNING, FROM_HERE,
169 "Failed to parse a Tracker"); 169 "Failed to parse a Tracker");
170 continue; 170 continue;
171 } 171 }
172 172
173 int64_t parent_tracker_id = tracker->parent_tracker_id(); 173 int64_t parent_tracker_id = tracker->parent_tracker_id();
174 int64_t tracker_id = tracker->tracker_id(); 174 int64_t tracker_id = tracker->tracker_id();
175 trackers_by_parent[parent_tracker_id].insert(tracker_id); 175 trackers_by_parent[parent_tracker_id].insert(tracker_id);
176 if (!tracker->active()) 176 if (!tracker->active())
(...skipping 27 matching lines...) Expand all
204 AppendContents( 204 AppendContents(
205 LookUpMap(trackers_by_parent, tracker_id, std::set<int64_t>()), 205 LookUpMap(trackers_by_parent, tracker_id, std::set<int64_t>()),
206 &pending); 206 &pending);
207 } 207 }
208 } 208 }
209 209
210 // Delete all unreachable trackers, and list all |file_id| referred by 210 // Delete all unreachable trackers, and list all |file_id| referred by
211 // remained trackers. 211 // remained trackers.
212 base::hash_set<std::string> referred_file_ids; 212 base::hash_set<std::string> referred_file_ids;
213 { 213 {
214 scoped_ptr<LevelDBWrapper::Iterator> itr = db->NewIterator(); 214 std::unique_ptr<LevelDBWrapper::Iterator> itr = db->NewIterator();
215 for (itr->Seek(kFileTrackerKeyPrefix); itr->Valid(); itr->Next()) { 215 for (itr->Seek(kFileTrackerKeyPrefix); itr->Valid(); itr->Next()) {
216 if (!RemovePrefix(itr->key().ToString(), kFileTrackerKeyPrefix, nullptr)) 216 if (!RemovePrefix(itr->key().ToString(), kFileTrackerKeyPrefix, nullptr))
217 break; 217 break;
218 218
219 scoped_ptr<FileTracker> tracker(new FileTracker); 219 std::unique_ptr<FileTracker> tracker(new FileTracker);
220 if (!tracker->ParseFromString(itr->value().ToString())) { 220 if (!tracker->ParseFromString(itr->value().ToString())) {
221 util::Log(logging::LOG_WARNING, FROM_HERE, 221 util::Log(logging::LOG_WARNING, FROM_HERE,
222 "Failed to parse a Tracker"); 222 "Failed to parse a Tracker");
223 continue; 223 continue;
224 } 224 }
225 225
226 if (ContainsKey(visited_trackers, tracker->tracker_id())) { 226 if (ContainsKey(visited_trackers, tracker->tracker_id())) {
227 referred_file_ids.insert(tracker->file_id()); 227 referred_file_ids.insert(tracker->file_id());
228 } else { 228 } else {
229 PutFileTrackerDeletionToDB(tracker->tracker_id(), db); 229 PutFileTrackerDeletionToDB(tracker->tracker_id(), db);
230 } 230 }
231 } 231 }
232 } 232 }
233 233
234 // Delete all unreferred metadata. 234 // Delete all unreferred metadata.
235 { 235 {
236 scoped_ptr<LevelDBWrapper::Iterator> itr = db->NewIterator(); 236 std::unique_ptr<LevelDBWrapper::Iterator> itr = db->NewIterator();
237 for (itr->Seek(kFileMetadataKeyPrefix); itr->Valid(); itr->Next()) { 237 for (itr->Seek(kFileMetadataKeyPrefix); itr->Valid(); itr->Next()) {
238 if (!RemovePrefix(itr->key().ToString(), kFileMetadataKeyPrefix, nullptr)) 238 if (!RemovePrefix(itr->key().ToString(), kFileMetadataKeyPrefix, nullptr))
239 break; 239 break;
240 240
241 scoped_ptr<FileMetadata> metadata(new FileMetadata); 241 std::unique_ptr<FileMetadata> metadata(new FileMetadata);
242 if (!metadata->ParseFromString(itr->value().ToString())) { 242 if (!metadata->ParseFromString(itr->value().ToString())) {
243 util::Log(logging::LOG_WARNING, FROM_HERE, 243 util::Log(logging::LOG_WARNING, FROM_HERE,
244 "Failed to parse a Tracker"); 244 "Failed to parse a Tracker");
245 continue; 245 continue;
246 } 246 }
247 247
248 if (!ContainsKey(referred_file_ids, metadata->file_id())) 248 if (!ContainsKey(referred_file_ids, metadata->file_id()))
249 PutFileMetadataDeletionToDB(metadata->file_id(), db); 249 PutFileMetadataDeletionToDB(metadata->file_id(), db);
250 } 250 }
251 } 251 }
252 } 252 }
253 253
254 } // namespace 254 } // namespace
255 255
256 // static 256 // static
257 scoped_ptr<MetadataDatabaseIndexOnDisk> 257 std::unique_ptr<MetadataDatabaseIndexOnDisk>
258 MetadataDatabaseIndexOnDisk::Create(LevelDBWrapper* db) { 258 MetadataDatabaseIndexOnDisk::Create(LevelDBWrapper* db) {
259 DCHECK(db); 259 DCHECK(db);
260 260
261 scoped_ptr<ServiceMetadata> service_metadata = InitializeServiceMetadata(db); 261 std::unique_ptr<ServiceMetadata> service_metadata =
262 InitializeServiceMetadata(db);
262 if (!service_metadata) 263 if (!service_metadata)
263 return nullptr; 264 return nullptr;
264 265
265 PutVersionToDB(kDatabaseOnDiskVersion, db); 266 PutVersionToDB(kDatabaseOnDiskVersion, db);
266 RemoveUnreachableItemsFromDB(db, service_metadata->sync_root_tracker_id()); 267 RemoveUnreachableItemsFromDB(db, service_metadata->sync_root_tracker_id());
267 scoped_ptr<MetadataDatabaseIndexOnDisk> 268 std::unique_ptr<MetadataDatabaseIndexOnDisk> index(
268 index(new MetadataDatabaseIndexOnDisk(db)); 269 new MetadataDatabaseIndexOnDisk(db));
269 270
270 return index; 271 return index;
271 } 272 }
272 273
273 MetadataDatabaseIndexOnDisk::~MetadataDatabaseIndexOnDisk() {} 274 MetadataDatabaseIndexOnDisk::~MetadataDatabaseIndexOnDisk() {}
274 275
275 void MetadataDatabaseIndexOnDisk::RemoveUnreachableItems() { 276 void MetadataDatabaseIndexOnDisk::RemoveUnreachableItems() {
276 RemoveUnreachableItemsFromDB( 277 RemoveUnreachableItemsFromDB(
277 db_, service_metadata_->sync_root_tracker_id()); 278 db_, service_metadata_->sync_root_tracker_id());
278 DeleteTrackerIndexes(); 279 DeleteTrackerIndexes();
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 tracker_id); 335 tracker_id);
335 return false; 336 return false;
336 } 337 }
337 if (tracker) 338 if (tracker)
338 tracker->CopyFrom(tmp_tracker); 339 tracker->CopyFrom(tmp_tracker);
339 340
340 return true; 341 return true;
341 } 342 }
342 343
343 void MetadataDatabaseIndexOnDisk::StoreFileMetadata( 344 void MetadataDatabaseIndexOnDisk::StoreFileMetadata(
344 scoped_ptr<FileMetadata> metadata) { 345 std::unique_ptr<FileMetadata> metadata) {
345 DCHECK(metadata); 346 DCHECK(metadata);
346 PutFileMetadataToDB(*metadata, db_); 347 PutFileMetadataToDB(*metadata, db_);
347 } 348 }
348 349
349 void MetadataDatabaseIndexOnDisk::StoreFileTracker( 350 void MetadataDatabaseIndexOnDisk::StoreFileTracker(
350 scoped_ptr<FileTracker> tracker) { 351 std::unique_ptr<FileTracker> tracker) {
351 DCHECK(tracker); 352 DCHECK(tracker);
352 353
353 int64_t tracker_id = tracker->tracker_id(); 354 int64_t tracker_id = tracker->tracker_id();
354 FileTracker old_tracker; 355 FileTracker old_tracker;
355 if (!GetFileTracker(tracker_id, &old_tracker)) { 356 if (!GetFileTracker(tracker_id, &old_tracker)) {
356 DVLOG(3) << "Adding new tracker: " << tracker->tracker_id() 357 DVLOG(3) << "Adding new tracker: " << tracker->tracker_id()
357 << " " << GetTrackerTitle(*tracker); 358 << " " << GetTrackerTitle(*tracker);
358 AddToAppIDIndex(*tracker); 359 AddToAppIDIndex(*tracker);
359 AddToFileIDIndexes(*tracker); 360 AddToFileIDIndexes(*tracker);
360 AddToPathIndexes(*tracker); 361 AddToPathIndexes(*tracker);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 return GetTrackerIDSetByPrefix( 436 return GetTrackerIDSetByPrefix(
436 GenerateActiveTrackerIDByParentAndTitleKey(parent_tracker_id, title), 437 GenerateActiveTrackerIDByParentAndTitleKey(parent_tracker_id, title),
437 GenerateTrackerIDByParentAndTitleKeyPrefix(parent_tracker_id, title)); 438 GenerateTrackerIDByParentAndTitleKeyPrefix(parent_tracker_id, title));
438 } 439 }
439 440
440 std::vector<int64_t> MetadataDatabaseIndexOnDisk::GetFileTrackerIDsByParent( 441 std::vector<int64_t> MetadataDatabaseIndexOnDisk::GetFileTrackerIDsByParent(
441 int64_t parent_id) const { 442 int64_t parent_id) const {
442 std::vector<int64_t> result; 443 std::vector<int64_t> result;
443 444
444 const std::string prefix = GenerateTrackerIDsByParentIDKeyPrefix(parent_id); 445 const std::string prefix = GenerateTrackerIDsByParentIDKeyPrefix(parent_id);
445 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 446 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
446 for (itr->Seek(prefix); itr->Valid(); itr->Next()) { 447 for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
447 const std::string& key(itr->key().ToString()); 448 const std::string& key(itr->key().ToString());
448 std::string title_and_id; 449 std::string title_and_id;
449 if (!RemovePrefix(key, prefix, &title_and_id)) 450 if (!RemovePrefix(key, prefix, &title_and_id))
450 break; 451 break;
451 452
452 size_t pos = title_and_id.rfind('\0'); 453 size_t pos = title_and_id.rfind('\0');
453 DCHECK(pos != std::string::npos); 454 DCHECK(pos != std::string::npos);
454 455
455 int64_t tracker_id; 456 int64_t tracker_id;
456 if (!base::StringToInt64(title_and_id.substr(pos + 1), &tracker_id)) 457 if (!base::StringToInt64(title_and_id.substr(pos + 1), &tracker_id))
457 continue; 458 continue;
458 result.push_back(tracker_id); 459 result.push_back(tracker_id);
459 } 460 }
460 return result; 461 return result;
461 } 462 }
462 463
463 std::string MetadataDatabaseIndexOnDisk::PickMultiTrackerFileID() const { 464 std::string MetadataDatabaseIndexOnDisk::PickMultiTrackerFileID() const {
464 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 465 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
465 itr->Seek(kMultiTrackerByFileIDKeyPrefix); 466 itr->Seek(kMultiTrackerByFileIDKeyPrefix);
466 if (!itr->Valid()) 467 if (!itr->Valid())
467 return std::string(); 468 return std::string();
468 469
469 std::string file_id; 470 std::string file_id;
470 if (!RemovePrefix(itr->key().ToString(), 471 if (!RemovePrefix(itr->key().ToString(),
471 kMultiTrackerByFileIDKeyPrefix, &file_id)) 472 kMultiTrackerByFileIDKeyPrefix, &file_id))
472 return std::string(); 473 return std::string();
473 474
474 return file_id; 475 return file_id;
475 } 476 }
476 477
477 ParentIDAndTitle MetadataDatabaseIndexOnDisk::PickMultiBackingFilePath() const { 478 ParentIDAndTitle MetadataDatabaseIndexOnDisk::PickMultiBackingFilePath() const {
478 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 479 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
479 itr->Seek(kMultiBackingParentAndTitleKeyPrefix); 480 itr->Seek(kMultiBackingParentAndTitleKeyPrefix);
480 if (!itr->Valid()) 481 if (!itr->Valid())
481 return ParentIDAndTitle(); 482 return ParentIDAndTitle();
482 483
483 std::string value; 484 std::string value;
484 if (!RemovePrefix(itr->key().ToString(), 485 if (!RemovePrefix(itr->key().ToString(),
485 kMultiBackingParentAndTitleKeyPrefix, &value)) 486 kMultiBackingParentAndTitleKeyPrefix, &value))
486 return ParentIDAndTitle(); 487 return ParentIDAndTitle();
487 488
488 size_t pos = value.find('\0'); // '\0' is a separator. 489 size_t pos = value.find('\0'); // '\0' is a separator.
489 if (pos == std::string::npos) 490 if (pos == std::string::npos)
490 return ParentIDAndTitle(); 491 return ParentIDAndTitle();
491 492
492 int64_t parent_id; 493 int64_t parent_id;
493 return base::StringToInt64(value.substr(0, pos), &parent_id) ? 494 return base::StringToInt64(value.substr(0, pos), &parent_id) ?
494 ParentIDAndTitle(parent_id, value.substr(pos + 1)) : ParentIDAndTitle(); 495 ParentIDAndTitle(parent_id, value.substr(pos + 1)) : ParentIDAndTitle();
495 } 496 }
496 497
497 int64_t MetadataDatabaseIndexOnDisk::PickDirtyTracker() const { 498 int64_t MetadataDatabaseIndexOnDisk::PickDirtyTracker() const {
498 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 499 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
499 itr->Seek(kDirtyIDKeyPrefix); 500 itr->Seek(kDirtyIDKeyPrefix);
500 if (!itr->Valid()) 501 if (!itr->Valid())
501 return kInvalidTrackerID; 502 return kInvalidTrackerID;
502 503
503 std::string id_str; 504 std::string id_str;
504 if (!RemovePrefix(itr->key().ToString(), kDirtyIDKeyPrefix, &id_str)) 505 if (!RemovePrefix(itr->key().ToString(), kDirtyIDKeyPrefix, &id_str))
505 return kInvalidTrackerID; 506 return kInvalidTrackerID;
506 507
507 int64_t tracker_id; 508 int64_t tracker_id;
508 if (!base::StringToInt64(id_str, &tracker_id)) 509 if (!base::StringToInt64(id_str, &tracker_id))
(...skipping 16 matching lines...) Expand all
525 tracker_id); 526 tracker_id);
526 return; 527 return;
527 } 528 }
528 529
529 db_->Delete(key); 530 db_->Delete(key);
530 db_->Put(GenerateDemotedDirtyIDKey(tracker_id), std::string()); 531 db_->Put(GenerateDemotedDirtyIDKey(tracker_id), std::string());
531 --num_dirty_trackers_; 532 --num_dirty_trackers_;
532 } 533 }
533 534
534 bool MetadataDatabaseIndexOnDisk::HasDemotedDirtyTracker() const { 535 bool MetadataDatabaseIndexOnDisk::HasDemotedDirtyTracker() const {
535 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 536 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
536 itr->Seek(kDemotedDirtyIDKeyPrefix); 537 itr->Seek(kDemotedDirtyIDKeyPrefix);
537 if (!itr->Valid()) 538 if (!itr->Valid())
538 return false; 539 return false;
539 return base::StartsWith(itr->key().ToString(), kDemotedDirtyIDKeyPrefix, 540 return base::StartsWith(itr->key().ToString(), kDemotedDirtyIDKeyPrefix,
540 base::CompareCase::SENSITIVE); 541 base::CompareCase::SENSITIVE);
541 } 542 }
542 543
543 bool MetadataDatabaseIndexOnDisk::IsDemotedDirtyTracker( 544 bool MetadataDatabaseIndexOnDisk::IsDemotedDirtyTracker(
544 int64_t tracker_id) const { 545 int64_t tracker_id) const {
545 return DBHasKey(GenerateDemotedDirtyIDKey(tracker_id)); 546 return DBHasKey(GenerateDemotedDirtyIDKey(tracker_id));
546 } 547 }
547 548
548 void MetadataDatabaseIndexOnDisk::PromoteDemotedDirtyTracker( 549 void MetadataDatabaseIndexOnDisk::PromoteDemotedDirtyTracker(
549 int64_t tracker_id) { 550 int64_t tracker_id) {
550 std::string demoted_key = GenerateDemotedDirtyIDKey(tracker_id); 551 std::string demoted_key = GenerateDemotedDirtyIDKey(tracker_id);
551 552
552 std::string empty; 553 std::string empty;
553 if (db_->Get(demoted_key, &empty).ok()) { 554 if (db_->Get(demoted_key, &empty).ok()) {
554 db_->Delete(demoted_key); 555 db_->Delete(demoted_key);
555 db_->Put(GenerateDirtyIDKey(tracker_id), std::string()); 556 db_->Put(GenerateDirtyIDKey(tracker_id), std::string());
556 ++num_dirty_trackers_; 557 ++num_dirty_trackers_;
557 } 558 }
558 } 559 }
559 560
560 bool MetadataDatabaseIndexOnDisk::PromoteDemotedDirtyTrackers() { 561 bool MetadataDatabaseIndexOnDisk::PromoteDemotedDirtyTrackers() {
561 bool promoted = false; 562 bool promoted = false;
562 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 563 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
563 for (itr->Seek(kDemotedDirtyIDKeyPrefix); itr->Valid(); itr->Next()) { 564 for (itr->Seek(kDemotedDirtyIDKeyPrefix); itr->Valid(); itr->Next()) {
564 std::string id_str; 565 std::string id_str;
565 if (!RemovePrefix(itr->key().ToString(), kDemotedDirtyIDKeyPrefix, &id_str)) 566 if (!RemovePrefix(itr->key().ToString(), kDemotedDirtyIDKeyPrefix, &id_str))
566 break; 567 break;
567 568
568 int64_t tracker_id; 569 int64_t tracker_id;
569 if (!base::StringToInt64(id_str, &tracker_id)) 570 if (!base::StringToInt64(id_str, &tracker_id))
570 continue; 571 continue;
571 572
572 db_->Delete(itr->key().ToString()); 573 db_->Delete(itr->key().ToString());
573 db_->Put(GenerateDirtyIDKey(tracker_id), std::string()); 574 db_->Put(GenerateDirtyIDKey(tracker_id), std::string());
574 ++num_dirty_trackers_; 575 ++num_dirty_trackers_;
575 promoted = true; 576 promoted = true;
576 } 577 }
577 return promoted; 578 return promoted;
578 } 579 }
579 580
580 size_t MetadataDatabaseIndexOnDisk::CountDirtyTracker() const { 581 size_t MetadataDatabaseIndexOnDisk::CountDirtyTracker() const {
581 return num_dirty_trackers_; 582 return num_dirty_trackers_;
582 } 583 }
583 584
584 size_t MetadataDatabaseIndexOnDisk::CountFileMetadata() const { 585 size_t MetadataDatabaseIndexOnDisk::CountFileMetadata() const {
585 // TODO(peria): Cache the number of FileMetadata in the DB. 586 // TODO(peria): Cache the number of FileMetadata in the DB.
586 size_t count = 0; 587 size_t count = 0;
587 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 588 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
588 for (itr->Seek(kFileMetadataKeyPrefix); itr->Valid(); itr->Next()) { 589 for (itr->Seek(kFileMetadataKeyPrefix); itr->Valid(); itr->Next()) {
589 if (!base::StartsWith(itr->key().ToString(), kFileMetadataKeyPrefix, 590 if (!base::StartsWith(itr->key().ToString(), kFileMetadataKeyPrefix,
590 base::CompareCase::SENSITIVE)) 591 base::CompareCase::SENSITIVE))
591 break; 592 break;
592 ++count; 593 ++count;
593 } 594 }
594 return count; 595 return count;
595 } 596 }
596 597
597 size_t MetadataDatabaseIndexOnDisk::CountFileTracker() const { 598 size_t MetadataDatabaseIndexOnDisk::CountFileTracker() const {
598 // TODO(peria): Cache the number of FileTracker in the DB. 599 // TODO(peria): Cache the number of FileTracker in the DB.
599 size_t count = 0; 600 size_t count = 0;
600 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 601 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
601 for (itr->Seek(kFileTrackerKeyPrefix); itr->Valid(); itr->Next()) { 602 for (itr->Seek(kFileTrackerKeyPrefix); itr->Valid(); itr->Next()) {
602 if (!base::StartsWith(itr->key().ToString(), kFileTrackerKeyPrefix, 603 if (!base::StartsWith(itr->key().ToString(), kFileTrackerKeyPrefix,
603 base::CompareCase::SENSITIVE)) 604 base::CompareCase::SENSITIVE))
604 break; 605 break;
605 ++count; 606 ++count;
606 } 607 }
607 return count; 608 return count;
608 } 609 }
609 610
610 void MetadataDatabaseIndexOnDisk::SetSyncRootRevalidated() const { 611 void MetadataDatabaseIndexOnDisk::SetSyncRootRevalidated() const {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 650
650 int64_t MetadataDatabaseIndexOnDisk::GetNextTrackerID() const { 651 int64_t MetadataDatabaseIndexOnDisk::GetNextTrackerID() const {
651 if (!service_metadata_->has_next_tracker_id()) 652 if (!service_metadata_->has_next_tracker_id())
652 return kInvalidTrackerID; 653 return kInvalidTrackerID;
653 return service_metadata_->next_tracker_id(); 654 return service_metadata_->next_tracker_id();
654 } 655 }
655 656
656 std::vector<std::string> 657 std::vector<std::string>
657 MetadataDatabaseIndexOnDisk::GetRegisteredAppIDs() const { 658 MetadataDatabaseIndexOnDisk::GetRegisteredAppIDs() const {
658 std::vector<std::string> result; 659 std::vector<std::string> result;
659 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 660 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
660 for (itr->Seek(kAppRootIDByAppIDKeyPrefix); itr->Valid(); itr->Next()) { 661 for (itr->Seek(kAppRootIDByAppIDKeyPrefix); itr->Valid(); itr->Next()) {
661 std::string id; 662 std::string id;
662 if (!RemovePrefix(itr->key().ToString(), kAppRootIDByAppIDKeyPrefix, &id)) 663 if (!RemovePrefix(itr->key().ToString(), kAppRootIDByAppIDKeyPrefix, &id))
663 break; 664 break;
664 result.push_back(id); 665 result.push_back(id);
665 } 666 }
666 return result; 667 return result;
667 } 668 }
668 669
669 std::vector<int64_t> MetadataDatabaseIndexOnDisk::GetAllTrackerIDs() const { 670 std::vector<int64_t> MetadataDatabaseIndexOnDisk::GetAllTrackerIDs() const {
670 std::vector<int64_t> tracker_ids; 671 std::vector<int64_t> tracker_ids;
671 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 672 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
672 for (itr->Seek(kFileTrackerKeyPrefix); itr->Valid(); itr->Next()) { 673 for (itr->Seek(kFileTrackerKeyPrefix); itr->Valid(); itr->Next()) {
673 std::string id_str; 674 std::string id_str;
674 if (!RemovePrefix(itr->key().ToString(), kFileTrackerKeyPrefix, &id_str)) 675 if (!RemovePrefix(itr->key().ToString(), kFileTrackerKeyPrefix, &id_str))
675 break; 676 break;
676 677
677 int64_t tracker_id; 678 int64_t tracker_id;
678 if (!base::StringToInt64(id_str, &tracker_id)) 679 if (!base::StringToInt64(id_str, &tracker_id))
679 continue; 680 continue;
680 tracker_ids.push_back(tracker_id); 681 tracker_ids.push_back(tracker_id);
681 } 682 }
682 return tracker_ids; 683 return tracker_ids;
683 } 684 }
684 685
685 std::vector<std::string> 686 std::vector<std::string>
686 MetadataDatabaseIndexOnDisk::GetAllMetadataIDs() const { 687 MetadataDatabaseIndexOnDisk::GetAllMetadataIDs() const {
687 std::vector<std::string> file_ids; 688 std::vector<std::string> file_ids;
688 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 689 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
689 for (itr->Seek(kFileMetadataKeyPrefix); itr->Valid(); itr->Next()) { 690 for (itr->Seek(kFileMetadataKeyPrefix); itr->Valid(); itr->Next()) {
690 std::string file_id; 691 std::string file_id;
691 if (!RemovePrefix(itr->key().ToString(), kFileMetadataKeyPrefix, &file_id)) 692 if (!RemovePrefix(itr->key().ToString(), kFileMetadataKeyPrefix, &file_id))
692 break; 693 break;
693 file_ids.push_back(file_id); 694 file_ids.push_back(file_id);
694 } 695 }
695 return file_ids; 696 return file_ids;
696 } 697 }
697 698
698 int64_t MetadataDatabaseIndexOnDisk::BuildTrackerIndexes() { 699 int64_t MetadataDatabaseIndexOnDisk::BuildTrackerIndexes() {
699 int64_t num_puts_before = db_->num_puts(); 700 int64_t num_puts_before = db_->num_puts();
700 701
701 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 702 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
702 for (itr->Seek(kFileTrackerKeyPrefix); itr->Valid(); itr->Next()) { 703 for (itr->Seek(kFileTrackerKeyPrefix); itr->Valid(); itr->Next()) {
703 if (!RemovePrefix(itr->key().ToString(), kFileTrackerKeyPrefix, nullptr)) 704 if (!RemovePrefix(itr->key().ToString(), kFileTrackerKeyPrefix, nullptr))
704 break; 705 break;
705 706
706 FileTracker tracker; 707 FileTracker tracker;
707 if (!tracker.ParseFromString(itr->value().ToString())) { 708 if (!tracker.ParseFromString(itr->value().ToString())) {
708 util::Log(logging::LOG_WARNING, FROM_HERE, 709 util::Log(logging::LOG_WARNING, FROM_HERE,
709 "Failed to parse a Tracker"); 710 "Failed to parse a Tracker");
710 continue; 711 continue;
711 } 712 }
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 const FileTracker& new_tracker) { 886 const FileTracker& new_tracker) {
886 int64_t parent_id = new_tracker.parent_tracker_id(); 887 int64_t parent_id = new_tracker.parent_tracker_id();
887 std::string title = GetTrackerTitle(new_tracker); 888 std::string title = GetTrackerTitle(new_tracker);
888 889
889 DVLOG(1) << " Add to trackers by parent and title: " 890 DVLOG(1) << " Add to trackers by parent and title: "
890 << parent_id << " " << title; 891 << parent_id << " " << title;
891 892
892 const std::string prefix = 893 const std::string prefix =
893 GenerateTrackerIDByParentAndTitleKeyPrefix(parent_id, title); 894 GenerateTrackerIDByParentAndTitleKeyPrefix(parent_id, title);
894 if (!title.empty()) { 895 if (!title.empty()) {
895 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 896 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
896 for (itr->Seek(prefix); itr->Valid(); itr->Next()) { 897 for (itr->Seek(prefix); itr->Valid(); itr->Next()) {
897 std::string id_str; 898 std::string id_str;
898 if (!RemovePrefix(itr->key().ToString(), prefix, &id_str)) 899 if (!RemovePrefix(itr->key().ToString(), prefix, &id_str))
899 break; 900 break;
900 901
901 int64_t tracker_id; 902 int64_t tracker_id;
902 if (!base::StringToInt64(id_str, &tracker_id)) 903 if (!base::StringToInt64(id_str, &tracker_id))
903 continue; 904 continue;
904 if (tracker_id == new_tracker.tracker_id()) { 905 if (tracker_id == new_tracker.tracker_id()) {
905 NOTREACHED(); 906 NOTREACHED();
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
1067 db_->Delete(demoted_key); 1068 db_->Delete(demoted_key);
1068 } 1069 }
1069 } 1070 }
1070 1071
1071 TrackerIDSet MetadataDatabaseIndexOnDisk::GetTrackerIDSetByPrefix( 1072 TrackerIDSet MetadataDatabaseIndexOnDisk::GetTrackerIDSetByPrefix(
1072 const std::string& active_tracker_key, 1073 const std::string& active_tracker_key,
1073 const std::string& ids_prefix) const { 1074 const std::string& ids_prefix) const {
1074 TrackerIDSet trackers; 1075 TrackerIDSet trackers;
1075 1076
1076 // Seek IDs. 1077 // Seek IDs.
1077 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 1078 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
1078 for (itr->Seek(ids_prefix); itr->Valid(); itr->Next()) { 1079 for (itr->Seek(ids_prefix); itr->Valid(); itr->Next()) {
1079 const std::string& key(itr->key().ToString()); 1080 const std::string& key(itr->key().ToString());
1080 std::string id_str; 1081 std::string id_str;
1081 if (!RemovePrefix(key, ids_prefix, &id_str)) 1082 if (!RemovePrefix(key, ids_prefix, &id_str))
1082 break; 1083 break;
1083 1084
1084 int64_t tracker_id; 1085 int64_t tracker_id;
1085 if (!base::StringToInt64(id_str, &tracker_id)) 1086 if (!base::StringToInt64(id_str, &tracker_id))
1086 continue; 1087 continue;
1087 trackers.InsertInactiveTracker(tracker_id); 1088 trackers.InsertInactiveTracker(tracker_id);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1157 std::string value; 1158 std::string value;
1158 leveldb::Status status = db_->Get(active_tracker_key, &value); 1159 leveldb::Status status = db_->Get(active_tracker_key, &value);
1159 int64_t active_tracker_id; 1160 int64_t active_tracker_id;
1160 if (status.ok() && base::StringToInt64(value, &active_tracker_id)) { 1161 if (status.ok() && base::StringToInt64(value, &active_tracker_id)) {
1161 DCHECK(active_tracker_id == tracker_id); 1162 DCHECK(active_tracker_id == tracker_id);
1162 db_->Delete(active_tracker_key); 1163 db_->Delete(active_tracker_key);
1163 } 1164 }
1164 } 1165 }
1165 1166
1166 bool MetadataDatabaseIndexOnDisk::DBHasKey(const std::string& key) const { 1167 bool MetadataDatabaseIndexOnDisk::DBHasKey(const std::string& key) const {
1167 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 1168 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
1168 itr->Seek(key); 1169 itr->Seek(key);
1169 return itr->Valid() && (itr->key() == key); 1170 return itr->Valid() && (itr->key() == key);
1170 } 1171 }
1171 1172
1172 size_t MetadataDatabaseIndexOnDisk::CountDirtyTrackerInternal() const { 1173 size_t MetadataDatabaseIndexOnDisk::CountDirtyTrackerInternal() const {
1173 size_t num_dirty_trackers = 0; 1174 size_t num_dirty_trackers = 0;
1174 1175
1175 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 1176 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
1176 for (itr->Seek(kDirtyIDKeyPrefix); itr->Valid(); itr->Next()) { 1177 for (itr->Seek(kDirtyIDKeyPrefix); itr->Valid(); itr->Next()) {
1177 if (!base::StartsWith(itr->key().ToString(), kDirtyIDKeyPrefix, 1178 if (!base::StartsWith(itr->key().ToString(), kDirtyIDKeyPrefix,
1178 base::CompareCase::SENSITIVE)) 1179 base::CompareCase::SENSITIVE))
1179 break; 1180 break;
1180 ++num_dirty_trackers; 1181 ++num_dirty_trackers;
1181 } 1182 }
1182 1183
1183 return num_dirty_trackers; 1184 return num_dirty_trackers;
1184 } 1185 }
1185 1186
1186 MetadataDatabaseIndexOnDisk::NumEntries 1187 MetadataDatabaseIndexOnDisk::NumEntries
1187 MetadataDatabaseIndexOnDisk::CountWithPrefix(const std::string& prefix, 1188 MetadataDatabaseIndexOnDisk::CountWithPrefix(const std::string& prefix,
1188 int64_t ignored_id) { 1189 int64_t ignored_id) {
1189 const std::string ignored = base::Int64ToString(ignored_id); 1190 const std::string ignored = base::Int64ToString(ignored_id);
1190 1191
1191 size_t count = 0; 1192 size_t count = 0;
1192 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 1193 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
1193 for (itr->Seek(prefix); itr->Valid() && count <= 1; itr->Next()) { 1194 for (itr->Seek(prefix); itr->Valid() && count <= 1; itr->Next()) {
1194 std::string value; 1195 std::string value;
1195 if (!RemovePrefix(itr->key().ToString(), prefix, &value)) 1196 if (!RemovePrefix(itr->key().ToString(), prefix, &value))
1196 break; 1197 break;
1197 if (value == ignored) 1198 if (value == ignored)
1198 continue; 1199 continue;
1199 1200
1200 ++count; 1201 ++count;
1201 } 1202 }
1202 1203
1203 if (count >= 2) 1204 if (count >= 2)
1204 return MULTIPLE; 1205 return MULTIPLE;
1205 return count == 0 ? NONE : SINGLE; 1206 return count == 0 ? NONE : SINGLE;
1206 } 1207 }
1207 1208
1208 void MetadataDatabaseIndexOnDisk::DeleteKeyStartsWith( 1209 void MetadataDatabaseIndexOnDisk::DeleteKeyStartsWith(
1209 const std::string& prefix) { 1210 const std::string& prefix) {
1210 scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); 1211 std::unique_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
1211 for (itr->Seek(prefix); itr->Valid();) { 1212 for (itr->Seek(prefix); itr->Valid();) {
1212 const std::string key = itr->key().ToString(); 1213 const std::string key = itr->key().ToString();
1213 if (!base::StartsWith(key, prefix, base::CompareCase::SENSITIVE)) 1214 if (!base::StartsWith(key, prefix, base::CompareCase::SENSITIVE))
1214 break; 1215 break;
1215 itr->Delete(); 1216 itr->Delete();
1216 } 1217 }
1217 } 1218 }
1218 1219
1219 } // namespace drive_backend 1220 } // namespace drive_backend
1220 } // namespace sync_file_system 1221 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698