Commit 33fe4626 authored by peria@chromium.org's avatar peria@chromium.org

[SyncFS] Remove a friendship between MetadataDatabase and MetadataDatabaseIndex

BUG=347425
TEST=./unit_tests --gtest_filter="MetadataDatabaseTest.*:MetadataDatabaseIndexTest.*"

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@278359 0039d316-1c4b-4281-b951-d872f2087c98
parent 91081cf3
...@@ -719,8 +719,6 @@ void MetadataDatabase::PopulateInitialData( ...@@ -719,8 +719,6 @@ void MetadataDatabase::PopulateInitialData(
const ScopedVector<google_apis::FileResource>& app_root_folders, const ScopedVector<google_apis::FileResource>& app_root_folders,
const SyncStatusCallback& callback) { const SyncStatusCallback& callback) {
DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread());
DCHECK(index_->tracker_by_id_.empty());
DCHECK(index_->metadata_by_id_.empty());
scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch); scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch);
service_metadata_->set_largest_change_id(largest_change_id); service_metadata_->set_largest_change_id(largest_change_id);
...@@ -1467,8 +1465,7 @@ bool MetadataDatabase::HasDirtyTracker() const { ...@@ -1467,8 +1465,7 @@ bool MetadataDatabase::HasDirtyTracker() const {
size_t MetadataDatabase::CountDirtyTracker() const { size_t MetadataDatabase::CountDirtyTracker() const {
DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread());
return index_->dirty_trackers_.size() + return index_->CountDirtyTracker();
index_->demoted_dirty_trackers_.size();
} }
bool MetadataDatabase::GetMultiParentFileTrackers(std::string* file_id_out, bool MetadataDatabase::GetMultiParentFileTrackers(std::string* file_id_out,
...@@ -1494,12 +1491,12 @@ bool MetadataDatabase::GetMultiParentFileTrackers(std::string* file_id_out, ...@@ -1494,12 +1491,12 @@ bool MetadataDatabase::GetMultiParentFileTrackers(std::string* file_id_out,
size_t MetadataDatabase::CountFileMetadata() const { size_t MetadataDatabase::CountFileMetadata() const {
DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread());
return index_->metadata_by_id_.size(); return index_->CountFileMetadata();
} }
size_t MetadataDatabase::CountFileTracker() const { size_t MetadataDatabase::CountFileTracker() const {
DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread());
return index_->tracker_by_id_.size(); return index_->CountFileTracker();
} }
bool MetadataDatabase::GetConflictingTrackers(TrackerIDSet* trackers_out) { bool MetadataDatabase::GetConflictingTrackers(TrackerIDSet* trackers_out) {
...@@ -1976,29 +1973,35 @@ scoped_ptr<base::ListValue> MetadataDatabase::DumpTrackers() { ...@@ -1976,29 +1973,35 @@ scoped_ptr<base::ListValue> MetadataDatabase::DumpTrackers() {
trackers->Append(metadata); trackers->Append(metadata);
// Append tracker data. // Append tracker data.
for (MetadataDatabaseIndex::TrackerByID::const_iterator itr = std::vector<int64> tracker_ids(index_->GetAllTrackerIDs());
index_->tracker_by_id_.begin(); for (std::vector<int64>::const_iterator itr = tracker_ids.begin();
itr != index_->tracker_by_id_.end(); ++itr) { itr != tracker_ids.end(); ++itr) {
const FileTracker& tracker = *itr->second; const int64 tracker_id = *itr;
const FileTracker* tracker = index_->GetFileTracker(tracker_id);
if (!tracker) {
NOTREACHED();
continue;
}
base::DictionaryValue* dict = new base::DictionaryValue; base::DictionaryValue* dict = new base::DictionaryValue;
base::FilePath path = BuildDisplayPathForTracker(tracker); base::FilePath path = BuildDisplayPathForTracker(*tracker);
dict->SetString("tracker_id", base::Int64ToString(tracker.tracker_id())); dict->SetString("tracker_id", base::Int64ToString(tracker_id));
dict->SetString("path", path.AsUTF8Unsafe()); dict->SetString("path", path.AsUTF8Unsafe());
dict->SetString("file_id", tracker.file_id()); dict->SetString("file_id", tracker->file_id());
TrackerKind tracker_kind = tracker.tracker_kind(); TrackerKind tracker_kind = tracker->tracker_kind();
dict->SetString( dict->SetString(
"tracker_kind", "tracker_kind",
tracker_kind == TRACKER_KIND_APP_ROOT ? "AppRoot" : tracker_kind == TRACKER_KIND_APP_ROOT ? "AppRoot" :
tracker_kind == TRACKER_KIND_DISABLED_APP_ROOT ? "Disabled App" : tracker_kind == TRACKER_KIND_DISABLED_APP_ROOT ? "Disabled App" :
tracker.tracker_id() == GetSyncRootTrackerID() ? "SyncRoot" : tracker->tracker_id() == GetSyncRootTrackerID() ? "SyncRoot" :
"Regular"); "Regular");
dict->SetString("app_id", tracker.app_id()); dict->SetString("app_id", tracker->app_id());
dict->SetString("active", tracker.active() ? "true" : "false"); dict->SetString("active", tracker->active() ? "true" : "false");
dict->SetString("dirty", tracker.dirty() ? "true" : "false"); dict->SetString("dirty", tracker->dirty() ? "true" : "false");
dict->SetString("folder_listing", dict->SetString("folder_listing",
tracker.needs_folder_listing() ? "needed" : "no"); tracker->needs_folder_listing() ? "needed" : "no");
if (tracker.has_synced_details()) { if (tracker->has_synced_details()) {
const FileDetails& details = tracker.synced_details(); const FileDetails& details = tracker->synced_details();
dict->SetString("title", details.title()); dict->SetString("title", details.title());
dict->SetString("kind", FileKindToString(details.file_kind())); dict->SetString("kind", FileKindToString(details.file_kind()));
dict->SetString("md5", details.md5()); dict->SetString("md5", details.md5());
...@@ -2031,15 +2034,20 @@ scoped_ptr<base::ListValue> MetadataDatabase::DumpMetadata() { ...@@ -2031,15 +2034,20 @@ scoped_ptr<base::ListValue> MetadataDatabase::DumpMetadata() {
files->Append(metadata); files->Append(metadata);
// Append metadata data. // Append metadata data.
for (MetadataDatabaseIndex::MetadataByID::const_iterator itr = std::vector<std::string> metadata_ids(index_->GetAllMetadataIDs());
index_->metadata_by_id_.begin(); for (std::vector<std::string>::const_iterator itr = metadata_ids.begin();
itr != index_->metadata_by_id_.end(); ++itr) { itr != metadata_ids.end(); ++itr) {
const FileMetadata& file = *itr->second; const std::string& file_id = *itr;
const FileMetadata *file = index_->GetFileMetadata(file_id);
if (!file) {
NOTREACHED();
continue;
}
base::DictionaryValue* dict = new base::DictionaryValue; base::DictionaryValue* dict = new base::DictionaryValue;
dict->SetString("file_id", file.file_id()); dict->SetString("file_id", file_id);
if (file.has_details()) { if (file->has_details()) {
const FileDetails& details = file.details(); const FileDetails& details = file->details();
dict->SetString("title", details.title()); dict->SetString("title", details.title());
dict->SetString("type", FileKindToString(details.file_kind())); dict->SetString("type", FileKindToString(details.file_kind()));
dict->SetString("md5", details.md5()); dict->SetString("md5", details.md5());
......
...@@ -210,6 +210,18 @@ void MetadataDatabaseIndex::PromoteDemotedDirtyTrackers() { ...@@ -210,6 +210,18 @@ void MetadataDatabaseIndex::PromoteDemotedDirtyTrackers() {
demoted_dirty_trackers_.clear(); demoted_dirty_trackers_.clear();
} }
size_t MetadataDatabaseIndex::CountDirtyTracker() const {
return dirty_trackers_.size() + demoted_dirty_trackers_.size();
}
size_t MetadataDatabaseIndex::CountFileMetadata() const {
return metadata_by_id_.size();
}
size_t MetadataDatabaseIndex::CountFileTracker() const {
return tracker_by_id_.size();
}
std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const { std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const {
std::vector<std::string> result; std::vector<std::string> result;
result.reserve(app_root_by_app_id_.size()); result.reserve(app_root_by_app_id_.size());
...@@ -219,6 +231,24 @@ std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const { ...@@ -219,6 +231,24 @@ std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const {
return result; return result;
} }
std::vector<int64> MetadataDatabaseIndex::GetAllTrackerIDs() const {
std::vector<int64> result;
for (TrackerByID::const_iterator itr = tracker_by_id_.begin();
itr != tracker_by_id_.end(); ++itr) {
result.push_back(itr->first);
}
return result;
}
std::vector<std::string> MetadataDatabaseIndex::GetAllMetadataIDs() const {
std::vector<std::string> result;
for (MetadataByID::const_iterator itr = metadata_by_id_.begin();
itr != metadata_by_id_.end(); ++itr) {
result.push_back(itr->first);
}
return result;
}
void MetadataDatabaseIndex::AddToAppIDIndex( void MetadataDatabaseIndex::AddToAppIDIndex(
const FileTracker& new_tracker) { const FileTracker& new_tracker) {
if (!IsAppRoot(new_tracker)) if (!IsAppRoot(new_tracker))
......
...@@ -118,7 +118,12 @@ class MetadataDatabaseIndex { ...@@ -118,7 +118,12 @@ class MetadataDatabaseIndex {
// Promotes all demoted dirty trackers to normal dirty trackers. // Promotes all demoted dirty trackers to normal dirty trackers.
void PromoteDemotedDirtyTrackers(); void PromoteDemotedDirtyTrackers();
size_t CountDirtyTracker() const;
size_t CountFileMetadata() const;
size_t CountFileTracker() const;
std::vector<std::string> GetRegisteredAppIDs() const; std::vector<std::string> GetRegisteredAppIDs() const;
std::vector<int64> GetAllTrackerIDs() const;
std::vector<std::string> GetAllMetadataIDs() const;
private: private:
typedef base::ScopedPtrHashMap<std::string, FileMetadata> MetadataByID; typedef base::ScopedPtrHashMap<std::string, FileMetadata> MetadataByID;
...@@ -131,7 +136,6 @@ class MetadataDatabaseIndex { ...@@ -131,7 +136,6 @@ class MetadataDatabaseIndex {
typedef base::hash_set<ParentIDAndTitle> PathSet; typedef base::hash_set<ParentIDAndTitle> PathSet;
typedef std::set<int64> DirtyTrackers; typedef std::set<int64> DirtyTrackers;
friend class MetadataDatabase;
friend class MetadataDatabaseTest; friend class MetadataDatabaseTest;
// Maintains |app_root_by_app_id_|. // Maintains |app_root_by_app_id_|.
......
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