summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-05 10:47:20 +0000
committerhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-05 10:47:20 +0000
commit341dc7a81f1c1603ba1c6e64b82aa46a7e79be9d (patch)
tree5556d04b44e167739e4a8b58a251195b51f4161d
parent7f53dff157f2032ce8c779dc37693c3bab630adb (diff)
downloadchromium_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.cc16
-rw-r--r--chrome/browser/chromeos/drive/resource_metadata_unittest.cc21
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) {