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

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

Issue 443793003: [SyncFS] Clear dirty flag on changelist application phase (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: revised 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
« no previous file with comments | « chrome/browser/sync_file_system/drive_backend/metadata_database.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 fd93192676dc19e529e1cb91ce099017b399ad74..59fe8f7ea75723576961081ab9a2d6e5c2ae233b 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
@@ -1375,6 +1375,33 @@ void MetadataDatabase::GetRegisteredAppIDs(std::vector<std::string>* app_ids) {
*app_ids = index_->GetRegisteredAppIDs();
}
+void MetadataDatabase::SweepDirtyTrackers(
+ const std::vector<std::string>& file_ids,
+ const SyncStatusCallback& callback) {
+ DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread());
+
+ std::set<int64> tracker_ids;
+ for (size_t i = 0; i < file_ids.size(); ++i) {
+ TrackerIDSet trackers_for_file_id =
+ index_->GetFileTrackerIDsByFileID(file_ids[i]);
+ for (TrackerIDSet::iterator itr = trackers_for_file_id.begin();
+ itr != trackers_for_file_id.end(); ++itr)
+ tracker_ids.insert(*itr);
+ }
+
+ for (std::set<int64>::iterator itr = tracker_ids.begin();
+ itr != tracker_ids.end(); ++itr) {
+ if (!CanClearDirty(*itr))
peria 2014/08/13 09:04:08 Could you merge GetFileTracker(id, tracker_ptr) on
tzik 2014/08/13 09:30:03 Done.
+ continue;
+ scoped_ptr<FileTracker> tracker(new FileTracker);
+ index_->GetFileTracker(*itr, tracker.get());
+ tracker->set_dirty(false);
+ index_->StoreFileTracker(tracker.Pass());
+ }
+
+ WriteToDatabase(callback);
+}
+
MetadataDatabase::MetadataDatabase(
base::SequencedTaskRunner* worker_task_runner,
const base::FilePath& database_path,
@@ -1901,5 +1928,41 @@ void MetadataDatabase::DetachFromSequence() {
worker_sequence_checker_.DetachFromSequence();
}
+bool MetadataDatabase::CanClearDirty(int64 tracker_id) {
+ DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread());
+
+ FileTracker tracker;
+ if (!index_->GetFileTracker(tracker_id, &tracker)) {
+ NOTREACHED();
+ return false;
+ }
+
+ FileMetadata metadata;
+ if (!index_->GetFileMetadata(tracker.file_id(), &metadata) ||
+ !tracker.active() || !tracker.dirty() ||
+ !tracker.has_synced_details() ||
+ tracker.needs_folder_listing())
+ return false;
+
+ const FileDetails& remote_details = metadata.details();
+ const FileDetails& synced_details = tracker.synced_details();
+ if (remote_details.title() != synced_details.title() ||
+ remote_details.md5() != synced_details.md5())
+ return false;
+
+ std::set<std::string> parents;
+ for (int i = 0; i < remote_details.parent_folder_ids_size(); ++i)
+ parents.insert(remote_details.parent_folder_ids(i));
+
+ for (int i = 0; i < synced_details.parent_folder_ids_size(); ++i)
+ if (parents.erase(synced_details.parent_folder_ids(i)) != 1)
+ return false;
+
+ if (!parents.empty())
+ return false;
+
+ return true;
+}
+
} // namespace drive_backend
} // namespace sync_file_system
« no previous file with comments | « chrome/browser/sync_file_system/drive_backend/metadata_database.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698