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

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

Issue 134863003: [SyncFS] Refactor MetadataDatabase on dirty flag handling and sync-root creation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: testfix Created 6 years, 10 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_database.cc
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
index 3d78af843a2866eb28b23908e032df2dca9727f1..1e9b935c6c3e104e5e735cbabb69845558101f53 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
@@ -84,30 +84,19 @@ base::FilePath ReverseConcatPathComponents(
return base::FilePath(result).NormalizePathSeparators();
}
-void CreateInitialSyncRootTracker(
+scoped_ptr<FileTracker> CreateSyncRootTracker(
int64 tracker_id,
- const google_apis::FileResource& file_resource,
- scoped_ptr<FileMetadata>* file_out,
- scoped_ptr<FileTracker>* tracker_out) {
- FileDetails details;
- PopulateFileDetailsByFileResource(file_resource, &details);
-
- scoped_ptr<FileMetadata> file(new FileMetadata);
- file->set_file_id(file_resource.file_id());
- *file->mutable_details() = details;
-
- scoped_ptr<FileTracker> tracker(new FileTracker);
- tracker->set_tracker_id(tracker_id);
- tracker->set_file_id(file_resource.file_id());
- tracker->set_parent_tracker_id(0);
- tracker->set_tracker_kind(TRACKER_KIND_REGULAR);
- tracker->set_dirty(false);
- tracker->set_active(true);
- tracker->set_needs_folder_listing(false);
- *tracker->mutable_synced_details() = details;
-
- *file_out = file.Pass();
- *tracker_out = tracker.Pass();
+ const FileMetadata& sync_root_metadata) {
+ scoped_ptr<FileTracker> sync_root_tracker(new FileTracker);
+ sync_root_tracker->set_tracker_id(tracker_id);
+ sync_root_tracker->set_file_id(sync_root_metadata.file_id());
+ sync_root_tracker->set_parent_tracker_id(0);
+ sync_root_tracker->set_tracker_kind(TRACKER_KIND_REGULAR);
+ sync_root_tracker->set_dirty(false);
+ sync_root_tracker->set_active(true);
+ sync_root_tracker->set_needs_folder_listing(false);
+ *sync_root_tracker->mutable_synced_details() = sync_root_metadata.details();
+ return sync_root_tracker.Pass();
}
void CreateInitialAppRootTracker(
@@ -144,11 +133,13 @@ void AdaptLevelDBStatusToSyncStatusCode(const SyncStatusCallback& callback,
void PutFileDeletionToBatch(const std::string& file_id,
leveldb::WriteBatch* batch) {
- batch->Delete(kFileMetadataKeyPrefix + file_id);
+ if (batch)
+ batch->Delete(kFileMetadataKeyPrefix + file_id);
}
void PutTrackerDeletionToBatch(int64 tracker_id, leveldb::WriteBatch* batch) {
- batch->Delete(kFileTrackerKeyPrefix + base::Int64ToString(tracker_id));
+ if (batch)
+ batch->Delete(kFileTrackerKeyPrefix + base::Int64ToString(tracker_id));
}
template <typename OutputIterator>
@@ -333,7 +324,8 @@ SyncStatusCode InitializeServiceMetadata(DatabaseContents* contents,
std::string value;
contents->service_metadata->SerializeToString(&value);
- batch->Put(kServiceMetadataKey, value);
+ if (batch)
+ batch->Put(kServiceMetadataKey, value);
}
return SYNC_STATUS_OK;
}
@@ -556,12 +548,11 @@ void MetadataDatabase::PopulateInitialData(
FileTracker* sync_root_tracker = NULL;
int64 sync_root_tracker_id = 0;
{
- scoped_ptr<FileMetadata> folder;
- scoped_ptr<FileTracker> tracker;
- CreateInitialSyncRootTracker(IncrementTrackerID(batch.get()),
- sync_root_folder,
- &folder,
- &tracker);
+ scoped_ptr<FileMetadata> folder =
+ CreateFileMetadataFromFileResource(largest_change_id, sync_root_folder);
+ scoped_ptr<FileTracker> tracker =
+ CreateSyncRootTracker(IncrementTrackerID(batch.get()), *folder);
+
std::string sync_root_folder_id = folder->file_id();
sync_root_tracker = tracker.get();
sync_root_tracker_id = tracker->tracker_id();
@@ -960,11 +951,7 @@ void MetadataDatabase::ReplaceActiveTrackerWithNewResource(
}
*new_tracker->mutable_synced_details() = new_file_details;
- new_tracker->set_dirty(false);
- dirty_trackers_.erase(new_tracker);
- low_priority_dirty_trackers_.erase(new_tracker);
- PutTrackerToBatch(*new_tracker, batch.get());
-
+ ClearDirty(new_tracker, batch.get());
WriteToDatabase(batch.Pass(), callback);
}
@@ -999,11 +986,8 @@ void MetadataDatabase::PopulateFolderByChildList(
itr != child_file_ids.end(); ++itr)
CreateTrackerForParentAndFileID(*folder_tracker, *itr, batch.get());
folder_tracker->set_needs_folder_listing(false);
- if (folder_tracker->dirty() && !ShouldKeepDirty(*folder_tracker)) {
- folder_tracker->set_dirty(false);
- dirty_trackers_.erase(folder_tracker);
- low_priority_dirty_trackers_.erase(folder_tracker);
- }
+ if (folder_tracker->dirty() && !ShouldKeepDirty(*folder_tracker))
+ ClearDirty(folder_tracker, NULL);
PutTrackerToBatch(*folder_tracker, batch.get());
WriteToDatabase(batch.Pass(), callback);
@@ -1088,11 +1072,8 @@ void MetadataDatabase::UpdateTracker(int64 tracker_id,
// - There is no active tracker that has the same |parent| and |title|.
if (!tracker->active() && CanActivateTracker(*tracker))
MakeTrackerActive(tracker->tracker_id(), batch.get());
- if (tracker->dirty() && !ShouldKeepDirty(*tracker)) {
- tracker->set_dirty(false);
- dirty_trackers_.erase(tracker);
- low_priority_dirty_trackers_.erase(tracker);
- }
+ if (tracker->dirty() && !ShouldKeepDirty(*tracker))
+ ClearDirty(tracker, NULL);
PutTrackerToBatch(*tracker, batch.get());
WriteToDatabase(batch.Pass(), callback);
@@ -1153,10 +1134,7 @@ MetadataDatabase::ActivationStatus MetadataDatabase::TryNoSideEffectActivation(
*tracker->mutable_synced_details() = file.details();
MakeTrackerActive(tracker->tracker_id(), batch.get());
- tracker->set_dirty(false);
- dirty_trackers_.erase(tracker);
- low_priority_dirty_trackers_.erase(tracker);
- PutTrackerToBatch(*tracker, batch.get());
+ ClearDirty(tracker, batch.get());
WriteToDatabase(batch.Pass(), callback);
return ACTIVATION_PENDING;
@@ -1418,11 +1396,7 @@ void MetadataDatabase::MakeTrackerActive(int64 tracker_id,
tracker->synced_details().file_kind() == FILE_KIND_FOLDER);
// Make |tracker| a normal priority dirty tracker.
- if (tracker->dirty())
- low_priority_dirty_trackers_.erase(tracker);
- tracker->set_dirty(true);
- dirty_trackers_.insert(tracker);
-
+ MarkSingleTrackerAsDirty(tracker, NULL);
PutTrackerToBatch(*tracker, batch);
}
@@ -1666,8 +1640,8 @@ void MetadataDatabase::EraseTrackerFromPathIndex(FileTracker* tracker) {
}
}
-void MetadataDatabase::MarkSingleTrackerDirty(FileTracker* tracker,
- leveldb::WriteBatch* batch) {
+void MetadataDatabase::MarkSingleTrackerAsDirty(FileTracker* tracker,
+ leveldb::WriteBatch* batch) {
if (!tracker->dirty()) {
tracker->set_dirty(true);
PutTrackerToBatch(*tracker, batch);
@@ -1676,12 +1650,23 @@ void MetadataDatabase::MarkSingleTrackerDirty(FileTracker* tracker,
low_priority_dirty_trackers_.erase(tracker);
}
+void MetadataDatabase::ClearDirty(FileTracker* tracker,
+ leveldb::WriteBatch* batch) {
+ if (tracker->dirty()) {
+ tracker->set_dirty(false);
+ PutTrackerToBatch(*tracker, batch);
+ }
+
+ dirty_trackers_.erase(tracker);
+ low_priority_dirty_trackers_.erase(tracker);
+}
+
void MetadataDatabase::MarkTrackerSetDirty(
TrackerSet* trackers,
leveldb::WriteBatch* batch) {
for (TrackerSet::iterator itr = trackers->begin();
itr != trackers->end(); ++itr) {
- MarkSingleTrackerDirty(*itr, batch);
+ MarkSingleTrackerAsDirty(*itr, batch);
}
}
@@ -1724,13 +1709,7 @@ void MetadataDatabase::RecursiveMarkTrackerAsDirty(int64 root_tracker_id,
PushChildTrackersToContainer(
trackers_by_parent_and_title_, tracker_id, std::back_inserter(stack));
- FileTracker* tracker = tracker_by_id_[tracker_id];
- if (!tracker->dirty()) {
- tracker->set_dirty(true);
- PutTrackerToBatch(*tracker, batch);
- dirty_trackers_.insert(tracker);
- low_priority_dirty_trackers_.erase(tracker);
- }
+ MarkSingleTrackerAsDirty(tracker_by_id_[tracker_id], batch);
}
}
@@ -1862,6 +1841,11 @@ void MetadataDatabase::UpdateByFileMetadata(
void MetadataDatabase::WriteToDatabase(scoped_ptr<leveldb::WriteBatch> batch,
const SyncStatusCallback& callback) {
+ if (!batch) {
+ RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
+ return;
+ }
+
base::PostTaskAndReplyWithResult(
task_runner_.get(),
FROM_HERE,

Powered by Google App Engine
This is Rietveld 408576698