diff options
author | Ruoxin Sang <rxsang@google.com> | 2018-05-22 15:51:17 -0700 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2018-05-22 15:53:16 -0700 |
commit | 7f75fc526898c4c030b5c6f30deb331fcff7b70c (patch) | |
tree | 7aae505bbdac8d962a4d385e37f7c6bf2c5b5bcd | |
parent | b7d3d31a78ce90fd9733d67247ae34c694199d19 (diff) |
Always append the trailing slash when look up or insert a directory path in the stat cache.
PiperOrigin-RevId: 197637482
-rw-r--r-- | tensorflow/core/platform/cloud/gcs_file_system.cc | 3 | ||||
-rw-r--r-- | tensorflow/core/platform/cloud/gcs_file_system_test.cc | 16 |
2 files changed, 14 insertions, 5 deletions
diff --git a/tensorflow/core/platform/cloud/gcs_file_system.cc b/tensorflow/core/platform/cloud/gcs_file_system.cc index a7be527c13..8307758936 100644 --- a/tensorflow/core/platform/cloud/gcs_file_system.cc +++ b/tensorflow/core/platform/cloud/gcs_file_system.cc @@ -1103,7 +1103,8 @@ Status GcsFileSystem::FolderExists(const string& dirname, bool* result) { } }; GcsFileStat stat; - Status s = stat_cache_->LookupOrCompute(dirname, &stat, compute_func); + Status s = stat_cache_->LookupOrCompute(MaybeAppendSlash(dirname), &stat, + compute_func); if (s.ok()) { *result = stat.base.is_directory; return Status::OK(); diff --git a/tensorflow/core/platform/cloud/gcs_file_system_test.cc b/tensorflow/core/platform/cloud/gcs_file_system_test.cc index bb4ace65a9..3f73b238ad 100644 --- a/tensorflow/core/platform/cloud/gcs_file_system_test.cc +++ b/tensorflow/core/platform/cloud/gcs_file_system_test.cc @@ -1107,7 +1107,7 @@ TEST(GcsFileSystemTest, FileExists_StatCache) { "\"updated\": \"2016-04-29T23:15:24.896Z\"}")), new FakeHttpRequest( "Uri: https://www.googleapis.com/storage/v1/b/bucket/o/" - "path%2Fsubfolder?fields=size%2Cgeneration%2Cupdated\n" + "path%2Fsubfolder%2F?fields=size%2Cgeneration%2Cupdated\n" "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "", errors::NotFound("404"), 404), @@ -1133,7 +1133,7 @@ TEST(GcsFileSystemTest, FileExists_StatCache) { // HTTP requests. for (int i = 0; i < 10; i++) { TF_EXPECT_OK(fs.FileExists("gs://bucket/path/file1.txt")); - TF_EXPECT_OK(fs.FileExists("gs://bucket/path/subfolder")); + TF_EXPECT_OK(fs.FileExists("gs://bucket/path/subfolder/")); } } @@ -1932,6 +1932,14 @@ TEST(GcsFileSystemTest, RenameFile_Object) { "Range: 0-15\n" "Timeouts: 5 1 20\n", "76543210"), + // IsDirectory is checking whether there are children objects. + new FakeHttpRequest( + "Uri: https://www.googleapis.com/storage/v1/b/bucket/o?" + "fields=items%2Fname%2CnextPageToken&prefix=path%2Fsrc.txt%2F" + "&maxResults=1\n" + "Auth Token: fake_token\n" + "Timeouts: 5 1 10\n", + "{}"), // Copying to the new location. new FakeHttpRequest( "Uri: https://www.googleapis.com/storage/v1/b/bucket/o/" @@ -2318,7 +2326,7 @@ TEST(GcsFileSystemTest, Stat_Cache) { "\"updated\": \"2016-04-29T23:15:24.896Z\"}")), new FakeHttpRequest( "Uri: https://www.googleapis.com/storage/v1/b/bucket/o/" - "subfolder?fields=size%2Cgeneration%2Cupdated\n" + "subfolder%2F?fields=size%2Cgeneration%2Cupdated\n" "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "", errors::NotFound("404"), 404), @@ -2348,7 +2356,7 @@ TEST(GcsFileSystemTest, Stat_Cache) { EXPECT_EQ(1010, stat.length); EXPECT_NEAR(1461971724896, stat.mtime_nsec / 1000 / 1000, 1); EXPECT_FALSE(stat.is_directory); - TF_EXPECT_OK(fs.Stat("gs://bucket/subfolder", &stat)); + TF_EXPECT_OK(fs.Stat("gs://bucket/subfolder/", &stat)); EXPECT_EQ(0, stat.length); EXPECT_EQ(0, stat.mtime_nsec); EXPECT_TRUE(stat.is_directory); |