diff options
author | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-05 10:47:20 +0000 |
---|---|---|
committer | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-05 10:47:20 +0000 |
commit | 341dc7a81f1c1603ba1c6e64b82aa46a7e79be9d (patch) | |
tree | 5556d04b44e167739e4a8b58a251195b51f4161d | |
parent | 7f53dff157f2032ce8c779dc37693c3bab630adb (diff) | |
download | chromium_src-341dc7a81f1c1603ba1c6e64b82aa46a7e79be9d.zip chromium_src-341dc7a81f1c1603ba1c6e64b82aa46a7e79be9d.tar.gz chromium_src-341dc7a81f1c1603ba1c6e64b82aa46a7e79be9d.tar.bz2 |
drive: Stop removing entries on fast-fetch
Removing entries on fast-fetch may result in a race with copy operation.
Stop removing entries in ResourceMetadata::RefreshDirectory().
BUG=268264
TEST=unit_tests
R=kinaba@chromium.org
Review URL: https://codereview.chromium.org/22155002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@215594 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/drive/resource_metadata.cc | 16 | ||||
-rw-r--r-- | chrome/browser/chromeos/drive/resource_metadata_unittest.cc | 21 |
2 files changed, 10 insertions, 27 deletions
diff --git a/chrome/browser/chromeos/drive/resource_metadata.cc b/chrome/browser/chromeos/drive/resource_metadata.cc index 38852a8..1bfc8f0 100644 --- a/chrome/browser/chromeos/drive/resource_metadata.cc +++ b/chrome/browser/chromeos/drive/resource_metadata.cc @@ -640,8 +640,7 @@ FileError ResourceMetadata::RefreshDirectory( directory_fetch_info.changestamp()); storage_->PutEntry(directory); - // First, go through the entry map. We'll handle existing entries and new - // entries in the loop. We'll process deleted entries afterwards. + // Go through the entry map. Handle existing entries and new entries. for (ResourceEntryMap::const_iterator it = entry_map.begin(); it != entry_map.end(); ++it) { if (!EnoughDiskSpaceIsAvailableForDBOperation(storage_->directory_path())) @@ -665,19 +664,6 @@ FileError ResourceMetadata::RefreshDirectory( return FILE_ERROR_FAILED; } - // Go through the existing entries and remove deleted entries. - std::vector<std::string> children; - storage_->GetChildren(directory.resource_id(), &children); - for (size_t i = 0; i < children.size(); ++i) { - if (!EnoughDiskSpaceIsAvailableForDBOperation(storage_->directory_path())) - return FILE_ERROR_NO_LOCAL_SPACE; - - if (entry_map.count(children[i]) == 0) { - if (!RemoveEntryRecursively(children[i])) - return FILE_ERROR_FAILED; - } - } - if (out_file_path) *out_file_path = GetFilePath(directory.resource_id()); diff --git a/chrome/browser/chromeos/drive/resource_metadata_unittest.cc b/chrome/browser/chromeos/drive/resource_metadata_unittest.cc index 68eb589..4392c84 100644 --- a/chrome/browser/chromeos/drive/resource_metadata_unittest.cc +++ b/chrome/browser/chromeos/drive/resource_metadata_unittest.cc @@ -537,7 +537,7 @@ TEST_F(ResourceMetadataTestOnUIThread, RenameEntry) { EXPECT_EQ(base::FilePath(), drive_file_path); } -TEST_F(ResourceMetadataTestOnUIThread, RefreshDirectory_EmtpyMap) { +TEST_F(ResourceMetadataTestOnUIThread, RefreshDirectory_EmptyMap) { base::FilePath kDirectoryPath(FILE_PATH_LITERAL("drive/root/dir1")); const int64 kNewChangestamp = kTestChangestamp + 1; @@ -582,9 +582,6 @@ TEST_F(ResourceMetadataTestOnUIThread, RefreshDirectory_EmtpyMap) { // Read the directory again. entries = ReadDirectoryByPathSync(base::FilePath(kDirectoryPath)); ASSERT_TRUE(entries.get()); - // All entries ("file4", "file5", "dir3") should be gone now, as - // RefreshDirectory() was called with an empty map. - ASSERT_TRUE(entries->empty()); } TEST_F(ResourceMetadataTestOnUIThread, RefreshDirectory_NonEmptyMap) { @@ -673,14 +670,13 @@ TEST_F(ResourceMetadataTestOnUIThread, RefreshDirectory_NonEmptyMap) { // Read the directory again. entries = ReadDirectoryByPathSync(kDirectoryPath); ASSERT_TRUE(entries.get()); - // "file4", "file5", should be gone now. "dir3" should remain. "new_file" - // "new_directory", "dir2" should now be added. - ASSERT_EQ(4U, entries->size()); + // "new_file", "new_directory", "dir2" should now be added. base_names = GetSortedBaseNames(*entries); - EXPECT_EQ("dir2", base_names[0]); - EXPECT_EQ("dir3", base_names[1]); - EXPECT_EQ("new_directory", base_names[2]); - EXPECT_EQ("new_file", base_names[3]); + EXPECT_EQ(1, std::count(base_names.begin(), base_names.end(), "dir2")); + EXPECT_EQ(1, + std::count(base_names.begin(), base_names.end(), "new_directory")); + EXPECT_EQ(1, + std::count(base_names.begin(), base_names.end(), "new_file")); // Get the new directory. scoped_ptr<ResourceEntry> new_directory_proto; @@ -762,7 +758,8 @@ TEST_F(ResourceMetadataTestOnUIThread, RefreshDirectory_WrongParentResourceId) { scoped_ptr<ResourceEntryVector> entries; entries = ReadDirectoryByPathSync(kDirectoryPath); ASSERT_TRUE(entries.get()); - ASSERT_TRUE(entries->empty()); + std::vector<std::string> base_names = GetSortedBaseNames(*entries); + EXPECT_EQ(0, std::count(base_names.begin(), base_names.end(), "new_file")); } TEST_F(ResourceMetadataTestOnUIThread, AddEntry) { |