Hi Stefan,

Am 17.01.25 um 15:22 schrieb Stefan Eissing via dev:
Hallo Rainer,

hier mein error log when ich, erfolgreich:

httpd/2.4.x> pytest -v -k test_h2_200_17

laufen lasse.

Interesting. In your log, directly before the wanted line AH03401 there is a thread switch:

[Fri Jan 17 15:20:38.596914 2025] [http2:debug] [pid 34167:tid 123145428578304] h2_session.c(1887): [client 127.0.0.1:55956] AH10306: h2_session(34167-0,IDLE,0): returning to mpm c1 monitoring

[Fri Jan 17 15:20:38.597152 2025] [http2:debug] [pid 34167:tid 123145429114880] h2_session.c(1503): [client 127.0.0.1:55956] AH03401: h2_session(34167-0,IDLE,0): conn error -> shutdown, remote.emitted=1

In my output, everything is the same until

[Fri Jan 17 11:42:28.351516 2025] [http2:debug] [pid 2309684:tid 2309712] h2_session.c(1887): [client 127.0.0.1:47394] AH10306: h2_session(2309684-0,IDLE,0): returning to mpm c1 monitoring

But then instead of the AH03401 I see:

- trace messages which might be there for you as well but are logged in my setup due to higher log level:

[Fri Jan 17 11:42:28.351564 2025] [mpm_event:trace7] [pid 2309684:tid 2309742] event.c(1859): (4)Interrupted system call: polled with num=0 exit=0/0 conns=1 queues_timeout=4999967 timers_timeout=-1737110548351563 [Fri Jan 17 11:42:28.351587 2025] [mpm_event:trace7] [pid 2309684:tid 2309742] event.c(1839): polling with timeout=5000000 queues_timeout=4999944 timers_timeout=-1737110548351586 [Fri Jan 17 11:42:28.352320 2025] [mpm_event:trace7] [pid 2309684:tid 2309742] event.c(1859): polled with num=1 exit=0/0 conns=1 queues_timeout=4999212 timers_timeout=-1737110548352318 [Fri Jan 17 11:42:28.352385 2025] [mpm_event:trace7] [pid 2309684:tid 2309742] event.c(1839): polling with timeout=5000000 queues_timeout=4999146 timers_timeout=-1737110548352384

and then

[Fri Jan 17 11:42:28.352882 2025] [http2:debug] [pid 2309684:tid 2309714] h2_session.c(364): [client 127.0.0.1:47394] AH03066: h2_session(2309684-0,IDLE,0): recv FRAME[GOAWAY[error=0, reason='shutdown', last_stream=0]], frames=4/5 (r/s) [Fri Jan 17 11:42:28.352902 2025] [http2:debug] [pid 2309684:tid 2309714] h2_session.c(1393): [client 127.0.0.1:47394] AH03078: h2_session(2309684-0,IDLE,0): transit [IDLE] -- remote goaway --> [DONE] [Fri Jan 17 11:42:28.352934 2025] [http2:debug] [pid 2309684:tid 2309714] h2_c1.c(134): (70014)End of file found: [client 127.0.0.1:47394] AH03045: h2_session(2309684-0,DONE,0): process, closing conn

So I think httpd receives the clients GOAWAY before it comes to the AH03401 point.

In your setup the GOAWAY comes from the server, in my setup from the client. So either the test is timing sensitive, or our clients (curl) behave differently.

And indeed when running the test using curl 8.7.1 or 8.8.0 it succeeds, with 8.9.0 , 8.9.1, 8.10.1 and 8.11.1 it fails.

So how should we handle that? Making it dependent on the curl version? Or is there another way to defer the client GOAWAY?

Thanks and best regards,

Rainer

Am 17.01.2025 um 15:00 schrieb Rainer Jung <rainer.j...@kippdata.de>:

Hi Stefan,

(Rainer not RĂ¼diger)

Am 17.01.25 um 14:22 schrieb Stefan Eissing via dev:
this*may* happen if you have a httpd process still lingering around on the test 
port somewhere?

Unfortunately this is not the reason here.

I am using OpenSSL 3.4.0 (in the server) and client side curl 8.11.1 and 
nghttp2 1.64.0 (with multiple OpenSSL versions in the clients, all failing the 
same way).

I might try a manual reproduction scenario for the test

- LimitRequestFieldSize 20
- LogLevel http2:debug
- curl with a couple of long request headers

Maybe you could provide example pytest output for 17, how it should look like?

Thanks,

Rainer

Reply via email to