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

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/metadata_database.cc

Issue 77913002: [SyncFS] Implement non-conflict local folder addition. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comment fix Created 7 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/sync_file_system/drive_backend/metadata_database.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <stack> 8 #include <stack>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 964 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 bool MetadataDatabase::GetLowPriorityDirtyTracker( 975 bool MetadataDatabase::GetLowPriorityDirtyTracker(
976 FileTracker* tracker) const { 976 FileTracker* tracker) const {
977 DCHECK(tracker); 977 DCHECK(tracker);
978 DirtyTrackers::const_iterator itr = low_priority_dirty_trackers_.begin(); 978 DirtyTrackers::const_iterator itr = low_priority_dirty_trackers_.begin();
979 if (itr == low_priority_dirty_trackers_.end()) 979 if (itr == low_priority_dirty_trackers_.end())
980 return false; 980 return false;
981 *tracker = **itr; 981 *tracker = **itr;
982 return true; 982 return true;
983 } 983 }
984 984
985 void MetadataDatabase::GetRegisteredAppIDs(std::vector<std::string>* app_ids) {
986 DCHECK(app_ids);
987 app_ids->clear();
988 app_ids->reserve(app_root_by_app_id_.size());
989 for (TrackerByAppID::iterator itr = app_root_by_app_id_.begin();
990 itr != app_root_by_app_id_.end(); ++itr) {
991 app_ids->push_back(itr->first);
992 }
993 }
994
995 void MetadataDatabase::MarkTrackerDirty(int64 tracker_id,
996 const SyncStatusCallback& callback) {
997 TrackerByID::iterator found = tracker_by_id_.find(tracker_id);
998 if (found == tracker_by_id_.end()) {
999 RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
1000 return;
1001 }
1002
1003 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch);
1004 MarkSingleTrackerDirty(found->second, batch.get());
1005 WriteToDatabase(batch.Pass(), callback);
1006 }
1007
985 MetadataDatabase::MetadataDatabase(base::SequencedTaskRunner* task_runner) 1008 MetadataDatabase::MetadataDatabase(base::SequencedTaskRunner* task_runner)
986 : task_runner_(task_runner), 1009 : task_runner_(task_runner),
987 largest_known_change_id_(0), 1010 largest_known_change_id_(0),
988 weak_ptr_factory_(this) { 1011 weak_ptr_factory_(this) {
989 DCHECK(task_runner); 1012 DCHECK(task_runner);
990 } 1013 }
991 1014
992 // static 1015 // static
993 void MetadataDatabase::CreateOnTaskRunner( 1016 void MetadataDatabase::CreateOnTaskRunner(
994 base::SingleThreadTaskRunner* callback_runner, 1017 base::SingleThreadTaskRunner* callback_runner,
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
1369 TrackerSet* conflicting_trackers = &found_by_title->second; 1392 TrackerSet* conflicting_trackers = &found_by_title->second;
1370 conflicting_trackers->Erase(tracker); 1393 conflicting_trackers->Erase(tracker);
1371 1394
1372 if (conflicting_trackers->tracker_set().empty()) { 1395 if (conflicting_trackers->tracker_set().empty()) {
1373 trackers_by_title->erase(found_by_title); 1396 trackers_by_title->erase(found_by_title);
1374 if (trackers_by_title->empty()) 1397 if (trackers_by_title->empty())
1375 trackers_by_parent_and_title_.erase(found); 1398 trackers_by_parent_and_title_.erase(found);
1376 } 1399 }
1377 } 1400 }
1378 1401
1402 void MetadataDatabase::MarkSingleTrackerDirty(FileTracker* tracker,
1403 leveldb::WriteBatch* batch) {
1404 if (!tracker->dirty()) {
1405 tracker->set_dirty(true);
1406 PutTrackerToBatch(*tracker, batch);
1407 }
1408 dirty_trackers_.insert(tracker);
1409 low_priority_dirty_trackers_.erase(tracker);
1410 }
1411
1379 void MetadataDatabase::MarkTrackerSetDirty( 1412 void MetadataDatabase::MarkTrackerSetDirty(
1380 TrackerSet* trackers, 1413 TrackerSet* trackers,
1381 leveldb::WriteBatch* batch) { 1414 leveldb::WriteBatch* batch) {
1382 for (TrackerSet::iterator itr = trackers->begin(); 1415 for (TrackerSet::iterator itr = trackers->begin();
1383 itr != trackers->end(); ++itr) { 1416 itr != trackers->end(); ++itr) {
1384 FileTracker* tracker = *itr; 1417 MarkSingleTrackerDirty(*itr, batch);
1385 if (tracker->dirty())
1386 continue;
1387 tracker->set_dirty(true);
1388 PutTrackerToBatch(*tracker, batch);
1389 dirty_trackers_.insert(tracker);
1390 low_priority_dirty_trackers_.erase(tracker);
1391 } 1418 }
1392 } 1419 }
1393 1420
1394 void MetadataDatabase::MarkTrackersDirtyByFileID( 1421 void MetadataDatabase::MarkTrackersDirtyByFileID(
1395 const std::string& file_id, 1422 const std::string& file_id,
1396 leveldb::WriteBatch* batch) { 1423 leveldb::WriteBatch* batch) {
1397 TrackersByFileID::iterator found = trackers_by_file_id_.find(file_id); 1424 TrackersByFileID::iterator found = trackers_by_file_id_.find(file_id);
1398 if (found != trackers_by_file_id_.end()) 1425 if (found != trackers_by_file_id_.end())
1399 MarkTrackerSetDirty(&found->second, batch); 1426 MarkTrackerSetDirty(&found->second, batch);
1400 } 1427 }
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1580 details->SetString("dirty", tracker->dirty() ? "true" : "false"); 1607 details->SetString("dirty", tracker->dirty() ? "true" : "false");
1581 1608
1582 file->Set("details", details); 1609 file->Set("details", details);
1583 1610
1584 files->Append(file); 1611 files->Append(file);
1585 } 1612 }
1586 1613
1587 return files.Pass(); 1614 return files.Pass();
1588 } 1615 }
1589 1616
1590 void MetadataDatabase::GetRegisteredAppIDs(std::vector<std::string>* app_ids) {
1591 DCHECK(app_ids);
1592 app_ids->clear();
1593 app_ids->reserve(app_root_by_app_id_.size());
1594 for (TrackerByAppID::iterator itr = app_root_by_app_id_.begin();
1595 itr != app_root_by_app_id_.end(); ++itr) {
1596 app_ids->push_back(itr->first);
1597 }
1598 }
1599
1600 bool MetadataDatabase::HasNewerFileMetadata(const std::string& file_id, 1617 bool MetadataDatabase::HasNewerFileMetadata(const std::string& file_id,
1601 int64 change_id) { 1618 int64 change_id) {
1602 FileByID::const_iterator found = file_by_id_.find(file_id); 1619 FileByID::const_iterator found = file_by_id_.find(file_id);
1603 if (found == file_by_id_.end()) 1620 if (found == file_by_id_.end())
1604 return false; 1621 return false;
1605 DCHECK(found->second->has_details()); 1622 DCHECK(found->second->has_details());
1606 return found->second->details().change_id() >= change_id; 1623 return found->second->details().change_id() >= change_id;
1607 } 1624 }
1608 1625
1609 } // namespace drive_backend 1626 } // namespace drive_backend
1610 } // namespace sync_file_system 1627 } // namespace sync_file_system
OLDNEW
« 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