Skip to content

Commit afb2655

Browse files
authored
Merge branch 'main' into env-var-mem-limit
2 parents 454c2f0 + e273f70 commit afb2655

File tree

3 files changed

+9
-10
lines changed

3 files changed

+9
-10
lines changed

include/aws/s3/private/s3_meta_request_impl.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,9 @@ struct aws_s3_meta_request {
195195
/* If the buffer pool optimized for the specific size or not. */
196196
bool buffer_pool_optimized;
197197

198+
/* Track the number of requests being prepared for this meta request. */
199+
struct aws_atomic_var num_request_being_prepared;
200+
198201
struct {
199202
struct aws_mutex lock;
200203

@@ -278,9 +281,6 @@ struct aws_s3_meta_request {
278281
/* True if this meta request is currently in the client's list. */
279282
bool scheduled;
280283

281-
/* Track the number of requests being prepared for this meta request. */
282-
size_t num_request_being_prepared;
283-
284284
} client_process_work_threaded_data;
285285

286286
/* Anything in this structure should only ever be accessed by the meta-request from its io_event_loop thread. */

source/s3_client.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1948,8 +1948,9 @@ static bool s_s3_client_should_update_meta_request(
19481948
return false;
19491949
}
19501950

1951-
if (meta_request->client_process_work_threaded_data.num_request_being_prepared >=
1952-
aws_s3_client_get_max_active_connections(client, meta_request)) {
1951+
/* This is not 100% thread safe, but prepare a bit more for the meta request level won't actually hurt. */
1952+
size_t specific_request_being_prepared = aws_atomic_load_int(&meta_request->num_request_being_prepared);
1953+
if (specific_request_being_prepared >= aws_s3_client_get_max_active_connections(client, meta_request)) {
19531954
/* Don't prepare more than it's allowed for the meta request */
19541955
return false;
19551956
}
@@ -2167,7 +2168,7 @@ void aws_s3_client_update_meta_requests_threaded(struct aws_s3_client *client) {
21672168
request->tracked_by_client = true;
21682169

21692170
++client->threaded_data.num_requests_being_prepared;
2170-
++meta_request->client_process_work_threaded_data.num_request_being_prepared;
2171+
aws_atomic_fetch_add(&meta_request->num_request_being_prepared, 1);
21712172

21722173
num_requests_in_flight =
21732174
(uint32_t)aws_atomic_fetch_add(&client->stats.num_requests_in_flight, 1) + 1;
@@ -2234,6 +2235,7 @@ static void s_s3_client_prepare_callback_queue_request(
22342235
request = aws_s3_request_release(request);
22352236
}
22362237

2238+
aws_atomic_fetch_sub(&meta_request->num_request_being_prepared, 1);
22372239
/* BEGIN CRITICAL SECTION */
22382240
{
22392241
aws_s3_client_lock_synced_data(client);
@@ -2265,8 +2267,6 @@ void aws_s3_client_update_connections_threaded(struct aws_s3_client *client) {
22652267
struct aws_s3_request *request = aws_s3_client_dequeue_request_threaded(client);
22662268
struct aws_s3_meta_request *meta_request = request->meta_request;
22672269
const uint32_t max_active_connections = aws_s3_client_get_max_active_connections(client, meta_request);
2268-
/* As the request removed from the queue. Decrement the preparing track */
2269-
--meta_request->client_process_work_threaded_data.num_request_being_prepared;
22702270
if (request->is_noop) {
22712271
/* If request is no-op, finishes and cleans up the request */
22722272
s_s3_client_meta_request_finished_request(client, meta_request, request, AWS_ERROR_SUCCESS);
@@ -2292,8 +2292,6 @@ void aws_s3_client_update_connections_threaded(struct aws_s3_client *client) {
22922292
} else {
22932293
/* Push the request into the left-over list to be used in a future call of this function. */
22942294
aws_linked_list_push_back(&left_over_requests, &request->node);
2295-
/* Increment the count as we put it back to the queue. */
2296-
++meta_request->client_process_work_threaded_data.num_request_being_prepared;
22972295
}
22982296
client_max_active_connections = aws_s3_client_get_max_active_connections(client, NULL);
22992297
num_requests_network_io = s_s3_client_get_num_requests_network_io(client, AWS_S3_META_REQUEST_TYPE_MAX);

source/s3_meta_request.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ int aws_s3_meta_request_init_base(
200200
/* Set up reference count. */
201201
aws_ref_count_init(&meta_request->ref_count, meta_request, s_s3_meta_request_destroy);
202202
aws_atomic_init_int(&meta_request->num_requests_network, 0);
203+
aws_atomic_init_int(&meta_request->num_request_being_prepared, 0);
203204
aws_linked_list_init(&meta_request->synced_data.cancellable_http_streams_list);
204205
aws_linked_list_init(&meta_request->synced_data.pending_buffer_futures);
205206

0 commit comments

Comments
 (0)