diff options
author | Russell Power <power@google.com> | 2018-10-01 10:57:32 -0700 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2018-10-01 11:01:57 -0700 |
commit | ce1cdd52eda4b40ff8fb8c09bc178210883b3773 (patch) | |
tree | 0e2a0b727132e1219a467365447999ae3fe89b58 /tensorflow/core/platform | |
parent | 5fdf2474245b84759d218a6330f20d4bcfdf7427 (diff) |
Make GCS filesystem/metadata lookup retries configurable
PiperOrigin-RevId: 215243030
Diffstat (limited to 'tensorflow/core/platform')
13 files changed, 846 insertions, 790 deletions
diff --git a/tensorflow/core/platform/cloud/compute_engine_metadata_client.cc b/tensorflow/core/platform/cloud/compute_engine_metadata_client.cc index f41b83ac34..affb68ebbb 100644 --- a/tensorflow/core/platform/cloud/compute_engine_metadata_client.cc +++ b/tensorflow/core/platform/cloud/compute_engine_metadata_client.cc @@ -17,7 +17,6 @@ limitations under the License. #include <utility> #include "tensorflow/core/platform/cloud/curl_http_request.h" -#include "tensorflow/core/platform/cloud/retrying_utils.h" namespace tensorflow { @@ -25,21 +24,14 @@ namespace { // The URL to retrieve metadata when running in Google Compute Engine. constexpr char kGceMetadataBaseUrl[] = "http://metadata/computeMetadata/v1/"; -// The default initial delay between retries with exponential backoff. -constexpr int kInitialRetryDelayUsec = 500000; // 0.5 sec } // namespace ComputeEngineMetadataClient::ComputeEngineMetadataClient( - std::shared_ptr<HttpRequest::Factory> http_request_factory) - : ComputeEngineMetadataClient(std::move(http_request_factory), - kInitialRetryDelayUsec) {} - -ComputeEngineMetadataClient::ComputeEngineMetadataClient( std::shared_ptr<HttpRequest::Factory> http_request_factory, - int64 initial_retry_delay_usec) + const RetryConfig& config) : http_request_factory_(std::move(http_request_factory)), - initial_retry_delay_usec_(initial_retry_delay_usec) {} + retry_config_(config) {} Status ComputeEngineMetadataClient::GetMetadata( const string& path, std::vector<char>* response_buffer) { @@ -52,8 +44,7 @@ Status ComputeEngineMetadataClient::GetMetadata( return Status::OK(); }; - return RetryingUtils::CallWithRetries(get_metadata_from_gce, - initial_retry_delay_usec_); + return RetryingUtils::CallWithRetries(get_metadata_from_gce, retry_config_); } } // namespace tensorflow diff --git a/tensorflow/core/platform/cloud/compute_engine_metadata_client.h b/tensorflow/core/platform/cloud/compute_engine_metadata_client.h index 534ccf30b2..7f060327da 100644 --- a/tensorflow/core/platform/cloud/compute_engine_metadata_client.h +++ b/tensorflow/core/platform/cloud/compute_engine_metadata_client.h @@ -18,6 +18,7 @@ limitations under the License. #include "tensorflow/core/lib/core/status.h" #include "tensorflow/core/platform/cloud/http_request.h" +#include "tensorflow/core/platform/cloud/retrying_utils.h" namespace tensorflow { @@ -31,10 +32,11 @@ namespace tensorflow { class ComputeEngineMetadataClient { public: explicit ComputeEngineMetadataClient( - std::shared_ptr<HttpRequest::Factory> http_request_factory); - ComputeEngineMetadataClient( std::shared_ptr<HttpRequest::Factory> http_request_factory, - int64 initial_retry_delay_usec); + const RetryConfig& config = RetryConfig( + 10000, /* init_delay_time_us = 1 ms */ + 1000000 /* max_delay_time_us = 1 s */ + )); virtual ~ComputeEngineMetadataClient() {} /// \brief Get the metadata value for a given attribute of the metadata @@ -54,7 +56,7 @@ class ComputeEngineMetadataClient { private: std::shared_ptr<HttpRequest::Factory> http_request_factory_; - const int64 initial_retry_delay_usec_; + const RetryConfig retry_config_; TF_DISALLOW_COPY_AND_ASSIGN(ComputeEngineMetadataClient); }; diff --git a/tensorflow/core/platform/cloud/compute_engine_metadata_client_test.cc b/tensorflow/core/platform/cloud/compute_engine_metadata_client_test.cc index 4c41ccaa0e..e891b4a5e9 100644 --- a/tensorflow/core/platform/cloud/compute_engine_metadata_client_test.cc +++ b/tensorflow/core/platform/cloud/compute_engine_metadata_client_test.cc @@ -30,7 +30,8 @@ TEST(ComputeEngineMetadataClientTest, GetMetadata) { std::shared_ptr<HttpRequest::Factory> http_factory = std::make_shared<FakeHttpRequestFactory>(&requests); - ComputeEngineMetadataClient client(http_factory, 0); + ComputeEngineMetadataClient client(http_factory, + RetryConfig(0 /* init_delay_time_us */)); std::vector<char> result; TF_EXPECT_OK( @@ -56,7 +57,8 @@ TEST(ComputeEngineMetadataClientTest, RetryOnFailure) { std::shared_ptr<HttpRequest::Factory> http_factory = std::make_shared<FakeHttpRequestFactory>(&requests); - ComputeEngineMetadataClient client(http_factory, 0); + ComputeEngineMetadataClient client(http_factory, + RetryConfig(0 /* init_delay_time_us */)); std::vector<char> result; TF_EXPECT_OK( diff --git a/tensorflow/core/platform/cloud/compute_engine_zone_provider_test.cc b/tensorflow/core/platform/cloud/compute_engine_zone_provider_test.cc index f7477eca23..476e4f9c1f 100644 --- a/tensorflow/core/platform/cloud/compute_engine_zone_provider_test.cc +++ b/tensorflow/core/platform/cloud/compute_engine_zone_provider_test.cc @@ -34,8 +34,8 @@ TEST_F(ComputeEngineZoneProviderTest, GetZone) { auto httpRequestFactory = std::make_shared<FakeHttpRequestFactory>(&requests); - auto metadata_client = - std::make_shared<ComputeEngineMetadataClient>(httpRequestFactory, 0); + auto metadata_client = std::make_shared<ComputeEngineMetadataClient>( + httpRequestFactory, RetryConfig(0 /* init_delay_time_us */)); ComputeEngineZoneProvider provider(metadata_client); @@ -55,8 +55,8 @@ TEST_F(ComputeEngineZoneProviderTest, InvalidZoneString) { auto httpRequestFactory = std::make_shared<FakeHttpRequestFactory>(&requests); - auto metadata_client = - std::make_shared<ComputeEngineMetadataClient>(httpRequestFactory, 0); + auto metadata_client = std::make_shared<ComputeEngineMetadataClient>( + httpRequestFactory, RetryConfig(0 /* init_delay_time_us */)); ComputeEngineZoneProvider provider(metadata_client); diff --git a/tensorflow/core/platform/cloud/gcs_file_system.cc b/tensorflow/core/platform/cloud/gcs_file_system.cc index 83ea8539ed..c61b68aeeb 100644 --- a/tensorflow/core/platform/cloud/gcs_file_system.cc +++ b/tensorflow/core/platform/cloud/gcs_file_system.cc @@ -333,14 +333,14 @@ class GcsWritableFile : public WritableFile { GcsFileSystem* filesystem, GcsFileSystem::TimeoutConfig* timeouts, std::function<void()> file_cache_erase, - int64 initial_retry_delay_usec) + RetryConfig retry_config) : bucket_(bucket), object_(object), filesystem_(filesystem), timeouts_(timeouts), file_cache_erase_(std::move(file_cache_erase)), sync_needed_(true), - initial_retry_delay_usec_(initial_retry_delay_usec) { + retry_config_(retry_config) { // TODO: to make it safer, outfile_ should be constructed from an FD if (GetTmpFilename(&tmp_content_filename_).ok()) { outfile_.open(tmp_content_filename_, @@ -357,14 +357,14 @@ class GcsWritableFile : public WritableFile { GcsFileSystem* filesystem, const string& tmp_content_filename, GcsFileSystem::TimeoutConfig* timeouts, std::function<void()> file_cache_erase, - int64 initial_retry_delay_usec) + RetryConfig retry_config) : bucket_(bucket), object_(object), filesystem_(filesystem), timeouts_(timeouts), file_cache_erase_(std::move(file_cache_erase)), sync_needed_(true), - initial_retry_delay_usec_(initial_retry_delay_usec) { + retry_config_(retry_config) { tmp_content_filename_ = tmp_content_filename; outfile_.open(tmp_content_filename_, std::ofstream::binary | std::ofstream::app); @@ -441,7 +441,7 @@ class GcsWritableFile : public WritableFile { first_attempt = false; return UploadToSession(session_uri, already_uploaded); }, - initial_retry_delay_usec_); + retry_config_); if (upload_status.code() == errors::Code::NOT_FOUND) { // GCS docs recommend retrying the whole upload. We're relying on the // RetryingFileSystem to retry the Sync() call. @@ -586,7 +586,7 @@ class GcsWritableFile : public WritableFile { GcsFileSystem::TimeoutConfig* timeouts_; std::function<void()> file_cache_erase_; bool sync_needed_; // whether there is buffered data that needs to be synced - int64 initial_retry_delay_usec_; + RetryConfig retry_config_; }; class GcsReadOnlyMemoryRegion : public ReadOnlyMemoryRegion { @@ -791,7 +791,7 @@ GcsFileSystem::GcsFileSystem( std::unique_ptr<ZoneProvider> zone_provider, size_t block_size, size_t max_bytes, uint64 max_staleness, uint64 stat_cache_max_age, size_t stat_cache_max_entries, uint64 matching_paths_cache_max_age, - size_t matching_paths_cache_max_entries, int64 initial_retry_delay_usec, + size_t matching_paths_cache_max_entries, RetryConfig retry_config, TimeoutConfig timeouts, const std::unordered_set<string>& allowed_locations, std::pair<const string, const string>* additional_header) : auth_provider_(std::move(auth_provider)), @@ -806,7 +806,7 @@ GcsFileSystem::GcsFileSystem( kCacheNeverExpire, kBucketLocationCacheMaxEntries)), allowed_locations_(allowed_locations), timeouts_(timeouts), - initial_retry_delay_usec_(initial_retry_delay_usec), + retry_config_(retry_config), additional_header_(additional_header) {} Status GcsFileSystem::NewRandomAccessFile( @@ -941,7 +941,7 @@ Status GcsFileSystem::NewWritableFile(const string& fname, TF_RETURN_IF_ERROR(ParseGcsPath(fname, false, &bucket, &object)); result->reset(new GcsWritableFile(bucket, object, this, &timeouts_, [this, fname]() { ClearFileCaches(fname); }, - initial_retry_delay_usec_)); + retry_config_)); return Status::OK(); } @@ -981,7 +981,7 @@ Status GcsFileSystem::NewAppendableFile(const string& fname, TF_RETURN_IF_ERROR(ParseGcsPath(fname, false, &bucket, &object)); result->reset(new GcsWritableFile( bucket, object, this, old_content_filename, &timeouts_, - [this, fname]() { ClearFileCaches(fname); }, initial_retry_delay_usec_)); + [this, fname]() { ClearFileCaches(fname); }, retry_config_)); return Status::OK(); } @@ -1534,7 +1534,7 @@ Status GcsFileSystem::RenameObject(const string& src, const string& target) { // on the server side, we can't just retry the whole RenameFile operation // because the source object is already gone. return RetryingUtils::DeleteWithRetries( - [this, &src]() { return DeleteFile(src); }, initial_retry_delay_usec_); + [this, &src]() { return DeleteFile(src); }, retry_config_); } Status GcsFileSystem::IsDirectory(const string& fname) { @@ -1590,8 +1590,7 @@ Status GcsFileSystem::DeleteRecursively(const string& dirname, // and therefore RetryingFileSystem won't pay attention to the failures, // we need to make sure these failures are properly retried. const auto& delete_file_status = RetryingUtils::DeleteWithRetries( - [this, &full_path]() { return DeleteFile(full_path); }, - initial_retry_delay_usec_); + [this, &full_path]() { return DeleteFile(full_path); }, retry_config_); if (!delete_file_status.ok()) { if (IsDirectory(full_path).ok()) { // The object is a directory marker. diff --git a/tensorflow/core/platform/cloud/gcs_file_system.h b/tensorflow/core/platform/cloud/gcs_file_system.h index 71db707687..d0840a3046 100644 --- a/tensorflow/core/platform/cloud/gcs_file_system.h +++ b/tensorflow/core/platform/cloud/gcs_file_system.h @@ -93,7 +93,7 @@ class GcsFileSystem : public FileSystem { uint64 stat_cache_max_age, size_t stat_cache_max_entries, uint64 matching_paths_cache_max_age, size_t matching_paths_cache_max_entries, - int64 initial_retry_delay_usec, TimeoutConfig timeouts, + RetryConfig retry_config, TimeoutConfig timeouts, const std::unordered_set<string>& allowed_locations, std::pair<const string, const string>* additional_header); @@ -332,7 +332,7 @@ class GcsFileSystem : public FileSystem { GcsStatsInterface* stats_ = nullptr; // Not owned. /// The initial delay for exponential backoffs when retrying failed calls. - const int64 initial_retry_delay_usec_ = 1000000L; + RetryConfig retry_config_; // Additional header material to be transmitted with all GCS requests std::unique_ptr<std::pair<const string, const string>> additional_header_; @@ -344,7 +344,8 @@ class GcsFileSystem : public FileSystem { class RetryingGcsFileSystem : public RetryingFileSystem<GcsFileSystem> { public: RetryingGcsFileSystem() - : RetryingFileSystem(std::unique_ptr<GcsFileSystem>(new GcsFileSystem)) {} + : RetryingFileSystem(std::unique_ptr<GcsFileSystem>(new GcsFileSystem), + RetryConfig(100000 /* init_delay_time_us */)) {} }; } // namespace tensorflow diff --git a/tensorflow/core/platform/cloud/gcs_file_system_test.cc b/tensorflow/core/platform/cloud/gcs_file_system_test.cc index 14376ad339..702802b185 100644 --- a/tensorflow/core/platform/cloud/gcs_file_system_test.cc +++ b/tensorflow/core/platform/cloud/gcs_file_system_test.cc @@ -24,6 +24,8 @@ namespace tensorflow { namespace { static GcsFileSystem::TimeoutConfig kTestTimeoutConfig(5, 1, 10, 20, 30); +static RetryConfig kTestRetryConfig(0 /* init_delay_time_us */); + // Default (empty) constraint config static std::unordered_set<string>* kAllowedLocationsDefault = new std::unordered_set<string>(); @@ -62,16 +64,16 @@ TEST(GcsFileSystemTest, NewRandomAccessFile_NoBlockCache) { "Range: 6-11\n" "Timeouts: 5 1 20\n", "6789")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::unique_ptr<RandomAccessFile> file; TF_EXPECT_OK(fs.NewRandomAccessFile("gs://bucket/random_access.txt", &file)); @@ -108,9 +110,9 @@ TEST(GcsFileSystemTest, 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, - 0 /* initial retry delay */, kTestTimeoutConfig, - *kAllowedLocationsAuto, nullptr /* gcs additional header */); + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsAuto, + nullptr /* gcs additional header */); std::unique_ptr<RandomAccessFile> file; TF_EXPECT_OK(fs.NewRandomAccessFile("gs://bucket/random_access.txt", &file)); @@ -150,9 +152,9 @@ TEST(GcsFileSystemTest, NewRandomAccessFile_WithLocationConstraintCaching) { 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, - 0 /* initial retry delay */, kTestTimeoutConfig, - *kAllowedLocationsAuto, nullptr /* gcs additional header */); + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsAuto, + nullptr /* gcs additional header */); std::unique_ptr<RandomAccessFile> file; @@ -191,9 +193,9 @@ TEST(GcsFileSystemTest, 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, - 0 /* initial retry delay */, kTestTimeoutConfig, - *kAllowedLocationsAuto, nullptr /* gcs additional header */); + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsAuto, + nullptr /* gcs additional header */); std::unique_ptr<RandomAccessFile> file; EXPECT_EQ(tensorflow::errors::FailedPrecondition( @@ -216,16 +218,16 @@ TEST(GcsFileSystemTest, NewRandomAccessFile_NoBlockCache_DifferentN) { "Range: 3-12\n" "Timeouts: 5 1 20\n", "3456789")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::unique_ptr<RandomAccessFile> file; TF_EXPECT_OK(fs.NewRandomAccessFile("gs://bucket/random_access.txt", &file)); @@ -283,7 +285,7 @@ TEST(GcsFileSystemTest, NewRandomAccessFile_WithBlockCache) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 9 /* block size */, 18 /* max bytes */, 0 /* max staleness */, 3600 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); @@ -372,7 +374,7 @@ TEST(GcsFileSystemTest, NewRandomAccessFile_WithBlockCache_Flush) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 9 /* block size */, 18 /* max bytes */, 0 /* max staleness */, 3600 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); @@ -414,17 +416,17 @@ TEST(GcsFileSystemTest, NewRandomAccessFile_WithBlockCache_MaxStaleness) { "Range: 8-15\n" "Timeouts: 5 1 20\n", "89abcdef")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 8 /* block size */, - 16 /* max bytes */, 3600 /* max staleness */, - 3600 /* stat cache max age */, 0 /* stat cache max entries */, - 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 8 /* block size */, 16 /* max bytes */, + 3600 /* max staleness */, 3600 /* stat cache max age */, + 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); char scratch[100]; StringPiece result; // There should only be two HTTP requests issued to GCS even though we iterate @@ -492,7 +494,7 @@ TEST(GcsFileSystemTest, std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 9 /* block size */, 18 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); @@ -513,17 +515,17 @@ TEST(GcsFileSystemTest, TEST(GcsFileSystemTest, NewRandomAccessFile_NoObjectName) { std::vector<HttpRequest*> requests; - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), - 0 /* read ahead bytes */, 0 /* max bytes */, 0 /* max staleness */, - 0 /* stat cache max age */, 0 /* stat cache max entries */, - 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* read ahead bytes */, 0 /* max bytes */, + 0 /* max staleness */, 0 /* stat cache max age */, + 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::unique_ptr<RandomAccessFile> file; EXPECT_EQ(errors::Code::INVALID_ARGUMENT, @@ -547,16 +549,16 @@ TEST(GcsFileSystemTest, NewRandomAccessFile_InconsistentRead) { "012")}); // Set stat_cache_max_age to 1000s so that StatCache could work. - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 1e3 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 1e3 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); // Stat the file first so that the file stats are cached. FileStatistics stat; @@ -621,7 +623,7 @@ TEST(GcsFileSystemTest, NewWritableFile) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 8 /* block size */, 8 /* max bytes */, 0 /* max staleness */, 3600 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); @@ -703,16 +705,16 @@ TEST(GcsFileSystemTest, NewWritableFile_ResumeUploadSucceeds) { "Timeouts: 5 1 30\n" "Put body: t2\n", "")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::unique_ptr<WritableFile> file; TF_EXPECT_OK(fs.NewWritableFile("gs://bucket/path/writeable.txt", &file)); @@ -773,17 +775,17 @@ TEST(GcsFileSystemTest, NewWritableFile_ResumeUploadSucceedsOnGetStatus) { "Range: 0-7\n" "Timeouts: 5 1 20\n", "01234567")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 8 /* block size */, - 8 /* max bytes */, 3600 /* max staleness */, - 3600 /* stat cache max age */, 0 /* stat cache max entries */, - 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 8 /* block size */, 8 /* max bytes */, + 3600 /* max staleness */, 3600 /* stat cache max age */, + 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); // Pull the file's first block into the cache. This will trigger the first // HTTP request to GCS. std::unique_ptr<RandomAccessFile> rfile; @@ -867,9 +869,9 @@ TEST(GcsFileSystemTest, NewWritableFile_ResumeUploadAllAttemptsFail) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 2 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + 0 /* matching paths cache max entries */, + RetryConfig(2 /* .init_delay_time_us */), kTestTimeoutConfig, + *kAllowedLocationsDefault, nullptr /* gcs additional header */); std::unique_ptr<WritableFile> file; TF_EXPECT_OK(fs.NewWritableFile("gs://bucket/path/writeable.txt", &file)); @@ -918,16 +920,16 @@ TEST(GcsFileSystemTest, NewWritableFile_UploadReturns410) { "Timeouts: 5 1 30\n" "Put body: content1,content2\n", "")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::unique_ptr<WritableFile> file; TF_EXPECT_OK(fs.NewWritableFile("gs://bucket/path/writeable.txt", &file)); @@ -948,16 +950,16 @@ TEST(GcsFileSystemTest, NewWritableFile_UploadReturns410) { TEST(GcsFileSystemTest, NewWritableFile_NoObjectName) { std::vector<HttpRequest*> requests; - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::unique_ptr<WritableFile> file; EXPECT_EQ(errors::Code::INVALID_ARGUMENT, @@ -1013,7 +1015,7 @@ TEST(GcsFileSystemTest, NewAppendableFile) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 32 /* block size */, 32 /* max bytes */, 0 /* max staleness */, 3600 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); @@ -1041,16 +1043,16 @@ TEST(GcsFileSystemTest, NewAppendableFile) { TEST(GcsFileSystemTest, NewAppendableFile_NoObjectName) { std::vector<HttpRequest*> requests; - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::unique_ptr<WritableFile> file; EXPECT_EQ(errors::Code::INVALID_ARGUMENT, @@ -1075,16 +1077,16 @@ TEST(GcsFileSystemTest, NewReadOnlyMemoryRegionFromFile) { "Range: 0-", content.size() - 1, "\n", "Timeouts: 5 1 20\n"), content)}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::unique_ptr<ReadOnlyMemoryRegion> region; TF_EXPECT_OK(fs.NewReadOnlyMemoryRegionFromFile( @@ -1096,16 +1098,16 @@ TEST(GcsFileSystemTest, NewReadOnlyMemoryRegionFromFile) { TEST(GcsFileSystemTest, NewReadOnlyMemoryRegionFromFile_NoObjectName) { std::vector<HttpRequest*> requests; - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::unique_ptr<ReadOnlyMemoryRegion> region; EXPECT_EQ(errors::Code::INVALID_ARGUMENT, @@ -1120,16 +1122,16 @@ TEST(GcsFileSystemTest, FileExists_YesAsObject) { "Timeouts: 5 1 10\n", strings::StrCat("{\"size\": \"1010\",\"generation\": \"1\"," "\"updated\": \"2016-04-29T23:15:24.896Z\"}"))}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TF_EXPECT_OK(fs.FileExists("gs://bucket/path/file1.txt")); } @@ -1150,16 +1152,16 @@ TEST(GcsFileSystemTest, FileExists_YesAsFolder) { "Timeouts: 5 1 10\n", "{\"items\": [ " " { \"name\": \"path/subfolder/\" }]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TF_EXPECT_OK(fs.FileExists("gs://bucket/path/subfolder")); } @@ -1176,16 +1178,16 @@ TEST(GcsFileSystemTest, FileExists_YesAsBucket) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "{\"size\": \"100\"}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TF_EXPECT_OK(fs.FileExists("gs://bucket1")); TF_EXPECT_OK(fs.FileExists("gs://bucket1/")); @@ -1206,16 +1208,16 @@ TEST(GcsFileSystemTest, FileExists_NotAsObjectOrFolder) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "{\"items\": []}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); EXPECT_EQ(errors::Code::NOT_FOUND, fs.FileExists("gs://bucket/path/file1.txt").code()); @@ -1233,16 +1235,16 @@ TEST(GcsFileSystemTest, FileExists_NotAsBucket) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "", errors::NotFound("404"), 404)}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); EXPECT_EQ(errors::Code::INVALID_ARGUMENT, fs.FileExists("gs://bucket2/").code()); EXPECT_EQ(errors::Code::INVALID_ARGUMENT, @@ -1279,7 +1281,7 @@ TEST(GcsFileSystemTest, FileExists_StatCache) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, 3600 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); @@ -1306,7 +1308,7 @@ TEST(GcsFileSystemTest, FileExists_DirectoryMark) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, 3600 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); @@ -1322,16 +1324,16 @@ TEST(GcsFileSystemTest, GetChildren_NoItems) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "{\"prefixes\": [\"path/subpath/\"]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> children; TF_EXPECT_OK(fs.GetChildren("gs://bucket/path/", &children)); @@ -1350,16 +1352,16 @@ TEST(GcsFileSystemTest, GetChildren_ThreeFiles) { " { \"name\": \"path/file1.txt\" }," " { \"name\": \"path/file3.txt\" }]," "\"prefixes\": [\"path/subpath/\"]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> children; TF_EXPECT_OK(fs.GetChildren("gs://bucket/path/", &children)); @@ -1379,16 +1381,16 @@ TEST(GcsFileSystemTest, GetChildren_SelfDirectoryMarker) { " { \"name\": \"path/\" }," " { \"name\": \"path/file3.txt\" }]," "\"prefixes\": [\"path/subpath/\"]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> children; TF_EXPECT_OK(fs.GetChildren("gs://bucket/path/", &children)); @@ -1407,16 +1409,16 @@ TEST(GcsFileSystemTest, GetChildren_ThreeFiles_NoSlash) { " { \"name\": \"path/file1.txt\" }," " { \"name\": \"path/file3.txt\" }]," "\"prefixes\": [\"path/subpath/\"]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> children; TF_EXPECT_OK(fs.GetChildren("gs://bucket/path", &children)); @@ -1432,16 +1434,16 @@ TEST(GcsFileSystemTest, GetChildren_Root) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "{}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> children; TF_EXPECT_OK(fs.GetChildren("gs://bucket-a-b-c", &children)); @@ -1457,16 +1459,16 @@ TEST(GcsFileSystemTest, GetChildren_Empty) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "{}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> children; TF_EXPECT_OK(fs.GetChildren("gs://bucket/path/", &children)); @@ -1498,16 +1500,16 @@ TEST(GcsFileSystemTest, GetChildren_Pagination) { " { \"name\": \"path/file4.txt\" }," " { \"name\": \"path/file5.txt\" }]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> children; TF_EXPECT_OK(fs.GetChildren("gs://bucket/path", &children)); @@ -1525,16 +1527,16 @@ TEST(GcsFileSystemTest, GetMatchingPaths_NoWildcard) { "Timeouts: 5 1 10\n", "{\"items\": [ " " { \"name\": \"path/subpath/file2.txt\" }]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> result; TF_EXPECT_OK( @@ -1553,16 +1555,16 @@ TEST(GcsFileSystemTest, GetMatchingPaths_BucketAndWildcard) { " { \"name\": \"path/file1.txt\" }," " { \"name\": \"path/subpath/file2.txt\" }," " { \"name\": \"path/file3.txt\" }]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> result; TF_EXPECT_OK(fs.GetMatchingPaths("gs://bucket/*/*", &result)); @@ -1582,16 +1584,16 @@ TEST(GcsFileSystemTest, GetMatchingPaths_FolderAndWildcard_Matches) { " { \"name\": \"path/file1.txt\" }," " { \"name\": \"path/subpath/file2.txt\" }," " { \"name\": \"path/file3.txt\" }]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> result; TF_EXPECT_OK(fs.GetMatchingPaths("gs://bucket/path/*/file2.txt", &result)); @@ -1608,16 +1610,16 @@ TEST(GcsFileSystemTest, GetMatchingPaths_SelfDirectoryMarker) { "{\"items\": [ " " { \"name\": \"path/\" }," " { \"name\": \"path/file3.txt\" }]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> result; TF_EXPECT_OK(fs.GetMatchingPaths("gs://bucket/path/*", &result)); @@ -1634,16 +1636,16 @@ TEST(GcsFileSystemTest, GetMatchingPaths_FolderAndWildcard_NoMatches) { " { \"name\": \"path/file1.txt\" }," " { \"name\": \"path/subpath/file2.txt\" }," " { \"name\": \"path/file3.txt\" }]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> result; TF_EXPECT_OK(fs.GetMatchingPaths("gs://bucket/path/*/file3.txt", &result)); @@ -1652,16 +1654,16 @@ TEST(GcsFileSystemTest, GetMatchingPaths_FolderAndWildcard_NoMatches) { TEST(GcsFileSystemTest, GetMatchingPaths_OnlyWildcard) { std::vector<HttpRequest*> requests; - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::vector<string> result; EXPECT_EQ(errors::Code::INVALID_ARGUMENT, @@ -1686,16 +1688,16 @@ TEST(GcsFileSystemTest, GetMatchingPaths_Cache) { " { \"name\": \"path/file1.txt\" }," " { \"name\": \"path/subpath/file2.txt\" }," " { \"name\": \"path/file3.txt\" }]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 3600 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 3600 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); // Repeated calls to fs.GetMatchingPaths on these patterns should not lead to // any additional HTTP requests to GCS. @@ -1729,16 +1731,16 @@ TEST(GcsFileSystemTest, GetMatchingPaths_Cache_Flush) { "Timeouts: 5 1 10\n", "{\"items\": [ " " { \"name\": \"path/subpath/file2.txt\" }]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 3600 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 3600 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); // This loop should trigger the first HTTP request to GCS. for (int i = 0; i < 10; i++) { @@ -1800,7 +1802,7 @@ TEST(GcsFileSystemTest, DeleteFile) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 16 /* block size */, 16 /* max bytes */, 0 /* max staleness */, 3600 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); @@ -1821,16 +1823,16 @@ TEST(GcsFileSystemTest, DeleteFile) { TEST(GcsFileSystemTest, DeleteFile_NoObjectName) { std::vector<HttpRequest*> requests; - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); EXPECT_EQ(errors::Code::INVALID_ARGUMENT, fs.DeleteFile("gs://bucket/").code()); @@ -1871,7 +1873,7 @@ TEST(GcsFileSystemTest, DeleteFile_StatCacheRemoved) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 16 /* block size */, 16 /* max bytes */, 0 /* max staleness */, 3600 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); @@ -1894,16 +1896,16 @@ TEST(GcsFileSystemTest, DeleteDir_Empty) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "{}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TF_EXPECT_OK(fs.DeleteDir("gs://bucket/path/")); } @@ -1923,16 +1925,16 @@ TEST(GcsFileSystemTest, DeleteDir_OnlyDirMarkerLeft) { "Timeouts: 5 1 10\n" "Delete: yes\n", "")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TF_EXPECT_OK(fs.DeleteDir("gs://bucket/path/")); } @@ -1943,16 +1945,16 @@ TEST(GcsFileSystemTest, DeleteDir_BucketOnly) { "name%2CnextPageToken&maxResults=2\nAuth Token: fake_token\n" "Timeouts: 5 1 10\n", "{}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TF_EXPECT_OK(fs.DeleteDir("gs://bucket")); } @@ -1965,16 +1967,16 @@ TEST(GcsFileSystemTest, DeleteDir_NonEmpty) { "Timeouts: 5 1 10\n", "{\"items\": [ " " { \"name\": \"path/file1.txt\" }]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); EXPECT_EQ(error::Code::FAILED_PRECONDITION, fs.DeleteDir("gs://bucket/path/").code()); @@ -1988,16 +1990,16 @@ TEST(GcsFileSystemTest, GetFileSize) { "Timeouts: 5 1 10\n", strings::StrCat("{\"size\": \"1010\",\"generation\": \"1\"," "\"updated\": \"2016-04-29T23:15:24.896Z\"}"))}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); uint64 size; TF_EXPECT_OK(fs.GetFileSize("gs://bucket/file.txt", &size)); @@ -2006,16 +2008,16 @@ TEST(GcsFileSystemTest, GetFileSize) { TEST(GcsFileSystemTest, GetFileSize_NoObjectName) { std::vector<HttpRequest*> requests; - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); uint64 size; EXPECT_EQ(errors::Code::INVALID_ARGUMENT, @@ -2092,16 +2094,16 @@ TEST(GcsFileSystemTest, RenameFile_Folder) { "Timeouts: 5 1 10\n" "Delete: yes\n", "")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TF_EXPECT_OK(fs.RenameFile("gs://bucket/path1", "gs://bucket/path2/")); } @@ -2191,7 +2193,7 @@ TEST(GcsFileSystemTest, RenameFile_Object) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 16 /* block size */, 64 /* max bytes */, 0 /* max staleness */, 3600 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); // Do an initial read of the source and destination files to load their @@ -2272,7 +2274,7 @@ TEST(GcsFileSystemTest, RenameFile_Object_FlushTargetStatCache) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, 3600 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); // Do an initial stat of the destination file to load their contents into the @@ -2332,16 +2334,16 @@ TEST(GcsFileSystemTest, RenameFile_Object_DeletionRetried) { "Timeouts: 5 1 10\n" "Delete: yes\n", "", errors::NotFound("404"), 404)}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TF_EXPECT_OK( fs.RenameFile("gs://bucket/path/src.txt", "gs://bucket/path/dst.txt")); @@ -2374,16 +2376,16 @@ TEST(GcsFileSystemTest, RenameFile_Object_Incomplete) { "Post: yes\n" "Timeouts: 5 1 10\n", "{\"done\": false}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); EXPECT_EQ( errors::Code::UNIMPLEMENTED, @@ -2399,16 +2401,16 @@ TEST(GcsFileSystemTest, Stat_Object) { "Timeouts: 5 1 10\n", strings::StrCat("{\"size\": \"1010\",\"generation\": \"1\"," "\"updated\": \"2016-04-29T23:15:24.896Z\"}"))}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); FileStatistics stat; TF_EXPECT_OK(fs.Stat("gs://bucket/file.txt", &stat)); @@ -2433,16 +2435,16 @@ TEST(GcsFileSystemTest, Stat_Folder) { "Timeouts: 5 1 10\n", "{\"items\": [ " " { \"name\": \"subfolder/\" }]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); FileStatistics stat; TF_EXPECT_OK(fs.Stat("gs://bucket/subfolder", &stat)); @@ -2466,16 +2468,16 @@ TEST(GcsFileSystemTest, Stat_ObjectOrFolderNotFound) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "{}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); FileStatistics stat; EXPECT_EQ(error::Code::NOT_FOUND, fs.Stat("gs://bucket/path", &stat).code()); @@ -2487,16 +2489,16 @@ TEST(GcsFileSystemTest, Stat_Bucket) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "{}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); FileStatistics stat; TF_EXPECT_OK(fs.Stat("gs://bucket/", &stat)); @@ -2511,16 +2513,16 @@ TEST(GcsFileSystemTest, Stat_BucketNotFound) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "", errors::NotFound("404"), 404)}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); FileStatistics stat; EXPECT_EQ(error::Code::NOT_FOUND, fs.Stat("gs://bucket/", &stat).code()); @@ -2556,7 +2558,7 @@ TEST(GcsFileSystemTest, Stat_Cache) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, 3600 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); @@ -2598,7 +2600,7 @@ TEST(GcsFileSystemTest, Stat_Cache_Flush) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, 3600 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, nullptr /* gcs additional header */); // There should be a single HTTP request to GCS for fs.Stat in this loop. @@ -2628,16 +2630,16 @@ TEST(GcsFileSystemTest, Stat_FilenameEndingWithSlash) { "Timeouts: 5 1 10\n", strings::StrCat("{\"size\": \"5\",\"generation\": \"1\"," "\"updated\": \"2016-04-29T23:15:24.896Z\"}"))}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); FileStatistics stat; TF_EXPECT_OK(fs.Stat("gs://bucket/dir/", &stat)); @@ -2660,16 +2662,16 @@ TEST(GcsFileSystemTest, IsDirectory_NotFound) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "", errors::NotFound("404"), 404)}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); EXPECT_EQ(error::Code::NOT_FOUND, fs.IsDirectory("gs://bucket/file.txt").code()); @@ -2691,16 +2693,16 @@ TEST(GcsFileSystemTest, IsDirectory_NotDirectoryButObject) { "Timeouts: 5 1 10\n", strings::StrCat("{\"size\": \"1010\",\"generation\": \"1\"," "\"updated\": \"2016-04-29T23:15:24.896Z\"}"))}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); EXPECT_EQ(error::Code::FAILED_PRECONDITION, fs.IsDirectory("gs://bucket/file.txt").code()); @@ -2722,16 +2724,16 @@ TEST(GcsFileSystemTest, IsDirectory_Yes) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "{\"items\": [{\"name\": \"subfolder/\"}]}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TF_EXPECT_OK(fs.IsDirectory("gs://bucket/subfolder")); TF_EXPECT_OK(fs.IsDirectory("gs://bucket/subfolder/")); @@ -2749,16 +2751,16 @@ TEST(GcsFileSystemTest, IsDirectory_Bucket) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "{}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TF_EXPECT_OK(fs.IsDirectory("gs://bucket")); TF_EXPECT_OK(fs.IsDirectory("gs://bucket/")); @@ -2770,16 +2772,16 @@ TEST(GcsFileSystemTest, IsDirectory_BucketNotFound) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "", errors::NotFound("404"), 404)}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); EXPECT_EQ(error::Code::NOT_FOUND, fs.IsDirectory("gs://bucket/").code()); } @@ -2812,16 +2814,16 @@ TEST(GcsFileSystemTest, CreateDir_Folder) { "Timeouts: 5 1 30\n" "Put body: \n", "")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TF_EXPECT_OK(fs.CreateDir("gs://bucket/subpath")); TF_EXPECT_OK(fs.CreateDir("gs://bucket/subpath/")); @@ -2839,16 +2841,16 @@ TEST(GcsFileSystemTest, CreateDir_Bucket) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TF_EXPECT_OK(fs.CreateDir("gs://bucket/")); TF_EXPECT_OK(fs.CreateDir("gs://bucket")); @@ -2911,16 +2913,16 @@ TEST(GcsFileSystemTest, DeleteRecursively_Ok) { "Timeouts: 5 1 10\n" "Delete: yes\n", "")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); int64 undeleted_files, undeleted_dirs; TF_EXPECT_OK(fs.DeleteRecursively("gs://bucket/path", &undeleted_files, @@ -3004,16 +3006,16 @@ TEST(GcsFileSystemTest, DeleteRecursively_DeletionErrors) { "Timeouts: 5 1 10\n", "", errors::NotFound("404"), 404)}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); int64 undeleted_files, undeleted_dirs; TF_EXPECT_OK(fs.DeleteRecursively("gs://bucket/path", &undeleted_files, @@ -3039,16 +3041,16 @@ TEST(GcsFileSystemTest, DeleteRecursively_NotAFolder) { "Auth Token: fake_token\n" "Timeouts: 5 1 10\n", "", errors::NotFound("404"), 404)}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay*/, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); int64 undeleted_files, undeleted_dirs; EXPECT_EQ(error::Code::NOT_FOUND, @@ -3130,7 +3132,7 @@ TEST(GcsFileSystemTest, AdditionalRequestHeaderTest) { std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, + 0 /* matching paths cache max entries */, kTestRetryConfig, kTestTimeoutConfig, *kAllowedLocationsDefault, add_header /* gcs additional header */); @@ -3199,16 +3201,16 @@ TEST(GcsFileSystemTest, CreateHttpRequest) { "Auth Token: fake_token\n" "Header Hello: world\n", "{}")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); std::unique_ptr<HttpRequest> request; TF_EXPECT_OK(fs.CreateHttpRequest(&request)); @@ -3262,16 +3264,16 @@ TEST(GcsFileSystemTest, Stat_StatsRecording) { "Timeouts: 5 1 10\n", strings::StrCat("{\"size\": \"1010\",\"generation\": \"1\"," "\"updated\": \"2016-04-29T23:15:24.896Z\"}"))}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TestGcsStats stats; fs.SetStats(&stats); @@ -3289,16 +3291,16 @@ TEST(GcsFileSystemTest, NewRandomAccessFile_StatsRecording) { "Range: 0-5\n" "Timeouts: 5 1 20\n", "012345")}); - GcsFileSystem fs( - std::unique_ptr<AuthProvider>(new FakeAuthProvider), - std::unique_ptr<HttpRequest::Factory>( - new FakeHttpRequestFactory(&requests)), - std::unique_ptr<ZoneProvider>(new FakeZoneProvider), 0 /* block size */, - 0 /* max bytes */, 0 /* max staleness */, 0 /* stat cache max age */, - 0 /* stat cache max entries */, 0 /* matching paths cache max age */, - 0 /* matching paths cache max entries */, 0 /* initial retry delay */, - kTestTimeoutConfig, *kAllowedLocationsDefault, - nullptr /* gcs additional header */); + GcsFileSystem fs(std::unique_ptr<AuthProvider>(new FakeAuthProvider), + std::unique_ptr<HttpRequest::Factory>( + new FakeHttpRequestFactory(&requests)), + std::unique_ptr<ZoneProvider>(new FakeZoneProvider), + 0 /* block size */, 0 /* max bytes */, 0 /* max staleness */, + 0 /* stat cache max age */, 0 /* stat cache max entries */, + 0 /* matching paths cache max age */, + 0 /* matching paths cache max entries */, kTestRetryConfig, + kTestTimeoutConfig, *kAllowedLocationsDefault, + nullptr /* gcs additional header */); TestGcsStats stats; fs.SetStats(&stats); diff --git a/tensorflow/core/platform/cloud/google_auth_provider_test.cc b/tensorflow/core/platform/cloud/google_auth_provider_test.cc index 07b88a880f..ec31c5ee8c 100644 --- a/tensorflow/core/platform/cloud/google_auth_provider_test.cc +++ b/tensorflow/core/platform/cloud/google_auth_provider_test.cc @@ -93,8 +93,8 @@ TEST_F(GoogleAuthProviderTest, EnvironmentVariable_Caching) { std::shared_ptr<HttpRequest::Factory> fakeHttpRequestFactory = std::make_shared<FakeHttpRequestFactory>(&requests); - auto metadataClient = - std::make_shared<ComputeEngineMetadataClient>(fakeHttpRequestFactory, 0); + auto metadataClient = std::make_shared<ComputeEngineMetadataClient>( + fakeHttpRequestFactory, RetryConfig(0 /* init_delay_time_us */)); GoogleAuthProvider provider(std::unique_ptr<OAuthClient>(oauth_client), metadataClient, &env); oauth_client->return_token = "fake-token"; @@ -129,8 +129,8 @@ TEST_F(GoogleAuthProviderTest, GCloudRefreshToken) { FakeEnv env; std::shared_ptr<HttpRequest::Factory> fakeHttpRequestFactory = std::make_shared<FakeHttpRequestFactory>(&requests); - auto metadataClient = - std::make_shared<ComputeEngineMetadataClient>(fakeHttpRequestFactory, 0); + auto metadataClient = std::make_shared<ComputeEngineMetadataClient>( + fakeHttpRequestFactory, RetryConfig(0 /* init_delay_time_us */)); GoogleAuthProvider provider(std::unique_ptr<OAuthClient>(oauth_client), metadataClient, &env); @@ -178,8 +178,8 @@ TEST_F(GoogleAuthProviderTest, RunningOnGCE) { FakeEnv env; std::shared_ptr<HttpRequest::Factory> fakeHttpRequestFactory = std::make_shared<FakeHttpRequestFactory>(&requests); - auto metadataClient = - std::make_shared<ComputeEngineMetadataClient>(fakeHttpRequestFactory, 0); + auto metadataClient = std::make_shared<ComputeEngineMetadataClient>( + fakeHttpRequestFactory, RetryConfig(0 /* init_delay_time_us */)); GoogleAuthProvider provider(std::unique_ptr<OAuthClient>(oauth_client), metadataClient, &env); @@ -206,8 +206,8 @@ TEST_F(GoogleAuthProviderTest, OverrideForTesting) { FakeEnv env; std::shared_ptr<HttpRequest::Factory> fakeHttpRequestFactory = std::make_shared<FakeHttpRequestFactory>(&empty_requests); - auto metadataClient = - std::make_shared<ComputeEngineMetadataClient>(fakeHttpRequestFactory, 0); + auto metadataClient = std::make_shared<ComputeEngineMetadataClient>( + fakeHttpRequestFactory, RetryConfig(0 /* init_delay_time_us */)); GoogleAuthProvider provider(std::unique_ptr<OAuthClient>(oauth_client), metadataClient, &env); @@ -228,8 +228,8 @@ TEST_F(GoogleAuthProviderTest, NothingAvailable) { FakeEnv env; std::shared_ptr<HttpRequest::Factory> fakeHttpRequestFactory = std::make_shared<FakeHttpRequestFactory>(&requests); - auto metadataClient = - std::make_shared<ComputeEngineMetadataClient>(fakeHttpRequestFactory, 0); + auto metadataClient = std::make_shared<ComputeEngineMetadataClient>( + fakeHttpRequestFactory, RetryConfig(0 /* init_delay_time_us */)); GoogleAuthProvider provider(std::unique_ptr<OAuthClient>(oauth_client), metadataClient, &env); diff --git a/tensorflow/core/platform/cloud/retrying_file_system.h b/tensorflow/core/platform/cloud/retrying_file_system.h index 941ab7ad65..5ce6670dc7 100644 --- a/tensorflow/core/platform/cloud/retrying_file_system.h +++ b/tensorflow/core/platform/cloud/retrying_file_system.h @@ -34,9 +34,9 @@ template <typename Underlying> class RetryingFileSystem : public FileSystem { public: RetryingFileSystem(std::unique_ptr<Underlying> base_file_system, - int64 delay_microseconds = 1000000) + const RetryConfig& retry_config) : base_file_system_(std::move(base_file_system)), - initial_delay_microseconds_(delay_microseconds) {} + retry_config_(retry_config) {} Status NewRandomAccessFile( const string& filename, @@ -55,7 +55,7 @@ class RetryingFileSystem : public FileSystem { Status FileExists(const string& fname) override { return RetryingUtils::CallWithRetries( [this, &fname]() { return base_file_system_->FileExists(fname); }, - initial_delay_microseconds_); + retry_config_); } Status GetChildren(const string& dir, std::vector<string>* result) override { @@ -63,7 +63,7 @@ class RetryingFileSystem : public FileSystem { [this, &dir, result]() { return base_file_system_->GetChildren(dir, result); }, - initial_delay_microseconds_); + retry_config_); } Status GetMatchingPaths(const string& pattern, @@ -72,31 +72,31 @@ class RetryingFileSystem : public FileSystem { [this, &pattern, result]() { return base_file_system_->GetMatchingPaths(pattern, result); }, - initial_delay_microseconds_); + retry_config_); } Status Stat(const string& fname, FileStatistics* stat) override { return RetryingUtils::CallWithRetries( [this, &fname, stat]() { return base_file_system_->Stat(fname, stat); }, - initial_delay_microseconds_); + retry_config_); } Status DeleteFile(const string& fname) override { return RetryingUtils::DeleteWithRetries( [this, &fname]() { return base_file_system_->DeleteFile(fname); }, - initial_delay_microseconds_); + retry_config_); } Status CreateDir(const string& dirname) override { return RetryingUtils::CallWithRetries( [this, &dirname]() { return base_file_system_->CreateDir(dirname); }, - initial_delay_microseconds_); + retry_config_); } Status DeleteDir(const string& dirname) override { return RetryingUtils::DeleteWithRetries( [this, &dirname]() { return base_file_system_->DeleteDir(dirname); }, - initial_delay_microseconds_); + retry_config_); } Status GetFileSize(const string& fname, uint64* file_size) override { @@ -104,7 +104,7 @@ class RetryingFileSystem : public FileSystem { [this, &fname, file_size]() { return base_file_system_->GetFileSize(fname, file_size); }, - initial_delay_microseconds_); + retry_config_); } Status RenameFile(const string& src, const string& target) override { @@ -112,13 +112,13 @@ class RetryingFileSystem : public FileSystem { [this, &src, &target]() { return base_file_system_->RenameFile(src, target); }, - initial_delay_microseconds_); + retry_config_); } Status IsDirectory(const string& dirname) override { return RetryingUtils::CallWithRetries( [this, &dirname]() { return base_file_system_->IsDirectory(dirname); }, - initial_delay_microseconds_); + retry_config_); } Status DeleteRecursively(const string& dirname, int64* undeleted_files, @@ -128,7 +128,7 @@ class RetryingFileSystem : public FileSystem { return base_file_system_->DeleteRecursively(dirname, undeleted_files, undeleted_dirs); }, - initial_delay_microseconds_); + retry_config_); } void FlushCaches() override { base_file_system_->FlushCaches(); } @@ -137,7 +137,7 @@ class RetryingFileSystem : public FileSystem { private: std::unique_ptr<Underlying> base_file_system_; - const int64 initial_delay_microseconds_; + const RetryConfig retry_config_; TF_DISALLOW_COPY_AND_ASSIGN(RetryingFileSystem); }; @@ -147,9 +147,8 @@ namespace retrying_internals { class RetryingRandomAccessFile : public RandomAccessFile { public: RetryingRandomAccessFile(std::unique_ptr<RandomAccessFile> base_file, - int64 delay_microseconds) - : base_file_(std::move(base_file)), - initial_delay_microseconds_(delay_microseconds) {} + const RetryConfig& retry_config) + : base_file_(std::move(base_file)), retry_config_(retry_config) {} Status Read(uint64 offset, size_t n, StringPiece* result, char* scratch) const override { @@ -157,20 +156,19 @@ class RetryingRandomAccessFile : public RandomAccessFile { [this, offset, n, result, scratch]() { return base_file_->Read(offset, n, result, scratch); }, - initial_delay_microseconds_); + retry_config_); } private: std::unique_ptr<RandomAccessFile> base_file_; - const int64 initial_delay_microseconds_; + const RetryConfig retry_config_; }; class RetryingWritableFile : public WritableFile { public: RetryingWritableFile(std::unique_ptr<WritableFile> base_file, - int64 delay_microseconds) - : base_file_(std::move(base_file)), - initial_delay_microseconds_(delay_microseconds) {} + const RetryConfig& retry_config) + : base_file_(std::move(base_file)), retry_config_(retry_config) {} ~RetryingWritableFile() override { // Makes sure the retrying version of Close() is called in the destructor. @@ -179,25 +177,24 @@ class RetryingWritableFile : public WritableFile { Status Append(StringPiece data) override { return RetryingUtils::CallWithRetries( - [this, &data]() { return base_file_->Append(data); }, - initial_delay_microseconds_); + [this, &data]() { return base_file_->Append(data); }, retry_config_); } Status Close() override { return RetryingUtils::CallWithRetries( - [this]() { return base_file_->Close(); }, initial_delay_microseconds_); + [this]() { return base_file_->Close(); }, retry_config_); } Status Flush() override { return RetryingUtils::CallWithRetries( - [this]() { return base_file_->Flush(); }, initial_delay_microseconds_); + [this]() { return base_file_->Flush(); }, retry_config_); } Status Sync() override { return RetryingUtils::CallWithRetries( - [this]() { return base_file_->Sync(); }, initial_delay_microseconds_); + [this]() { return base_file_->Sync(); }, retry_config_); } private: std::unique_ptr<WritableFile> base_file_; - const int64 initial_delay_microseconds_; + const RetryConfig retry_config_; }; } // namespace retrying_internals @@ -210,9 +207,9 @@ Status RetryingFileSystem<Underlying>::NewRandomAccessFile( [this, &filename, &base_file]() { return base_file_system_->NewRandomAccessFile(filename, &base_file); }, - initial_delay_microseconds_)); + retry_config_)); result->reset(new retrying_internals::RetryingRandomAccessFile( - std::move(base_file), initial_delay_microseconds_)); + std::move(base_file), retry_config_)); return Status::OK(); } @@ -224,9 +221,9 @@ Status RetryingFileSystem<Underlying>::NewWritableFile( [this, &filename, &base_file]() { return base_file_system_->NewWritableFile(filename, &base_file); }, - initial_delay_microseconds_)); + retry_config_)); result->reset(new retrying_internals::RetryingWritableFile( - std::move(base_file), initial_delay_microseconds_)); + std::move(base_file), retry_config_)); return Status::OK(); } @@ -238,9 +235,9 @@ Status RetryingFileSystem<Underlying>::NewAppendableFile( [this, &filename, &base_file]() { return base_file_system_->NewAppendableFile(filename, &base_file); }, - initial_delay_microseconds_)); + retry_config_)); result->reset(new retrying_internals::RetryingWritableFile( - std::move(base_file), initial_delay_microseconds_)); + std::move(base_file), retry_config_)); return Status::OK(); } @@ -252,7 +249,7 @@ Status RetryingFileSystem<Underlying>::NewReadOnlyMemoryRegionFromFile( return base_file_system_->NewReadOnlyMemoryRegionFromFile(filename, result); }, - initial_delay_microseconds_); + retry_config_); } } // namespace tensorflow diff --git a/tensorflow/core/platform/cloud/retrying_file_system_test.cc b/tensorflow/core/platform/cloud/retrying_file_system_test.cc index 5910fef1d2..868eea096c 100644 --- a/tensorflow/core/platform/cloud/retrying_file_system_test.cc +++ b/tensorflow/core/platform/cloud/retrying_file_system_test.cc @@ -184,7 +184,8 @@ TEST(RetryingFileSystemTest, NewRandomAccessFile_ImmediateSuccess) { std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); base_fs->random_access_file_to_return = std::move(base_file); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); // Retrieve the wrapped random access file. std::unique_ptr<RandomAccessFile> random_access_file; @@ -211,7 +212,8 @@ TEST(RetryingFileSystemTest, NewRandomAccessFile_SuccessWith3rdTry) { std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); base_fs->random_access_file_to_return = std::move(base_file); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); // Retrieve the wrapped random access file. std::unique_ptr<RandomAccessFile> random_access_file; @@ -235,7 +237,8 @@ TEST(RetryingFileSystemTest, NewRandomAccessFile_AllRetriesFailed) { std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); base_fs->random_access_file_to_return = std::move(base_file); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); // Retrieve the wrapped random access file. std::unique_ptr<RandomAccessFile> random_access_file; @@ -265,7 +268,8 @@ TEST(RetryingFileSystemTest, NewRandomAccessFile_NoRetriesForSomeErrors) { std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); base_fs->random_access_file_to_return = std::move(base_file); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); // Retrieve the wrapped random access file. std::unique_ptr<RandomAccessFile> random_access_file; @@ -291,7 +295,8 @@ TEST(RetryingFileSystemTest, NewWritableFile_ImmediateSuccess) { std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); base_fs->writable_file_to_return = std::move(base_file); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); // Retrieve the wrapped writable file. std::unique_ptr<WritableFile> writable_file; @@ -317,7 +322,8 @@ TEST(RetryingFileSystemTest, NewWritableFile_SuccessWith3rdTry) { std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); base_fs->writable_file_to_return = std::move(base_file); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); // Retrieve the wrapped writable file. std::unique_ptr<WritableFile> writable_file; @@ -343,7 +349,8 @@ TEST(RetryingFileSystemTest, NewWritableFile_SuccessWith3rdTry_ViaDestructor) { std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); base_fs->writable_file_to_return = std::move(base_file); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); // Retrieve the wrapped writable file. std::unique_ptr<WritableFile> writable_file; @@ -368,7 +375,8 @@ TEST(RetryingFileSystemTest, NewAppendableFile_SuccessWith3rdTry) { std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); base_fs->writable_file_to_return = std::move(base_file); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); // Retrieve the wrapped appendable file. std::unique_ptr<WritableFile> writable_file; @@ -391,7 +399,8 @@ TEST(RetryingFileSystemTest, NewWritableFile_AllRetriesFailed) { std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); base_fs->writable_file_to_return = std::move(base_file); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); // Retrieve the wrapped writable file. std::unique_ptr<WritableFile> writable_file; @@ -412,7 +421,8 @@ TEST(RetryingFileSystemTest, std::make_tuple("NewReadOnlyMemoryRegionFromFile", Status::OK())}); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); std::unique_ptr<ReadOnlyMemoryRegion> result; TF_EXPECT_OK(fs.NewReadOnlyMemoryRegionFromFile("filename.txt", &result)); @@ -423,7 +433,8 @@ TEST(RetryingFileSystemTest, NewReadOnlyMemoryRegionFromFile_AllRetriesFailed) { CreateRetriableErrors("NewReadOnlyMemoryRegionFromFile", 11); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); std::unique_ptr<ReadOnlyMemoryRegion> result; const auto& status = @@ -440,7 +451,8 @@ TEST(RetryingFileSystemTest, GetChildren_SuccessWith2ndTry) { std::make_tuple("GetChildren", Status::OK())}); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); std::vector<string> result; TF_EXPECT_OK(fs.GetChildren("gs://path", &result)); @@ -450,7 +462,8 @@ TEST(RetryingFileSystemTest, GetChildren_AllRetriesFailed) { ExpectedCalls expected_fs_calls = CreateRetriableErrors("GetChildren", 11); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); std::vector<string> result; const auto& status = fs.GetChildren("gs://path", &result); @@ -466,7 +479,8 @@ TEST(RetryingFileSystemTest, GetMatchingPaths_SuccessWith2ndTry) { std::make_tuple("GetMatchingPaths", Status::OK())}); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); std::vector<string> result; TF_EXPECT_OK(fs.GetMatchingPaths("gs://path/dir", &result)); @@ -477,7 +491,8 @@ TEST(RetryingFileSystemTest, GetMatchingPaths_AllRetriesFailed) { CreateRetriableErrors("GetMatchingPaths", 11); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); std::vector<string> result; const auto& status = fs.GetMatchingPaths("gs://path/dir", &result); @@ -492,7 +507,8 @@ TEST(RetryingFileSystemTest, DeleteFile_SuccessWith2ndTry) { std::make_tuple("DeleteFile", Status::OK())}); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); std::vector<string> result; TF_EXPECT_OK(fs.DeleteFile("gs://path/file.txt")); @@ -502,7 +518,8 @@ TEST(RetryingFileSystemTest, DeleteFile_AllRetriesFailed) { ExpectedCalls expected_fs_calls = CreateRetriableErrors("DeleteFile", 11); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); std::vector<string> result; const auto& status = fs.DeleteFile("gs://path/file.txt"); @@ -517,7 +534,8 @@ TEST(RetryingFileSystemTest, CreateDir_SuccessWith2ndTry) { std::make_tuple("CreateDir", Status::OK())}); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); std::vector<string> result; TF_EXPECT_OK(fs.CreateDir("gs://path/newdir")); @@ -527,7 +545,8 @@ TEST(RetryingFileSystemTest, CreateDir_AllRetriesFailed) { ExpectedCalls expected_fs_calls = CreateRetriableErrors("CreateDir", 11); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); std::vector<string> result; const auto& status = fs.CreateDir("gs://path/newdir"); @@ -542,7 +561,8 @@ TEST(RetryingFileSystemTest, DeleteDir_SuccessWith2ndTry) { std::make_tuple("DeleteDir", Status::OK())}); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); std::vector<string> result; TF_EXPECT_OK(fs.DeleteDir("gs://path/dir")); @@ -552,7 +572,8 @@ TEST(RetryingFileSystemTest, DeleteDir_AllRetriesFailed) { ExpectedCalls expected_fs_calls = CreateRetriableErrors("DeleteDir", 11); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); std::vector<string> result; const auto& status = fs.DeleteDir("gs://path/dir"); @@ -568,7 +589,8 @@ TEST(RetryingFileSystemTest, GetFileSize_SuccessWith2ndTry) { std::make_tuple("GetFileSize", Status::OK())}); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); uint64 size; TF_EXPECT_OK(fs.GetFileSize("gs://path/file.txt", &size)); @@ -578,7 +600,8 @@ TEST(RetryingFileSystemTest, GetFileSize_AllRetriesFailed) { ExpectedCalls expected_fs_calls = CreateRetriableErrors("GetFileSize", 11); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); uint64 size; const auto& status = fs.GetFileSize("gs://path/file.txt", &size); @@ -593,7 +616,8 @@ TEST(RetryingFileSystemTest, RenameFile_SuccessWith2ndTry) { std::make_tuple("RenameFile", Status::OK())}); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); TF_EXPECT_OK(fs.RenameFile("old_name", "new_name")); } @@ -602,7 +626,8 @@ TEST(RetryingFileSystemTest, RenameFile_AllRetriesFailed) { ExpectedCalls expected_fs_calls = CreateRetriableErrors("RenameFile", 11); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); const auto& status = fs.RenameFile("old_name", "new_name"); EXPECT_TRUE( @@ -616,7 +641,8 @@ TEST(RetryingFileSystemTest, Stat_SuccessWith2ndTry) { std::make_tuple("Stat", Status::OK())}); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); FileStatistics stat; TF_EXPECT_OK(fs.Stat("file_name", &stat)); @@ -626,7 +652,8 @@ TEST(RetryingFileSystemTest, Stat_AllRetriesFailed) { ExpectedCalls expected_fs_calls = CreateRetriableErrors("Stat", 11); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); FileStatistics stat; const auto& status = fs.Stat("file_name", &stat); @@ -639,7 +666,8 @@ TEST(RetryingFileSystemTest, FileExists_AllRetriesFailed) { ExpectedCalls expected_fs_calls = CreateRetriableErrors("FileExists", 11); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); const auto& status = fs.FileExists("file_name"); EXPECT_TRUE( @@ -653,7 +681,8 @@ TEST(RetryingFileSystemTest, FileExists_SuccessWith2ndTry) { std::make_tuple("FileExists", Status::OK())}); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); TF_EXPECT_OK(fs.FileExists("gs://path/dir")); } @@ -665,7 +694,8 @@ TEST(RetryingFileSystemTest, IsDirectory_SuccessWith2ndTry) { std::make_tuple("IsDirectory", Status::OK())}); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); TF_EXPECT_OK(fs.IsDirectory("gs://path/dir")); } @@ -674,7 +704,8 @@ TEST(RetryingFileSystemTest, IsDirectory_AllRetriesFailed) { ExpectedCalls expected_fs_calls = CreateRetriableErrors("IsDirectory", 11); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); const auto& status = fs.IsDirectory("gs://path/dir"); EXPECT_TRUE( @@ -689,7 +720,8 @@ TEST(RetryingFileSystemTest, DeleteRecursively_SuccessWith2ndTry) { std::make_tuple("DeleteRecursively", Status::OK())}); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); int64 undeleted_files, undeleted_dirs; TF_EXPECT_OK( @@ -701,7 +733,8 @@ TEST(RetryingFileSystemTest, DeleteRecursively_AllRetriesFailed) { CreateRetriableErrors("DeleteRecursively", 11); std::unique_ptr<MockFileSystem> base_fs( new MockFileSystem(expected_fs_calls)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); int64 undeleted_files, undeleted_dirs; const auto& status = @@ -715,7 +748,8 @@ TEST(RetryingFileSystemTest, FlushCaches) { ExpectedCalls none; bool flushed = false; std::unique_ptr<MockFileSystem> base_fs(new MockFileSystem(none, &flushed)); - RetryingFileSystem<MockFileSystem> fs(std::move(base_fs), 0); + RetryingFileSystem<MockFileSystem> fs( + std::move(base_fs), RetryConfig(0 /* init_delay_time_us */)); fs.FlushCaches(); EXPECT_TRUE(flushed); } diff --git a/tensorflow/core/platform/cloud/retrying_utils.cc b/tensorflow/core/platform/cloud/retrying_utils.cc index d2df422024..cb0aecdd35 100644 --- a/tensorflow/core/platform/cloud/retrying_utils.cc +++ b/tensorflow/core/platform/cloud/retrying_utils.cc @@ -23,11 +23,6 @@ namespace tensorflow { namespace { -// In case of failure, every call will be retried kMaxRetries times. -constexpr int kMaxRetries = 10; -// Maximum backoff time in microseconds. -constexpr int64 kMaximumBackoffMicroseconds = 32000000; // 32 seconds. - bool IsRetriable(error::Code code) { switch (code) { case error::UNAVAILABLE: @@ -43,40 +38,41 @@ bool IsRetriable(error::Code code) { } // namespace Status RetryingUtils::CallWithRetries(const std::function<Status()>& f, - const int64 initial_delay_microseconds) { - return CallWithRetries(f, initial_delay_microseconds, [](int64 micros) { - return Env::Default()->SleepForMicroseconds(micros); - }); + const RetryConfig& config) { + return CallWithRetries( + f, + [](int64 micros) { return Env::Default()->SleepForMicroseconds(micros); }, + config); } Status RetryingUtils::CallWithRetries( - const std::function<Status()>& f, const int64 initial_delay_microseconds, - const std::function<void(int64)>& sleep_usec) { + const std::function<Status()>& f, + const std::function<void(int64)>& sleep_usec, const RetryConfig& config) { int retries = 0; while (true) { auto status = f(); if (!IsRetriable(status.code())) { return status; } - if (retries >= kMaxRetries) { + if (retries >= config.max_retries) { // Return AbortedError, so that it doesn't get retried again somewhere // at a higher level. return Status( error::ABORTED, strings::StrCat( - "All ", kMaxRetries, + "All ", config.max_retries, " retry attempts failed. The last failure: ", status.ToString())); } int64 delay_micros = 0; - if (initial_delay_microseconds > 0) { + if (config.init_delay_time_us > 0) { const int64 random_micros = random::New64() % 1000000; - delay_micros = std::min(initial_delay_microseconds << retries, - kMaximumBackoffMicroseconds) + + delay_micros = std::min(config.init_delay_time_us << retries, + config.max_delay_time_us) + random_micros; } LOG(INFO) << "The operation failed and will be automatically retried in " << (delay_micros / 1000000.0) << " seconds (attempt " - << (retries + 1) << " out of " << kMaxRetries + << (retries + 1) << " out of " << config.max_retries << "), caused by: " << status.ToString(); sleep_usec(delay_micros); retries++; @@ -84,8 +80,7 @@ Status RetryingUtils::CallWithRetries( } Status RetryingUtils::DeleteWithRetries( - const std::function<Status()>& delete_func, - const int64 initial_delay_microseconds) { + const std::function<Status()>& delete_func, const RetryConfig& config) { bool is_retried = false; return RetryingUtils::CallWithRetries( [delete_func, &is_retried]() { @@ -96,7 +91,7 @@ Status RetryingUtils::DeleteWithRetries( is_retried = true; return status; }, - initial_delay_microseconds); + config); } } // namespace tensorflow diff --git a/tensorflow/core/platform/cloud/retrying_utils.h b/tensorflow/core/platform/cloud/retrying_utils.h index 546b8d1c4a..1a7ce1b122 100644 --- a/tensorflow/core/platform/cloud/retrying_utils.h +++ b/tensorflow/core/platform/cloud/retrying_utils.h @@ -21,6 +21,26 @@ limitations under the License. namespace tensorflow { +// Default time before reporting failure: ~100 seconds. +struct RetryConfig { + RetryConfig(int64 init_delay_time_us = 100 * 1000, + int64 max_delay_time_us = 32 * 1000 * 1000, + int max_retries = 10) { + this->init_delay_time_us = init_delay_time_us; + this->max_delay_time_us = max_delay_time_us; + this->max_retries = max_retries; + } + + // In case of failure, every call will be retried max_retries times. + int max_retries; + + // Initial backoff time + int64 init_delay_time_us; + + // Maximum backoff time in microseconds. + int64 max_delay_time_us; +}; + class RetryingUtils { public: /// \brief Retries the function in case of failure with exponential backoff. @@ -31,18 +51,19 @@ class RetryingUtils { /// retries. /// If all retries failed, returns the last error status. static Status CallWithRetries(const std::function<Status()>& f, - const int64 initial_delay_microseconds); + const RetryConfig& config); + /// sleep_usec is a function that sleeps for the given number of microseconds. static Status CallWithRetries(const std::function<Status()>& f, - const int64 initial_delay_microseconds, - const std::function<void(int64)>& sleep_usec); + const std::function<void(int64)>& sleep_usec, + const RetryConfig& config); /// \brief A retrying wrapper for a function that deletes a resource. /// /// The function takes care of the scenario when a delete operation /// returns a failure but succeeds under the hood: if a retry returns /// NOT_FOUND, the whole operation is considered a success. static Status DeleteWithRetries(const std::function<Status()>& delete_func, - const int64 initial_delay_microseconds); + const RetryConfig& config); }; } // namespace tensorflow diff --git a/tensorflow/core/platform/cloud/retrying_utils_test.cc b/tensorflow/core/platform/cloud/retrying_utils_test.cc index 1b6527618a..75fe8a98f4 100644 --- a/tensorflow/core/platform/cloud/retrying_utils_test.cc +++ b/tensorflow/core/platform/cloud/retrying_utils_test.cc @@ -30,7 +30,8 @@ TEST(RetryingUtilsTest, CallWithRetries_RetryDelays) { }; std::function<Status()> f = []() { return errors::Unavailable("Failed."); }; - const auto& status = RetryingUtils::CallWithRetries(f, 500000L, sleep); + const auto& status = RetryingUtils::CallWithRetries( + f, sleep, RetryConfig(500000 /* init_delay_time_us */)); EXPECT_EQ(errors::Code::ABORTED, status.code()); EXPECT_TRUE(str_util::StrContains( status.error_message(), @@ -60,8 +61,10 @@ TEST(RetryingUtilsTest, CallWithRetries_NotFoundIsNotRetried) { results.erase(results.begin()); return result; }; - EXPECT_EQ(errors::Code::NOT_FOUND, - RetryingUtils::CallWithRetries(f, 0).code()); + EXPECT_EQ( + errors::Code::NOT_FOUND, + RetryingUtils::CallWithRetries(f, RetryConfig(0 /* init_delay_time_us */)) + .code()); } TEST(RetryingUtilsTest, CallWithRetries_ImmediateSuccess) { @@ -74,7 +77,8 @@ TEST(RetryingUtilsTest, CallWithRetries_ImmediateSuccess) { results.erase(results.begin()); return result; }; - TF_EXPECT_OK(RetryingUtils::CallWithRetries(f, 1.0, sleep)); + TF_EXPECT_OK(RetryingUtils::CallWithRetries( + f, sleep, RetryConfig(1L /* init_delay_time_us */))); } TEST(RetryingUtilsTest, CallWithRetries_EventualSuccess) { @@ -86,7 +90,8 @@ TEST(RetryingUtilsTest, CallWithRetries_EventualSuccess) { results.erase(results.begin()); return result; }; - TF_EXPECT_OK(RetryingUtils::CallWithRetries(f, 0)); + TF_EXPECT_OK(RetryingUtils::CallWithRetries( + f, RetryConfig(0 /* init_delay_time_us */))); } TEST(RetryingUtilsTest, DeleteWithRetries_ImmediateSuccess) { @@ -96,7 +101,8 @@ TEST(RetryingUtilsTest, DeleteWithRetries_ImmediateSuccess) { delete_results.erase(delete_results.begin()); return result; }; - TF_EXPECT_OK(RetryingUtils::DeleteWithRetries(delete_func, 0)); + TF_EXPECT_OK(RetryingUtils::DeleteWithRetries( + delete_func, RetryConfig(0 /* init_delay_time_us */))); } TEST(RetryingUtilsTest, DeleteWithRetries_EventualSuccess) { @@ -106,7 +112,8 @@ TEST(RetryingUtilsTest, DeleteWithRetries_EventualSuccess) { delete_results.erase(delete_results.begin()); return result; }; - TF_EXPECT_OK(RetryingUtils::DeleteWithRetries(delete_func, 0)); + TF_EXPECT_OK(RetryingUtils::DeleteWithRetries( + delete_func, RetryConfig(0 /* init_delay_time_us */))); } TEST(RetryingUtilsTest, DeleteWithRetries_PermissionDeniedNotRetried) { @@ -118,7 +125,9 @@ TEST(RetryingUtilsTest, DeleteWithRetries_PermissionDeniedNotRetried) { return result; }; EXPECT_EQ(errors::Code::PERMISSION_DENIED, - RetryingUtils::DeleteWithRetries(delete_func, 0).code()); + RetryingUtils::DeleteWithRetries( + delete_func, RetryConfig(0 /* init_delay_time_us */)) + .code()); } TEST(RetryingUtilsTest, DeleteWithRetries_SuccessThroughFileNotFound) { @@ -129,7 +138,8 @@ TEST(RetryingUtilsTest, DeleteWithRetries_SuccessThroughFileNotFound) { delete_results.erase(delete_results.begin()); return result; }; - TF_EXPECT_OK(RetryingUtils::DeleteWithRetries(delete_func, 0)); + TF_EXPECT_OK(RetryingUtils::DeleteWithRetries( + delete_func, RetryConfig(0 /* init_delay_time_us */))); } TEST(RetryingUtilsTest, DeleteWithRetries_FirstNotFoundReturnedAsIs) { @@ -140,7 +150,9 @@ TEST(RetryingUtilsTest, DeleteWithRetries_FirstNotFoundReturnedAsIs) { return result; }; EXPECT_EQ(error::NOT_FOUND, - RetryingUtils::DeleteWithRetries(delete_func, 0).code()); + RetryingUtils::DeleteWithRetries( + delete_func, RetryConfig(0 /* init_delay_time_us */)) + .code()); } } // namespace |