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

Unified Diff: chrome/browser/sync_file_system/drive_backend/metadata_db_migration_util.cc

Issue 446653003: [SyncFS] Rollback function from version 4 to version 3. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add test Created 6 years, 4 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
Index: chrome/browser/sync_file_system/drive_backend/metadata_db_migration_util.cc
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_db_migration_util.cc b/chrome/browser/sync_file_system/drive_backend/metadata_db_migration_util.cc
index d33e0c6c7c01c7a0a49d660fe115d985fe88562a..d2df813460071df8326efc87152d7ffe6f3e656d 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_db_migration_util.cc
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_db_migration_util.cc
@@ -244,5 +244,61 @@ SyncStatusCode MigrateDatabaseFromV1ToV2(leveldb::DB* db) {
db->Write(leveldb::WriteOptions(), &write_batch));
}
+SyncStatusCode MigrateDatabaseFromV4ToV3(leveldb::DB* db) {
+ // Rollback from version 4 to version 3.
+ // Please see metadata_database_index.cc for version 3 format, and
+ // metadata_database_index_on_disk.cc for version 4 format.
+
+ const char kDatabaseVersionKey[] = "VERSION";
+ const char kServiceMetadataKey[] = "SERVICE";
+ const char kFileMetadataKeyPrefix[] = "FILE: ";
+ const char kFileTrackerKeyPrefix[] = "TRACKER: ";
+
+ // Key prefixes used in version 4.
+ const char kAppRootIDByAppIDKeyPrefix[] = "APP_ROOT: ";
+ const char kActiveTrackerIDByFileIDKeyPrefix[] = "ACTIVE_FILE: ";
+ const char kTrackerIDByFileIDKeyPrefix[] = "TRACKER_FILE: ";
+ const char kMultiTrackerByFileIDKeyPrefix[] = "MULTI_FILE: ";
+ const char kActiveTrackerIDByParentAndTitleKeyPrefix[] = "ACTIVE_PATH: ";
+ const char kTrackerIDByParentAndTitleKeyPrefix[] = "TRACKER_PATH: ";
+ const char kMultiBackingParentAndTitleKeyPrefix[] = "MULTI_PATH: ";
+ const char kDirtyIDKeyPrefix[] = "DIRTY: ";
+ const char kDemotedDirtyIDKeyPrefix[] = "DEMOTED_DIRTY: ";
+
+ leveldb::WriteBatch write_batch;
+ write_batch.Put(kDatabaseVersionKey, "3");
+
+ scoped_ptr<leveldb::Iterator> itr(db->NewIterator(leveldb::ReadOptions()));
+ for (itr->SeekToFirst(); itr->Valid(); itr->Next()) {
+ std::string key = itr->key().ToString();
+
+ // Do nothing for valid entries in both versions.
+ if (StartsWithASCII(key, kServiceMetadataKey, true) ||
+ StartsWithASCII(key, kFileMetadataKeyPrefix, true) ||
+ StartsWithASCII(key, kFileTrackerKeyPrefix, true)) {
+ continue;
+ }
+
+ // Drop entries used in version 4 only.
+ if (StartsWithASCII(key, kAppRootIDByAppIDKeyPrefix, true) ||
+ StartsWithASCII(key, kActiveTrackerIDByFileIDKeyPrefix, true) ||
+ StartsWithASCII(key, kTrackerIDByFileIDKeyPrefix, true) ||
+ StartsWithASCII(key, kMultiTrackerByFileIDKeyPrefix, true) ||
+ StartsWithASCII(key, kActiveTrackerIDByParentAndTitleKeyPrefix, true) ||
+ StartsWithASCII(key, kTrackerIDByParentAndTitleKeyPrefix, true) ||
+ StartsWithASCII(key, kMultiBackingParentAndTitleKeyPrefix, true) ||
+ StartsWithASCII(key, kDirtyIDKeyPrefix, true) ||
+ StartsWithASCII(key, kDemotedDirtyIDKeyPrefix, true)) {
+ write_batch.Delete(key);
+ continue;
+ }
+
+ DVLOG(3) << "Unknown key: " << key << " was found.";
+ }
+
+ return LevelDBStatusToSyncStatusCode(
+ db->Write(leveldb::WriteOptions(), &write_batch));
+}
+
} // namespace drive_backend
} // namespace sync_file_system

Powered by Google App Engine
This is Rietveld 408576698