summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/drive/file_cache_metadata.cc
diff options
context:
space:
mode:
authorhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-04 06:54:44 +0000
committerhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-04 06:54:44 +0000
commit29b131dfaa15777053f8f06ad901fcb6ab9c9fba (patch)
tree29ffee9f6df3696aebf7efb3f990734d06e7512c /chrome/browser/chromeos/drive/file_cache_metadata.cc
parenta623aae4e88566e21092dfe6671dcd92fc9d3f26 (diff)
downloadchromium_src-29b131dfaa15777053f8f06ad901fcb6ab9c9fba.zip
chromium_src-29b131dfaa15777053f8f06ad901fcb6ab9c9fba.tar.gz
chromium_src-29b131dfaa15777053f8f06ad901fcb6ab9c9fba.tar.bz2
drive: Remove FakeCacheMetadata
FakeCacheMetadata has been maintained to avoid slowness in tests (http://crbug.com/137945). But we are going to merge cache DB with metadata DB and there will be no cache DB initialization at all. (i.e. 0 second spent for cache DB initialization in future) We no longer need to maintain this level of abstraction. BUG=234487 TEST=unit_tests R=kinaba@chromium.org Review URL: https://codereview.chromium.org/16338005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@203878 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/drive/file_cache_metadata.cc')
-rw-r--r--chrome/browser/chromeos/drive/file_cache_metadata.cc241
1 files changed, 30 insertions, 211 deletions
diff --git a/chrome/browser/chromeos/drive/file_cache_metadata.cc b/chrome/browser/chromeos/drive/file_cache_metadata.cc
index 46ac4fa..6f89d3b 100644
--- a/chrome/browser/chromeos/drive/file_cache_metadata.cc
+++ b/chrome/browser/chromeos/drive/file_cache_metadata.cc
@@ -18,6 +18,8 @@ namespace internal {
namespace {
+typedef std::map<std::string, FileCacheEntry> CacheMap;
+
enum DBOpenStatus {
DB_OPEN_SUCCESS,
DB_OPEN_FAILURE_CORRUPTION,
@@ -33,11 +35,10 @@ typedef std::map<std::string, base::FilePath> ResourceIdToFilePathMap;
//
// The resource IDs and file paths of discovered files are collected as a
// ResourceIdToFilePathMap, if these are processed properly.
-void ScanCacheDirectory(
- const std::vector<base::FilePath>& cache_paths,
- FileCache::CacheSubDirectoryType sub_dir_type,
- FileCacheMetadata::CacheMap* cache_map,
- ResourceIdToFilePathMap* processed_file_map) {
+void ScanCacheDirectory(const std::vector<base::FilePath>& cache_paths,
+ FileCache::CacheSubDirectoryType sub_dir_type,
+ CacheMap* cache_map,
+ ResourceIdToFilePathMap* processed_file_map) {
DCHECK(cache_map);
DCHECK(processed_file_map);
@@ -90,7 +91,7 @@ void ScanCacheDirectory(
}
void ScanCachePaths(const std::vector<base::FilePath>& cache_paths,
- FileCacheMetadata::CacheMap* cache_map) {
+ CacheMap* cache_map) {
DVLOG(1) << "Scanning directories";
// Scan cache persistent and tmp directories to enumerate all files and create
@@ -114,8 +115,7 @@ void ScanCachePaths(const std::vector<base::FilePath>& cache_paths,
const std::string& resource_id = iter->first;
const base::FilePath& file_path = iter->second;
- FileCacheMetadata::CacheMap::iterator cache_map_iter =
- cache_map->find(resource_id);
+ CacheMap::iterator cache_map_iter = cache_map->find(resource_id);
if (cache_map_iter != cache_map->end()) {
FileCacheEntry* cache_entry = &cache_map_iter->second;
const bool is_dirty = cache_entry->is_dirty();
@@ -136,9 +136,8 @@ void ScanCachePaths(const std::vector<base::FilePath>& cache_paths,
// Returns true if |md5| matches the one in |cache_entry| with some
// exceptions. See the function definition for details.
-bool CheckIfMd5Matches(
- const std::string& md5,
- const FileCacheEntry& cache_entry) {
+bool CheckIfMd5Matches(const std::string& md5,
+ const FileCacheEntry& cache_entry) {
if (cache_entry.is_dirty()) {
// If the entry is dirty, its MD5 may have been replaced by "local"
// during cache initialization, so we don't compare MD5.
@@ -159,171 +158,28 @@ bool CheckIfMd5Matches(
return false;
}
-////////////////////////////////////////////////////////////////////////////////
-// FileCacheMetadata implementation with std::map.
-// Used for testing.
-
-class FakeCacheMetadata : public FileCacheMetadata {
- public:
- explicit FakeCacheMetadata(
- base::SequencedTaskRunner* blocking_task_runner);
-
- private:
- virtual ~FakeCacheMetadata();
-
- // FileCacheMetadata overrides:
- virtual bool Initialize(
- const std::vector<base::FilePath>& cache_paths) OVERRIDE;
- virtual void AddOrUpdateCacheEntry(
- const std::string& resource_id,
- const FileCacheEntry& cache_entry) OVERRIDE;
- virtual void RemoveCacheEntry(const std::string& resource_id) OVERRIDE;
- virtual bool GetCacheEntry(const std::string& resource_id,
- const std::string& md5,
- FileCacheEntry* cache_entry) OVERRIDE;
- virtual void RemoveTemporaryFiles() OVERRIDE;
- virtual void Iterate(const CacheIterateCallback& callback) OVERRIDE;
-
- CacheMap cache_map_;
-
- DISALLOW_COPY_AND_ASSIGN(FakeCacheMetadata);
-};
-
-FakeCacheMetadata::FakeCacheMetadata(
- base::SequencedTaskRunner* blocking_task_runner)
- : FileCacheMetadata(blocking_task_runner) {
- AssertOnSequencedWorkerPool();
-}
-
-FakeCacheMetadata::~FakeCacheMetadata() {
- AssertOnSequencedWorkerPool();
-}
-
-bool FakeCacheMetadata::Initialize(
- const std::vector<base::FilePath>& cache_paths) {
- AssertOnSequencedWorkerPool();
-
- ScanCachePaths(cache_paths, &cache_map_);
- return true;
-}
-
-void FakeCacheMetadata::AddOrUpdateCacheEntry(
- const std::string& resource_id,
- const FileCacheEntry& cache_entry) {
- AssertOnSequencedWorkerPool();
-
- CacheMap::iterator iter = cache_map_.find(resource_id);
- if (iter == cache_map_.end()) { // New resource, create new entry.
- cache_map_.insert(std::make_pair(resource_id, cache_entry));
- } else { // Resource exists.
- cache_map_[resource_id] = cache_entry;
- }
-}
-
-void FakeCacheMetadata::RemoveCacheEntry(const std::string& resource_id) {
- AssertOnSequencedWorkerPool();
-
- CacheMap::iterator iter = cache_map_.find(resource_id);
- if (iter != cache_map_.end()) {
- // Delete the FileCacheEntry and remove it from the map.
- cache_map_.erase(iter);
- }
-}
-
-bool FakeCacheMetadata::GetCacheEntry(const std::string& resource_id,
- const std::string& md5,
- FileCacheEntry* entry) {
- DCHECK(entry);
- AssertOnSequencedWorkerPool();
-
- CacheMap::iterator iter = cache_map_.find(resource_id);
- if (iter == cache_map_.end()) {
- DVLOG(1) << "Can't find " << resource_id << " in cache map";
- return false;
- }
-
- const FileCacheEntry& cache_entry = iter->second;
-
- if (!CheckIfMd5Matches(md5, cache_entry)) {
- return false;
- }
-
- *entry = cache_entry;
- return true;
-}
-
-void FakeCacheMetadata::RemoveTemporaryFiles() {
- AssertOnSequencedWorkerPool();
-
- CacheMap::iterator iter = cache_map_.begin();
- while (iter != cache_map_.end()) {
- if (!iter->second.is_persistent()) {
- // Post-increment the iterator to avoid iterator invalidation.
- cache_map_.erase(iter++);
- } else {
- ++iter;
- }
- }
-}
-
-void FakeCacheMetadata::Iterate(const CacheIterateCallback& callback) {
- AssertOnSequencedWorkerPool();
-
- for (CacheMap::const_iterator iter = cache_map_.begin();
- iter != cache_map_.end(); ++iter) {
- callback.Run(iter->first, iter->second);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// FileCacheMetadata implementation with level::db.
-
-class FileCacheMetadataDB : public FileCacheMetadata {
- public:
- explicit FileCacheMetadataDB(
- base::SequencedTaskRunner* blocking_task_runner);
-
- private:
- virtual ~FileCacheMetadataDB();
-
- // FileCacheMetadata overrides:
- virtual bool Initialize(
- const std::vector<base::FilePath>& cache_paths) OVERRIDE;
- virtual void AddOrUpdateCacheEntry(
- const std::string& resource_id,
- const FileCacheEntry& cache_entry) OVERRIDE;
- virtual void RemoveCacheEntry(const std::string& resource_id) OVERRIDE;
- virtual bool GetCacheEntry(const std::string& resource_id,
- const std::string& md5,
- FileCacheEntry* cache_entry) OVERRIDE;
- virtual void RemoveTemporaryFiles() OVERRIDE;
- virtual void Iterate(const CacheIterateCallback& callback) OVERRIDE;
-
- // Helper function to insert |cache_map| entries into the database.
- void InsertMapIntoDB(const CacheMap& cache_map);
-
- scoped_ptr<leveldb::DB> level_db_;
+} // namespace
- DISALLOW_COPY_AND_ASSIGN(FileCacheMetadataDB);
-};
+// static
+const base::FilePath::CharType* FileCacheMetadata::kCacheMetadataDBPath =
+ FILE_PATH_LITERAL("cache_metadata.db");
-FileCacheMetadataDB::FileCacheMetadataDB(
+FileCacheMetadata::FileCacheMetadata(
base::SequencedTaskRunner* blocking_task_runner)
- : FileCacheMetadata(blocking_task_runner) {
+ : blocking_task_runner_(blocking_task_runner) {
AssertOnSequencedWorkerPool();
}
-FileCacheMetadataDB::~FileCacheMetadataDB() {
+FileCacheMetadata::~FileCacheMetadata() {
AssertOnSequencedWorkerPool();
}
-bool FileCacheMetadataDB::Initialize(
+bool FileCacheMetadata::Initialize(
const std::vector<base::FilePath>& cache_paths) {
AssertOnSequencedWorkerPool();
const base::FilePath db_path =
- cache_paths[FileCache::CACHE_TYPE_META].Append(
- kCacheMetadataDBPath);
+ cache_paths[FileCache::CACHE_TYPE_META].Append(kCacheMetadataDBPath);
DVLOG(1) << "db path=" << db_path.value();
bool scan_cache = !file_util::PathExists(db_path);
@@ -365,21 +221,16 @@ bool FileCacheMetadataDB::Initialize(
if (scan_cache) {
CacheMap cache_map;
ScanCachePaths(cache_paths, &cache_map);
- InsertMapIntoDB(cache_map);
+ for (CacheMap::const_iterator it = cache_map.begin();
+ it != cache_map.end(); ++it) {
+ AddOrUpdateCacheEntry(it->first, it->second);
+ }
}
return true;
}
-void FileCacheMetadataDB::InsertMapIntoDB(const CacheMap& cache_map) {
- DVLOG(1) << "InsertMapIntoDB";
- for (CacheMap::const_iterator it = cache_map.begin();
- it != cache_map.end(); ++it) {
- AddOrUpdateCacheEntry(it->first, it->second);
- }
-}
-
-void FileCacheMetadataDB::AddOrUpdateCacheEntry(
+void FileCacheMetadata::AddOrUpdateCacheEntry(
const std::string& resource_id,
const FileCacheEntry& cache_entry) {
AssertOnSequencedWorkerPool();
@@ -393,16 +244,16 @@ void FileCacheMetadataDB::AddOrUpdateCacheEntry(
leveldb::Slice(serialized));
}
-void FileCacheMetadataDB::RemoveCacheEntry(const std::string& resource_id) {
+void FileCacheMetadata::RemoveCacheEntry(const std::string& resource_id) {
AssertOnSequencedWorkerPool();
DVLOG(1) << "RemoveCacheEntry, resource_id=" << resource_id;
level_db_->Delete(leveldb::WriteOptions(), leveldb::Slice(resource_id));
}
-bool FileCacheMetadataDB::GetCacheEntry(const std::string& resource_id,
- const std::string& md5,
- FileCacheEntry* entry) {
+bool FileCacheMetadata::GetCacheEntry(const std::string& resource_id,
+ const std::string& md5,
+ FileCacheEntry* entry) {
DCHECK(entry);
AssertOnSequencedWorkerPool();
@@ -430,7 +281,7 @@ bool FileCacheMetadataDB::GetCacheEntry(const std::string& resource_id,
return true;
}
-void FileCacheMetadataDB::RemoveTemporaryFiles() {
+void FileCacheMetadata::RemoveTemporaryFiles() {
AssertOnSequencedWorkerPool();
scoped_ptr<leveldb::Iterator> iter(level_db_->NewIterator(
@@ -444,7 +295,7 @@ void FileCacheMetadataDB::RemoveTemporaryFiles() {
}
}
-void FileCacheMetadataDB::Iterate(const CacheIterateCallback& callback) {
+void FileCacheMetadata::Iterate(const CacheIterateCallback& callback) {
AssertOnSequencedWorkerPool();
scoped_ptr<leveldb::Iterator> iter(level_db_->NewIterator(
@@ -458,38 +309,6 @@ void FileCacheMetadataDB::Iterate(const CacheIterateCallback& callback) {
}
}
-} // namespace
-
-// static
-const base::FilePath::CharType* FileCacheMetadata::kCacheMetadataDBPath =
- FILE_PATH_LITERAL("cache_metadata.db");
-
-
-FileCacheMetadata::FileCacheMetadata(
- base::SequencedTaskRunner* blocking_task_runner)
- : blocking_task_runner_(blocking_task_runner) {
- AssertOnSequencedWorkerPool();
-}
-
-FileCacheMetadata::~FileCacheMetadata() {
- AssertOnSequencedWorkerPool();
-}
-
-// static
-scoped_ptr<FileCacheMetadata> FileCacheMetadata::CreateCacheMetadata(
- base::SequencedTaskRunner* blocking_task_runner) {
- return scoped_ptr<FileCacheMetadata>(
- new FileCacheMetadataDB(blocking_task_runner));
-}
-
-// static
-scoped_ptr<FileCacheMetadata>
-FileCacheMetadata::CreateCacheMetadataForTesting(
- base::SequencedTaskRunner* blocking_task_runner) {
- return scoped_ptr<FileCacheMetadata>(
- new FakeCacheMetadata(blocking_task_runner));
-}
-
void FileCacheMetadata::AssertOnSequencedWorkerPool() {
DCHECK(!blocking_task_runner_ ||
blocking_task_runner_->RunsTasksOnCurrentThread());