Skip to content

Commit f3e449d

Browse files
Exposed options for toggling read back pressure behavior, updated to match aws-c-io api changes. (#194)
1 parent 33f2e2a commit f3e449d

File tree

5 files changed

+41
-23
lines changed

5 files changed

+41
-23
lines changed

include/aws/http/connection.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,11 @@ struct aws_http_client_connection_options {
208208
* See `aws_http_on_client_connection_shutdown_fn`.
209209
*/
210210
aws_http_on_client_connection_shutdown_fn *on_shutdown;
211+
212+
/**
213+
* If set to true, read back pressure mechanism will be enabled.
214+
*/
215+
bool enable_read_back_pressure;
211216
};
212217

213218
/**

include/aws/http/connection_manager.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ struct aws_http_connection_manager_options {
6464
*/
6565
void *shutdown_complete_user_data;
6666
aws_http_connection_manager_shutdown_complete_fn *shutdown_complete_callback;
67+
68+
/**
69+
* If set to true, the read back pressure mechanism will be enabled.
70+
*/
71+
bool enable_read_back_pressure;
6772
};
6873

6974
AWS_EXTERN_C_BEGIN

include/aws/http/server.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ struct aws_http_server_options {
103103
* Optional.
104104
*/
105105
aws_http_server_on_destroy_fn *on_destroy_complete;
106+
107+
/**
108+
* If set to true, read back pressure mechanism will be enabled.
109+
*/
110+
bool enable_read_back_pressure;
106111
};
107112

108113
/**

source/connection.c

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -487,26 +487,23 @@ struct aws_http_server *aws_http_server_new(const struct aws_http_server_options
487487
s_server_lock_synced_data(server);
488488
if (options->tls_options) {
489489
server->is_using_tls = true;
490-
491-
server->socket = aws_server_bootstrap_new_tls_socket_listener(
492-
options->bootstrap,
493-
options->endpoint,
494-
options->socket_options,
495-
options->tls_options,
496-
s_server_bootstrap_on_accept_channel_setup,
497-
s_server_bootstrap_on_accept_channel_shutdown,
498-
s_server_bootstrap_on_server_listener_destroy,
499-
server);
500-
} else {
501-
server->socket = aws_server_bootstrap_new_socket_listener(
502-
options->bootstrap,
503-
options->endpoint,
504-
options->socket_options,
505-
s_server_bootstrap_on_accept_channel_setup,
506-
s_server_bootstrap_on_accept_channel_shutdown,
507-
s_server_bootstrap_on_server_listener_destroy,
508-
server);
509490
}
491+
492+
struct aws_server_socket_channel_bootstrap_options bootstrap_options = {
493+
.enable_read_back_pressure = options->enable_read_back_pressure,
494+
.tls_options = options->tls_options,
495+
.bootstrap = options->bootstrap,
496+
.socket_options = options->socket_options,
497+
.incoming_callback = s_server_bootstrap_on_accept_channel_setup,
498+
.shutdown_callback = s_server_bootstrap_on_accept_channel_shutdown,
499+
.destroy_callback = s_server_bootstrap_on_server_listener_destroy,
500+
.host_name = options->endpoint->address,
501+
.port = options->endpoint->port,
502+
.user_data = server,
503+
};
504+
505+
server->socket = aws_server_bootstrap_new_socket_listener(&bootstrap_options);
506+
510507
s_server_unlock_synced_data(server);
511508

512509
if (!server->socket) {
@@ -769,6 +766,7 @@ int aws_http_client_connect_internal(
769766
.tls_options = options->tls_options,
770767
.setup_callback = s_client_bootstrap_on_channel_setup,
771768
.shutdown_callback = s_client_bootstrap_on_channel_shutdown,
769+
.enable_read_back_pressure = options->enable_read_back_pressure,
772770
.user_data = http_bootstrap,
773771
};
774772

source/connection_manager.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,11 @@ struct aws_http_connection_manager {
207207
* a hybrid atomic/lock solution felt excessively complicated and delicate.
208208
*/
209209
size_t external_ref_count;
210+
211+
/*
212+
* if set to true, read back pressure mechanism will be enabled.
213+
*/
214+
bool enable_read_back_pressure;
210215
};
211216

212217
struct aws_http_connection_manager_snapshot {
@@ -560,12 +565,11 @@ struct aws_http_connection_manager *aws_http_connection_manager_new(
560565
}
561566

562567
struct aws_http_connection_manager *manager =
563-
aws_mem_acquire(allocator, sizeof(struct aws_http_connection_manager));
568+
aws_mem_calloc(allocator, 1, sizeof(struct aws_http_connection_manager));
564569
if (manager == NULL) {
565570
return NULL;
566571
}
567572

568-
AWS_ZERO_STRUCT(*manager);
569573
manager->allocator = allocator;
570574

571575
if (aws_mutex_init(&manager->lock)) {
@@ -612,6 +616,7 @@ struct aws_http_connection_manager *aws_http_connection_manager_new(
612616
manager->external_ref_count = 1;
613617
manager->shutdown_complete_callback = options->shutdown_complete_callback;
614618
manager->shutdown_complete_user_data = options->shutdown_complete_user_data;
619+
manager->enable_read_back_pressure = options->enable_read_back_pressure;
615620

616621
AWS_LOGF_INFO(AWS_LS_HTTP_CONNECTION_MANAGER, "id=%p: Successfully created", (void *)manager);
617622

@@ -686,6 +691,7 @@ static int s_aws_http_connection_manager_new_connection(struct aws_http_connecti
686691
options.socket_options = &manager->socket_options;
687692
options.on_setup = s_aws_http_connection_manager_on_connection_setup;
688693
options.on_shutdown = s_aws_http_connection_manager_on_connection_shutdown;
694+
options.enable_read_back_pressure = manager->enable_read_back_pressure;
689695

690696
if (aws_http_connection_monitoring_options_is_valid(&manager->monitoring_options)) {
691697
options.monitoring_options = &manager->monitoring_options;
@@ -844,13 +850,12 @@ void aws_http_connection_manager_acquire_connection(
844850
AWS_LOGF_DEBUG(AWS_LS_HTTP_CONNECTION_MANAGER, "id=%p: Acquire connection", (void *)manager);
845851

846852
struct aws_http_connection_acquisition *request =
847-
aws_mem_acquire(manager->allocator, sizeof(struct aws_http_connection_acquisition));
853+
aws_mem_calloc(manager->allocator, 1, sizeof(struct aws_http_connection_acquisition));
848854
if (request == NULL) {
849855
callback(NULL, aws_last_error(), user_data);
850856
return;
851857
}
852858

853-
AWS_ZERO_STRUCT(*request);
854859
request->callback = callback;
855860
request->user_data = user_data;
856861

0 commit comments

Comments
 (0)