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

Unified Diff: chrome/browser/chromeos/drive/resource_metadata_storage.cc

Issue 299623012: drive: Delete unused ID entries from an already updated DB (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/chromeos/drive/resource_metadata_storage_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/drive/resource_metadata_storage.cc
diff --git a/chrome/browser/chromeos/drive/resource_metadata_storage.cc b/chrome/browser/chromeos/drive/resource_metadata_storage.cc
index 13c88f0dd60b1ef14910b6a1d5cb89b0564fdee9..8d178c6c1208d0c0c0de873cffde3e4ea8d831b3 100644
--- a/chrome/browser/chromeos/drive/resource_metadata_storage.cc
+++ b/chrome/browser/chromeos/drive/resource_metadata_storage.cc
@@ -285,8 +285,34 @@ bool ResourceMetadataStorage::UpgradeOldDB(
UMA_HISTOGRAM_SPARSE_SLOWLY("Drive.MetadataDBVersionBeforeUpgradeCheck",
header.version());
- if (header.version() == kDBVersion) { // Nothing to do.
- return true;
+ if (header.version() == kDBVersion) {
+ // Before r272134, UpgradeOldDB() was not deleting unused ID entries.
+ // Delete unused ID entries to fix crbug.com/374648.
+ std::set<std::string> used_ids;
+
+ scoped_ptr<leveldb::Iterator> it(
+ resource_map->NewIterator(leveldb::ReadOptions()));
+ it->Seek(leveldb::Slice(GetHeaderDBKey()));
+ it->Next();
+ for (; it->Valid(); it->Next()) {
+ if (IsCacheEntryKey(it->key())) {
+ used_ids.insert(GetIdFromCacheEntryKey(it->key()));
+ } else if (!IsChildEntryKey(it->key()) && !IsIdEntryKey(it->key())) {
+ used_ids.insert(it->key().ToString());
+ }
+ }
+ if (!it->status().ok())
+ return false;
+
+ leveldb::WriteBatch batch;
+ for (it->SeekToFirst(); it->Valid(); it->Next()) {
+ if (IsIdEntryKey(it->key()) && !used_ids.count(it->value().ToString()))
+ batch.Delete(it->key());
+ }
+ if (!it->status().ok())
+ return false;
+
+ return resource_map->Write(leveldb::WriteOptions(), &batch).ok();
} else if (header.version() < 6) { // Too old, nothing can be done.
return false;
} else if (header.version() < 11) { // Cache entries can be reused.
« no previous file with comments | « no previous file | chrome/browser/chromeos/drive/resource_metadata_storage_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698