Skip to content

Commit 640088c

Browse files
author
Krish
committed
address comments
1 parent 64025f1 commit 640088c

File tree

1 file changed

+11
-30
lines changed

1 file changed

+11
-30
lines changed

source/s3_client.c

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ uint32_t aws_s3_client_get_max_active_connections(
217217
struct aws_s3_meta_request *meta_request) {
218218
AWS_PRECONDITION(client);
219219

220-
uint32_t max_active_connections = client->ideal_connection_count;
220+
uint32_t max_active_connections = g_max_num_connections;
221221
if (client->max_active_connections_override > 0 &&
222222
client->max_active_connections_override < max_active_connections) {
223223
max_active_connections = client->max_active_connections_override;
@@ -244,48 +244,26 @@ uint32_t aws_s3_client_get_max_active_connections(
244244
}
245245

246246
/* Initialize token bucket based on target throughput */
247-
void s_s3_client_init_tokens(struct aws_s3_client *client) {
247+
static void s_s3_client_init_tokens(struct aws_s3_client *client) {
248248
AWS_PRECONDITION(client);
249249

250-
aws_atomic_store_int(&client->token_bucket, (uint32_t)client->throughput_target_gbps * 1024);
250+
uint32_t target_throughput_mbps = 0;
251+
aws_mul_u32_checked(client->throughput_target_gbps, 1024, &target_throughput_mbps);
252+
aws_atomic_store_int(&client->token_bucket, target_throughput_mbps);
251253
}
252254

253255
/* Releases tokens back after request is complete. */
254-
void s_s3_client_release_tokens(struct aws_s3_client *client, struct aws_s3_request *request) {
256+
static void s_s3_client_release_tokens(struct aws_s3_client *client, struct aws_s3_request *request) {
255257
AWS_PRECONDITION(client);
256258
AWS_PRECONDITION(request);
257259

258260
aws_atomic_fetch_add(&client->token_bucket, request->tokens_used);
259261
request->tokens_used = 0;
260262
}
261263

262-
/* Checks to ensure we are not violating user configured connection limits althought we are dynamically increasing
263-
* and decreasing connections */
264-
bool s_check_connection_limits(struct aws_s3_client *client, struct aws_s3_request *request) {
265-
AWS_PRECONDITION(client);
266-
AWS_PRECONDITION(request);
267-
268-
// We ensure we do not violate the user set max-connections limit
269-
if ((uint32_t)aws_atomic_load_int(&client->stats.num_requests_network_total) >=
270-
client->max_active_connections_override &&
271-
client->max_active_connections_override > 0) {
272-
return false;
273-
}
274-
275-
struct aws_s3_meta_request *meta_request = request->meta_request;
276-
if (meta_request &&
277-
(uint32_t)aws_atomic_load_int(&meta_request->num_requests_network) >=
278-
meta_request->max_active_connections_override &&
279-
meta_request->max_active_connections_override > 0) {
280-
return false;
281-
}
282-
283-
return true;
284-
}
285-
286264
/* Returns true or false based on whether the request was able to avail the required amount of tokens.
287265
* TODO: try to introduce a scalability factor instead of using pure latency. */
288-
bool s_s3_client_acquire_tokens(struct aws_s3_client *client, struct aws_s3_request *request) {
266+
static bool s_s3_client_acquire_tokens(struct aws_s3_client *client, struct aws_s3_request *request) {
289267
AWS_PRECONDITION(client);
290268
AWS_PRECONDITION(request);
291269

@@ -2442,7 +2420,10 @@ void aws_s3_client_update_connections_threaded(struct aws_s3_client *client) {
24422420

24432421
s_s3_client_meta_request_finished_request(client, meta_request, request, AWS_ERROR_S3_CANCELED);
24442422
request = aws_s3_request_release(request);
2445-
} else if (s_check_connection_limits(client, request) && s_s3_client_acquire_tokens(client, request)) {
2423+
} else if (
2424+
(uint32_t)aws_atomic_load_int(&meta_request->num_requests_network) <
2425+
(uint32_t)aws_s3_client_get_max_active_connections(client, meta_request) &&
2426+
s_s3_client_acquire_tokens(client, request)) {
24462427
/* Make sure it's above the max request level limitation. */
24472428
s_s3_client_create_connection_for_request(client, request);
24482429
} else {

0 commit comments

Comments
 (0)