diff options
author | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-04 06:54:44 +0000 |
---|---|---|
committer | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-04 06:54:44 +0000 |
commit | 29b131dfaa15777053f8f06ad901fcb6ab9c9fba (patch) | |
tree | 29ffee9f6df3696aebf7efb3f990734d06e7512c /chrome/browser/chromeos/drive/file_cache_metadata.cc | |
parent | a623aae4e88566e21092dfe6671dcd92fc9d3f26 (diff) | |
download | chromium_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.cc | 241 |
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()); |