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

Unified Diff: sync/syncable/directory_backing_store.cc

Issue 1008103002: Sync: Avoid 3 passes over SyncDarta DB when loading the directory from the disk (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added unit test Created 5 years, 9 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: sync/syncable/directory_backing_store.cc
diff --git a/sync/syncable/directory_backing_store.cc b/sync/syncable/directory_backing_store.cc
index f87933bea6323bfa9612ed6f2c031141985f2e66..9d18a2dbb3bcc5eb27bc430a0dde410c13187099 100644
--- a/sync/syncable/directory_backing_store.cc
+++ b/sync/syncable/directory_backing_store.cc
@@ -538,8 +538,8 @@ bool DirectoryBackingStore::RefreshColumns() {
return true;
}
-bool DirectoryBackingStore::LoadEntries(
- Directory::MetahandlesMap* handles_map) {
+bool DirectoryBackingStore::LoadEntries(Directory::MetahandlesMap* handles_map,
+ MetahandleSet* metahandles_to_purge) {
string select;
select.reserve(kUpdateStatementBufferSize);
select.append("SELECT ");
@@ -555,11 +555,25 @@ bool DirectoryBackingStore::LoadEntries(
return false;
int64 handle = kernel->ref(META_HANDLE);
- (*handles_map)[handle] = kernel.release();
+ if (SafeToPurgeOnLoading(*kernel))
+ metahandles_to_purge->insert(handle);
+ else
+ (*handles_map)[handle] = kernel.release();
}
return s.Succeeded();
}
+bool DirectoryBackingStore::SafeToPurgeOnLoading(
+ const EntryKernel& entry) const {
+ if (entry.ref(IS_DEL)) {
+ if (!entry.ref(IS_UNSYNCED) && !entry.ref(IS_UNAPPLIED_UPDATE))
+ return true;
+ else if (!entry.ref(ID).ServerKnows())
+ return true;
+ }
+ return false;
+}
+
bool DirectoryBackingStore::LoadDeleteJournals(
JournalIndex* delete_journals) {
string select;
@@ -643,21 +657,6 @@ bool DirectoryBackingStore::SaveEntryToDB(sql::Statement* save_statement,
return save_statement->Run();
}
-bool DirectoryBackingStore::DropDeletedEntries() {
- if (!db_->Execute("DELETE FROM metas "
- "WHERE is_del > 0 "
- "AND is_unsynced < 1 "
- "AND is_unapplied_update < 1")) {
- return false;
- }
- if (!db_->Execute("DELETE FROM metas "
- "WHERE is_del > 0 "
- "AND id LIKE 'c%'")) {
- return false;
- }
- return true;
-}
-
bool DirectoryBackingStore::SafeDropTable(const char* table_name) {
string query = "DROP TABLE IF EXISTS ";
query.append(table_name);

Powered by Google App Engine
This is Rietveld 408576698