> Am 27.05.2024 um 14:08 schrieb Yann Ylavic <ylavic....@gmail.com>:
>
> On Mon, May 27, 2024 at 1:04 PM <ic...@apache.org> wrote:
>>
>> Author: icing
>> Date: Mon May 27 11:04:52 2024
>> New Revision: 1918003
>>
>> URL: http://svn.apache.org/viewvc?rev=1918003&view=rev
>> Log:
>> *) mod_http2: sync with module's github.
>> - on newer HTTPD versions, return connection monitoring
>> to the event MPM when block on client updates.
>> 2.4.x versions still treat connections in the event
>> MPM as KeepAlive and purge them on load in the middle
>> of response processing.
>> - spelling fixes
>> - support for yield calls in c2 "network" filter
> []
>>
>> --- httpd/httpd/trunk/modules/http2/h2_c1.c (original)
>> +++ httpd/httpd/trunk/modules/http2/h2_c1.c Mon May 27 11:04:52 2024
>> @@ -116,7 +116,7 @@ cleanup:
>> apr_status_t h2_c1_run(conn_rec *c)
>> {
>> apr_status_t status;
>> - int mpm_state = 0;
>> + int mpm_state = 0, keepalive = 0;
>> h2_conn_ctx_t *conn_ctx = h2_conn_ctx_get(c);
>>
>> ap_assert(conn_ctx);
>> @@ -127,7 +127,7 @@ apr_status_t h2_c1_run(conn_rec *c)
>> c->cs->state = CONN_STATE_HANDLER;
>> }
>>
>> - status = h2_session_process(conn_ctx->session, async_mpm);
>> + status = h2_session_process(conn_ctx->session, async_mpm,
>> &keepalive);
>>
>> if (APR_STATUS_IS_EOF(status)) {
>> ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, c,
>> @@ -153,7 +153,7 @@ apr_status_t h2_c1_run(conn_rec *c)
>> case H2_SESSION_ST_BUSY:
>> case H2_SESSION_ST_WAIT:
>> c->cs->state = CONN_STATE_WRITE_COMPLETION;
>> - if (c->cs && !conn_ctx->session->remote.emitted_count) {
>> + if (!keepalive) {
>> /* let the MPM know that we are not done and want
>> * the Timeout behaviour instead of a KeepAliveTimeout
>> * See PR 63534.
>
> Per our discussion the other day, if you want to avoid c1 connections
> to be killed by mpm_event on high load in this case, I think you can
> do this here:
>
> Index: modules/http2/h2_c1.c
> ===================================================================
> --- modules/http2/h2_c1.c (revision 1918003)
> +++ modules/http2/h2_c1.c (working copy)
> @@ -147,6 +147,7 @@ apr_status_t h2_c1_run(conn_rec *c)
> && mpm_state != AP_MPMQ_STOPPING);
>
> if (c->cs) {
> + c->clogging_input_filters = 0;
> switch (conn_ctx->session->state) {
> case H2_SESSION_ST_INIT:
> case H2_SESSION_ST_IDLE:
> @@ -159,6 +160,7 @@ apr_status_t h2_c1_run(conn_rec *c)
> * See PR 63534.
> */
> c->cs->sense = CONN_SENSE_WANT_READ;
> + c->clogging_input_filters = 1;
> }
> break;
> case H2_SESSION_ST_CLEANUP:
> --
>
> c->clogging_input_filters = 1 will tell the MPM to always call
> process_connection() hooks after the WRITE_COMPLETION state did the
> poll(), rather than entering the (killable) keepalive state.
>
> Looks like the correct workaround with current mpm_event..
Just so I get this right. It will return to processing after the
write is done or after a POLLIN happened? In the first case, it
will not have really a positive effect on worker allocations,
seems to me.
Cheers,
Stefan
>
>
> Regards;
> Yann.