diff --git a/cloud/src/recycler/s3_accessor.cpp b/cloud/src/recycler/s3_accessor.cpp index 3de8edfd048e1a..9f8f1ed205e6f9 100644 --- a/cloud/src/recycler/s3_accessor.cpp +++ b/cloud/src/recycler/s3_accessor.cpp @@ -292,7 +292,8 @@ std::shared_ptr S3Accessor::get_aws_credentia return std::make_shared(); } - Aws::Client::ClientConfiguration clientConfiguration; + Aws::Client::ClientConfiguration clientConfiguration = + S3Environment::getClientConfiguration(); if (_ca_cert_file_path.empty()) { _ca_cert_file_path = get_valid_ca_cert_path(doris::cloud::split(config::ca_cert_file_paths, ';')); @@ -363,7 +364,7 @@ int S3Accessor::init() { uri_ = normalize_http_uri(uri_); // S3Conf::S3 - Aws::Client::ClientConfiguration aws_config; + Aws::Client::ClientConfiguration aws_config = S3Environment::getClientConfiguration(); aws_config.endpointOverride = conf_.endpoint; aws_config.region = conf_.region; // Aws::Http::CurlHandleContainer::AcquireCurlHandle() may be blocked if the connecitons are bottleneck diff --git a/cloud/src/recycler/s3_accessor.h b/cloud/src/recycler/s3_accessor.h index dd93e83d9631f4..ee72b81e983fc8 100644 --- a/cloud/src/recycler/s3_accessor.h +++ b/cloud/src/recycler/s3_accessor.h @@ -60,6 +60,16 @@ class S3Environment { static S3Environment& getInstance(); + static Aws::Client::ClientConfiguration& getClientConfiguration() { + // The default constructor of ClientConfiguration will do some http call + // such as Aws::Internal::GetEC2MetadataClient and other init operation, + // which is unnecessary. + // So here we use a static instance, and deep copy every time + // to avoid unnecessary operations. + static Aws::Client::ClientConfiguration instance; + return instance; + } + ~S3Environment(); private: