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

Side by Side Diff: chrome/browser/chromeos/drive/resource_metadata_storage.cc

Issue 55713002: drive: Use base_name recovered from trashed DB when DB corruption happens (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use title Created 7 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/chromeos/drive/resource_metadata_storage.h" 5 #include "chrome/browser/chromeos/drive/resource_metadata_storage.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 init_result = LevelDBStatusToDBInitStatus(status); 470 init_result = LevelDBStatusToDBInitStatus(status);
471 } 471 }
472 } 472 }
473 473
474 UMA_HISTOGRAM_ENUMERATION("Drive.MetadataDBInitResult", 474 UMA_HISTOGRAM_ENUMERATION("Drive.MetadataDBInitResult",
475 init_result, 475 init_result,
476 DB_INIT_MAX_VALUE); 476 DB_INIT_MAX_VALUE);
477 return resource_map_; 477 return resource_map_;
478 } 478 }
479 479
480 void ResourceMetadataStorage::RecoverCacheEntriesFromTrashedResourceMap( 480 void ResourceMetadataStorage::RecoverCacheInfoFromTrashedResourceMap(
481 std::map<std::string, FileCacheEntry>* out_entries) { 481 RecoveredCacheInfoMap* out_info) {
482 const base::FilePath trashed_resource_map_path = 482 const base::FilePath trashed_resource_map_path =
483 directory_path_.Append(kTrashedResourceMapDBName); 483 directory_path_.Append(kTrashedResourceMapDBName);
484 484
485 if (!base::PathExists(trashed_resource_map_path)) 485 if (!base::PathExists(trashed_resource_map_path))
486 return; 486 return;
487 487
488 leveldb::Options options; 488 leveldb::Options options;
489 options.max_open_files = 0; // Use minimum. 489 options.max_open_files = 0; // Use minimum.
490 options.create_if_missing = false; 490 options.create_if_missing = false;
491 491
(...skipping 27 matching lines...) Expand all
519 return; 519 return;
520 } 520 }
521 521
522 // Collect cache entries. 522 // Collect cache entries.
523 scoped_ptr<leveldb::Iterator> it( 523 scoped_ptr<leveldb::Iterator> it(
524 resource_map->NewIterator(leveldb::ReadOptions())); 524 resource_map->NewIterator(leveldb::ReadOptions()));
525 for (it->SeekToFirst(); it->Valid(); it->Next()) { 525 for (it->SeekToFirst(); it->Valid(); it->Next()) {
526 if (IsCacheEntryKey(it->key())) { 526 if (IsCacheEntryKey(it->key())) {
527 const std::string& id = GetIdFromCacheEntryKey(it->key()); 527 const std::string& id = GetIdFromCacheEntryKey(it->key());
528 FileCacheEntry cache_entry; 528 FileCacheEntry cache_entry;
529 if (cache_entry.ParseFromArray(it->value().data(), it->value().size())) 529 if (cache_entry.ParseFromArray(it->value().data(), it->value().size())) {
530 (*out_entries)[id] = cache_entry; 530 RecoveredCacheInfo* info = &(*out_info)[id];
531 info->is_dirty = cache_entry.is_dirty();
532 info->md5 = cache_entry.md5();
533
534 // Get title from ResourceEntry if available.
535 std::string serialized_entry;
536 ResourceEntry entry;
537 if (resource_map->Get(leveldb::ReadOptions(),
538 leveldb::Slice(id),
539 &serialized_entry).ok() &&
540 entry.ParseFromString(serialized_entry))
541 info->title = entry.title();
542 }
531 } 543 }
532 } 544 }
533 } 545 }
534 546
535 bool ResourceMetadataStorage::SetLargestChangestamp( 547 bool ResourceMetadataStorage::SetLargestChangestamp(
536 int64 largest_changestamp) { 548 int64 largest_changestamp) {
537 base::ThreadRestrictions::AssertIOAllowed(); 549 base::ThreadRestrictions::AssertIOAllowed();
538 550
539 ResourceMetadataHeader header; 551 ResourceMetadataHeader header;
540 if (!GetHeader(&header)) { 552 if (!GetHeader(&header)) {
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 739
728 scoped_ptr<ResourceMetadataStorage::CacheEntryIterator> 740 scoped_ptr<ResourceMetadataStorage::CacheEntryIterator>
729 ResourceMetadataStorage::GetCacheEntryIterator() { 741 ResourceMetadataStorage::GetCacheEntryIterator() {
730 base::ThreadRestrictions::AssertIOAllowed(); 742 base::ThreadRestrictions::AssertIOAllowed();
731 743
732 scoped_ptr<leveldb::Iterator> it( 744 scoped_ptr<leveldb::Iterator> it(
733 resource_map_->NewIterator(leveldb::ReadOptions())); 745 resource_map_->NewIterator(leveldb::ReadOptions()));
734 return make_scoped_ptr(new CacheEntryIterator(it.Pass())); 746 return make_scoped_ptr(new CacheEntryIterator(it.Pass()));
735 } 747 }
736 748
749 ResourceMetadataStorage::RecoveredCacheInfo::RecoveredCacheInfo()
750 : is_dirty(false) {}
751
752 ResourceMetadataStorage::RecoveredCacheInfo::~RecoveredCacheInfo() {}
753
737 bool ResourceMetadataStorage::GetIdByResourceId( 754 bool ResourceMetadataStorage::GetIdByResourceId(
738 const std::string& resource_id, 755 const std::string& resource_id,
739 std::string* out_id) { 756 std::string* out_id) {
740 base::ThreadRestrictions::AssertIOAllowed(); 757 base::ThreadRestrictions::AssertIOAllowed();
741 DCHECK(!resource_id.empty()); 758 DCHECK(!resource_id.empty());
742 759
743 const leveldb::Status status = resource_map_->Get( 760 const leveldb::Status status = resource_map_->Get(
744 leveldb::ReadOptions(), 761 leveldb::ReadOptions(),
745 leveldb::Slice(GetIdEntryKey(resource_id)), 762 leveldb::Slice(GetIdEntryKey(resource_id)),
746 out_id); 763 out_id);
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
903 if (!it->status().ok() || num_child_entries != num_entries_with_parent) { 920 if (!it->status().ok() || num_child_entries != num_entries_with_parent) {
904 DLOG(ERROR) << "Error during checking resource map. status = " 921 DLOG(ERROR) << "Error during checking resource map. status = "
905 << it->status().ToString(); 922 << it->status().ToString();
906 return false; 923 return false;
907 } 924 }
908 return true; 925 return true;
909 } 926 }
910 927
911 } // namespace internal 928 } // namespace internal
912 } // namespace drive 929 } // namespace drive
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698