Commit ab3bb07f authored by tzik's avatar tzik Committed by Commit bot

[SyncFS] Show if a tracker is demoted or not in chrome://syncfs-internals

Adds "demoted" column in database dump view to see a tracker is demoted or not.

BUG=None

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

Cr-Commit-Position: refs/heads/master@{#297405}
parent e8b7bb54
...@@ -1638,7 +1638,7 @@ scoped_ptr<base::ListValue> MetadataDatabase::DumpTrackers() { ...@@ -1638,7 +1638,7 @@ scoped_ptr<base::ListValue> MetadataDatabase::DumpTrackers() {
base::DictionaryValue* metadata = new base::DictionaryValue; base::DictionaryValue* metadata = new base::DictionaryValue;
const char *trackerKeys[] = { const char *trackerKeys[] = {
"tracker_id", "path", "file_id", "tracker_kind", "app_id", "tracker_id", "path", "file_id", "tracker_kind", "app_id",
"active", "dirty", "folder_listing", "active", "dirty", "folder_listing", "demoted",
"title", "kind", "md5", "etag", "missing", "change_id", "title", "kind", "md5", "etag", "missing", "change_id",
}; };
std::vector<std::string> key_strings( std::vector<std::string> key_strings(
...@@ -1677,6 +1677,9 @@ scoped_ptr<base::ListValue> MetadataDatabase::DumpTrackers() { ...@@ -1677,6 +1677,9 @@ scoped_ptr<base::ListValue> MetadataDatabase::DumpTrackers() {
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");
bool is_demoted = index_->IsDemotedDirtyTracker(tracker.tracker_id());
dict->SetString("demoted", is_demoted ? "true" : "false");
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());
......
...@@ -402,6 +402,11 @@ bool MetadataDatabaseIndex::HasDemotedDirtyTracker() const { ...@@ -402,6 +402,11 @@ bool MetadataDatabaseIndex::HasDemotedDirtyTracker() const {
return !demoted_dirty_trackers_.empty(); return !demoted_dirty_trackers_.empty();
} }
bool MetadataDatabaseIndex::IsDemotedDirtyTracker(int64 tracker_id) const {
return demoted_dirty_trackers_.find(tracker_id) !=
demoted_dirty_trackers_.end();
}
void MetadataDatabaseIndex::PromoteDemotedDirtyTracker(int64 tracker_id) { void MetadataDatabaseIndex::PromoteDemotedDirtyTracker(int64 tracker_id) {
if (demoted_dirty_trackers_.erase(tracker_id) == 1) if (demoted_dirty_trackers_.erase(tracker_id) == 1)
dirty_trackers_.insert(tracker_id); dirty_trackers_.insert(tracker_id);
......
...@@ -86,6 +86,7 @@ class MetadataDatabaseIndex : public MetadataDatabaseIndexInterface { ...@@ -86,6 +86,7 @@ class MetadataDatabaseIndex : public MetadataDatabaseIndexInterface {
virtual int64 PickDirtyTracker() const OVERRIDE; virtual int64 PickDirtyTracker() const OVERRIDE;
virtual void DemoteDirtyTracker(int64 tracker_id) OVERRIDE; virtual void DemoteDirtyTracker(int64 tracker_id) OVERRIDE;
virtual bool HasDemotedDirtyTracker() const OVERRIDE; virtual bool HasDemotedDirtyTracker() const OVERRIDE;
virtual bool IsDemotedDirtyTracker(int64 tracker_id) const OVERRIDE;
virtual void PromoteDemotedDirtyTracker(int64 tracker_id) OVERRIDE; virtual void PromoteDemotedDirtyTracker(int64 tracker_id) OVERRIDE;
virtual bool PromoteDemotedDirtyTrackers() OVERRIDE; virtual bool PromoteDemotedDirtyTrackers() OVERRIDE;
virtual size_t CountDirtyTracker() const OVERRIDE; virtual size_t CountDirtyTracker() const OVERRIDE;
......
...@@ -89,6 +89,7 @@ class MetadataDatabaseIndexInterface { ...@@ -89,6 +89,7 @@ class MetadataDatabaseIndexInterface {
virtual void DemoteDirtyTracker(int64 tracker_id) = 0; virtual void DemoteDirtyTracker(int64 tracker_id) = 0;
virtual bool HasDemotedDirtyTracker() const = 0; virtual bool HasDemotedDirtyTracker() const = 0;
virtual bool IsDemotedDirtyTracker(int64 tracker_id) const = 0;
// Promotes single demoted dirty tracker to a normal dirty tracker. // Promotes single demoted dirty tracker to a normal dirty tracker.
virtual void PromoteDemotedDirtyTracker(int64 tracker_id) = 0; virtual void PromoteDemotedDirtyTracker(int64 tracker_id) = 0;
......
...@@ -525,6 +525,11 @@ bool MetadataDatabaseIndexOnDisk::HasDemotedDirtyTracker() const { ...@@ -525,6 +525,11 @@ bool MetadataDatabaseIndexOnDisk::HasDemotedDirtyTracker() const {
return StartsWithASCII(itr->key().ToString(), kDemotedDirtyIDKeyPrefix, true); return StartsWithASCII(itr->key().ToString(), kDemotedDirtyIDKeyPrefix, true);
} }
bool MetadataDatabaseIndexOnDisk::IsDemotedDirtyTracker(
int64 tracker_id) const {
return DBHasKey(GenerateDemotedDirtyIDKey(tracker_id));
}
void MetadataDatabaseIndexOnDisk::PromoteDemotedDirtyTracker(int64 tracker_id) { void MetadataDatabaseIndexOnDisk::PromoteDemotedDirtyTracker(int64 tracker_id) {
std::string demoted_key = GenerateDemotedDirtyIDKey(tracker_id); std::string demoted_key = GenerateDemotedDirtyIDKey(tracker_id);
...@@ -1127,7 +1132,7 @@ void MetadataDatabaseIndexOnDisk::DeactivateInTrackerIDSetWithPrefix( ...@@ -1127,7 +1132,7 @@ void MetadataDatabaseIndexOnDisk::DeactivateInTrackerIDSetWithPrefix(
} }
} }
bool MetadataDatabaseIndexOnDisk::DBHasKey(const std::string& key) { bool MetadataDatabaseIndexOnDisk::DBHasKey(const std::string& key) const {
scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator()); scoped_ptr<LevelDBWrapper::Iterator> itr(db_->NewIterator());
itr->Seek(key); itr->Seek(key);
return itr->Valid() && (itr->key() == key); return itr->Valid() && (itr->key() == key);
......
...@@ -53,6 +53,7 @@ class MetadataDatabaseIndexOnDisk : public MetadataDatabaseIndexInterface { ...@@ -53,6 +53,7 @@ class MetadataDatabaseIndexOnDisk : public MetadataDatabaseIndexInterface {
virtual int64 PickDirtyTracker() const OVERRIDE; virtual int64 PickDirtyTracker() const OVERRIDE;
virtual void DemoteDirtyTracker(int64 tracker_id) OVERRIDE; virtual void DemoteDirtyTracker(int64 tracker_id) OVERRIDE;
virtual bool HasDemotedDirtyTracker() const OVERRIDE; virtual bool HasDemotedDirtyTracker() const OVERRIDE;
virtual bool IsDemotedDirtyTracker(int64 tracker_id) const OVERRIDE;
virtual void PromoteDemotedDirtyTracker(int64 tracker_id) OVERRIDE; virtual void PromoteDemotedDirtyTracker(int64 tracker_id) OVERRIDE;
virtual bool PromoteDemotedDirtyTrackers() OVERRIDE; virtual bool PromoteDemotedDirtyTrackers() OVERRIDE;
virtual size_t CountDirtyTracker() const OVERRIDE; virtual size_t CountDirtyTracker() const OVERRIDE;
...@@ -149,7 +150,7 @@ class MetadataDatabaseIndexOnDisk : public MetadataDatabaseIndexInterface { ...@@ -149,7 +150,7 @@ class MetadataDatabaseIndexOnDisk : public MetadataDatabaseIndexInterface {
int64 tracker_id); int64 tracker_id);
// Checks if |db_| has an entry whose key is |key|. // Checks if |db_| has an entry whose key is |key|.
bool DBHasKey(const std::string& key); bool DBHasKey(const std::string& key) const;
// Returns the number of dirty trackers, actually counting them. // Returns the number of dirty trackers, actually counting them.
size_t CountDirtyTrackerInternal() const; size_t CountDirtyTrackerInternal() const;
......
...@@ -133,7 +133,9 @@ TEST_F(MetadataDatabaseIndexTest, IndexLookUpTest) { ...@@ -133,7 +133,9 @@ TEST_F(MetadataDatabaseIndexTest, IndexLookUpTest) {
} }
TEST_F(MetadataDatabaseIndexTest, UpdateTest) { TEST_F(MetadataDatabaseIndexTest, UpdateTest) {
EXPECT_FALSE(index()->IsDemotedDirtyTracker(kPlaceholderTrackerID));
index()->DemoteDirtyTracker(kPlaceholderTrackerID); index()->DemoteDirtyTracker(kPlaceholderTrackerID);
EXPECT_TRUE(index()->IsDemotedDirtyTracker(kPlaceholderTrackerID));
EXPECT_EQ(kInvalidTrackerID, index()->PickDirtyTracker()); EXPECT_EQ(kInvalidTrackerID, index()->PickDirtyTracker());
index()->PromoteDemotedDirtyTrackers(); index()->PromoteDemotedDirtyTrackers();
EXPECT_EQ(kPlaceholderTrackerID, index()->PickDirtyTracker()); EXPECT_EQ(kPlaceholderTrackerID, index()->PickDirtyTracker());
......
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