Repository navigation
Expand file tree
/
Copy pathS3CrtClientConfiguration.cpp
More file actions
134 lines (112 loc) · 6.46 KB
/
Copy pathS3CrtClientConfiguration.cpp
File metadata and controls
134 lines (112 loc) · 6.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#include <aws/core/Globals.h>
#include <aws/core/client/RetryStrategy.h>
#include <aws/s3-crt/S3CrtClientConfiguration.h>
namespace Aws {
namespace S3Crt {
static const char US_EAST_1_REGIONAL_ENDPOINT_ENV_VAR[] = "AWS_S3_US_EAST_1_REGIONAL_ENDPOINT";
static const char US_EAST_1_REGIONAL_ENDPOINT_CONFIG_VAR[] = "s3_us_east_1_regional_endpoint";
static const char S3_DISABLE_MULTIREGION_ACCESS_POINTS_ENV_VAR[] = "AWS_S3_DISABLE_MULTIREGION_ACCESS_POINTS";
static const char S3_DISABLE_MULTIREGION_ACCESS_POINTS_CONFIG_VAR[] = "s3_disable_multiregion_access_points";
static const char S3_DISABLE_EXPRESS_SESSION_ENVIRONMENT_VARIABLE[] = "AWS_S3_DISABLE_S3_EXPRESS_AUTH";
static const char S3_DISABLE_EXPRESS_SESSION_CONFIG_FILE_OPTION[] = "s3_disable_s3_express_auth";
static const char S3_USE_ARN_REGION_ENVIRONMENT_VARIABLE[] = "AWS_S3_USE_ARN_REGION";
static const char S3_USE_ARN_REGION_CONFIG_FILE_OPTION[] = "s3_use_arn_region";
void S3CrtClientConfiguration::LoadS3CrtSpecificConfig(const Aws::String& inputProfileName) {
if (Aws::S3Crt::US_EAST_1_REGIONAL_ENDPOINT_OPTION::NOT_SET == this->useUSEast1RegionalEndPointOption) {
const Aws::String& useUSEastOption = BaseClientConfigClass::LoadConfigFromEnvOrProfile(
US_EAST_1_REGIONAL_ENDPOINT_ENV_VAR, inputProfileName, US_EAST_1_REGIONAL_ENDPOINT_CONFIG_VAR, {"legacy", "regional"}, "regional");
if (useUSEastOption == "legacy") {
this->useUSEast1RegionalEndPointOption = Aws::S3Crt::US_EAST_1_REGIONAL_ENDPOINT_OPTION::LEGACY;
} else {
this->useUSEast1RegionalEndPointOption = Aws::S3Crt::US_EAST_1_REGIONAL_ENDPOINT_OPTION::REGIONAL;
}
}
Aws::String s3DisableMultiRegionAccessPoints =
ClientConfiguration::LoadConfigFromEnvOrProfile(S3_DISABLE_MULTIREGION_ACCESS_POINTS_ENV_VAR, inputProfileName,
S3_DISABLE_MULTIREGION_ACCESS_POINTS_CONFIG_VAR, {"true", "false"}, "false");
if (s3DisableMultiRegionAccessPoints == "true") {
disableMultiRegionAccessPoints = true;
}
Aws::String disableS3ExpressAuthCfg =
ClientConfiguration::LoadConfigFromEnvOrProfile(S3_DISABLE_EXPRESS_SESSION_ENVIRONMENT_VARIABLE, inputProfileName,
S3_DISABLE_EXPRESS_SESSION_CONFIG_FILE_OPTION, {"true", "false"}, "false");
if (disableS3ExpressAuthCfg == "true") {
disableS3ExpressAuth = true;
}
Aws::String useArnRegionCfg = ClientConfiguration::LoadConfigFromEnvOrProfile(
S3_USE_ARN_REGION_ENVIRONMENT_VARIABLE, inputProfileName, S3_USE_ARN_REGION_CONFIG_FILE_OPTION, {"true", "false"}, "false");
if (useArnRegionCfg == "true") {
useArnRegion = true;
}
}
S3CrtClientConfiguration::S3CrtClientConfiguration(const Aws::Client::ClientConfigurationInitValues& configuration)
: BaseClientConfigClass(configuration) {
LoadS3CrtSpecificConfig(this->profileName);
}
S3CrtClientConfiguration::S3CrtClientConfiguration(const char* inputProfileName, bool shouldDisableIMDS)
: BaseClientConfigClass(inputProfileName, shouldDisableIMDS) {
LoadS3CrtSpecificConfig(Aws::String(inputProfileName));
}
S3CrtClientConfiguration::S3CrtClientConfiguration(bool useSmartDefaults, const char* defaultMode, bool shouldDisableIMDS)
: BaseClientConfigClass(useSmartDefaults, defaultMode, shouldDisableIMDS) {
LoadS3CrtSpecificConfig(this->profileName);
}
S3CrtClientConfiguration::S3CrtClientConfiguration(const Aws::Client::ClientConfiguration& config,
Client::AWSAuthV4Signer::PayloadSigningPolicy iPayloadSigningPolicy,
bool iUseVirtualAddressing,
US_EAST_1_REGIONAL_ENDPOINT_OPTION iUseUSEast1RegionalEndPointOption)
: BaseClientConfigClass(config),
useVirtualAddressing(iUseVirtualAddressing),
useUSEast1RegionalEndPointOption(iUseUSEast1RegionalEndPointOption),
payloadSigningPolicy(iPayloadSigningPolicy) {
LoadS3CrtSpecificConfig(this->profileName);
}
/* S3 CRT specifics */
S3CrtClientConfiguration::S3CrtConfigFactories S3CrtClientConfiguration::S3CrtConfigFactories::defaultFactories = []() {
S3CrtConfigFactories factories;
factories.retryStrategyCreateFn = [](const S3Crt::S3CrtClientConfiguration& config) -> aws_retry_strategy* {
aws_event_loop_group* el_group = config.clientBootstrap ? config.clientBootstrap->GetUnderlyingHandle()->event_loop_group
: Aws::GetDefaultClientBootstrap()->GetUnderlyingHandle()->event_loop_group;
using CrtRetryStrategyType = S3Crt::S3CrtClientConfiguration::CrtRetryStrategyConfig::CrtRetryStrategyType;
CrtRetryStrategyType strategyToUse = config.crtRetryStrategyConfig.crtRetryStrategyType;
if (strategyToUse == CrtRetryStrategyType::NOT_SET && config.retryStrategy) {
if (config.retryStrategy) {
if (Aws::String("standard") == config.retryStrategy->GetStrategyName())
strategyToUse = CrtRetryStrategyType::STANDARD;
else if (Aws::String("adaptive") == config.retryStrategy->GetStrategyName())
strategyToUse = CrtRetryStrategyType::EXPONENTIAL_BACKOFF;
else
strategyToUse = CrtRetryStrategyType::DEFAULT;
}
}
if (strategyToUse == CrtRetryStrategyType::DEFAULT) {
return nullptr;
}
if (strategyToUse == CrtRetryStrategyType::STANDARD) {
aws_standard_retry_options options{};
return aws_retry_strategy_new_standard(Aws::get_aws_allocator(), &options);
}
if (strategyToUse == CrtRetryStrategyType::EXPONENTIAL_BACKOFF) {
aws_exponential_backoff_retry_options options{};
options.el_group = el_group;
options.max_retries = config.crtRetryStrategyConfig.config.maxRetries;
options.backoff_scale_factor_ms = config.crtRetryStrategyConfig.config.scaleFactorMs;
options.max_backoff_secs = config.crtRetryStrategyConfig.config.maxBackoffSecs;
options.jitter_mode = AWS_EXPONENTIAL_BACKOFF_JITTER_FULL;
return aws_retry_strategy_new_exponential_backoff(Aws::get_aws_allocator(), &options);
}
if (strategyToUse == CrtRetryStrategyType::NO_RETRY) {
aws_no_retry_options options{};
return aws_retry_strategy_new_no_retry(Aws::get_aws_allocator(), &options);
}
return nullptr;
};
return factories;
}();
/* End of S3 CRT specifics */
} // namespace S3Crt
} // namespace Aws