Commit 9cecc735 authored by tzik@chromium.org's avatar tzik@chromium.org

[SyncFileSystem] Add MetadataDatabase::TryNoSideEffectActivation

This is needed to handle create-create conflict of folders in LocalToRemoteSyncer.

BUG=240165
NOTRY=true

Review URL: https://codereview.chromium.org/99813005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@238354 0039d316-1c4b-4281-b951-d872f2087c98
parent 5de3b08e
...@@ -1041,6 +1041,25 @@ void MetadataDatabase::UpdateTracker(int64 tracker_id, ...@@ -1041,6 +1041,25 @@ void MetadataDatabase::UpdateTracker(int64 tracker_id,
WriteToDatabase(batch.Pass(), callback); WriteToDatabase(batch.Pass(), callback);
} }
bool MetadataDatabase::TryNoSideEffectActivation(
int64 tracker_id,
const SyncStatusCallback& callback) {
DCHECK(ContainsKey(tracker_by_id_, tracker_id));
const FileTracker& tracker = *tracker_by_id_[tracker_id];
if (tracker.active()) {
RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
return true;
}
if (!CanActivateTracker(tracker))
return false;
scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch);
MakeTrackerActive(tracker_id, batch.get());
WriteToDatabase(batch.Pass(), callback);
return true;
}
void MetadataDatabase::LowerTrackerPriority(int64 tracker_id) { void MetadataDatabase::LowerTrackerPriority(int64 tracker_id) {
TrackerByID::const_iterator found = tracker_by_id_.find(tracker_id); TrackerByID::const_iterator found = tracker_by_id_.find(tracker_id);
if (found == tracker_by_id_.end()) if (found == tracker_by_id_.end())
......
...@@ -273,6 +273,13 @@ class MetadataDatabase { ...@@ -273,6 +273,13 @@ class MetadataDatabase {
const FileDetails& updated_details, const FileDetails& updated_details,
const SyncStatusCallback& callback); const SyncStatusCallback& callback);
// Returns true if the tracker can be safely activated without deactivating
// any other trackers. In this case, tries to activate the tracker, and
// invokes |callback| upon completion.
// Returns false otherwise. In false case, |callback| will not be invoked.
bool TryNoSideEffectActivation(int64 tracker_id,
const SyncStatusCallback& callback);
// Changes the priority of the tracker to low. // Changes the priority of the tracker to low.
void LowerTrackerPriority(int64 tracker_id); void LowerTrackerPriority(int64 tracker_id);
void PromoteLowerPriorityTrackersToNormal(); void PromoteLowerPriorityTrackersToNormal();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment