pedestal 2026-02-19

I upgraded from pedestal 0.7 to 0.8.1 (so jetty 11 to jetty 12) and now I can't seem to make http/2 work: every query times out unless I force http/1.1 protocol. Anyone encountered that issue before ?

pedestal uses RawHTTP2ServerConnectionFactory which doesn't work for me. Changing to HTTP2ServerConnectionFactory solves the issue. So it can be solved either by changing the code in io.pedestal.jetty, or by adding a custom factory in the container options:

:container-options {:connection-factory-fns [(fn [{:keys [max-streams] :or {max-streams 128}} http-conf]
                                                              (doto (org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory. http-conf)
                                                                (.setMaxConcurrentStreams max-streams)
                                                                (.setConnectProtocolEnabled true)))]
it was changed here: https://github.com/pedestal/pedestal/commit/42e1510884ce3df31bb2cdfc2baabf619ddf562f what was the reason for moving to the raw version @hlship ?

I wish I could remember? This is potentially a bug that should be fixed.

Yes, when using the low level version we're supposed to implement a few methods otherwise nothing happens when receiving a new request. I'll submit an issue and the matching PR (I'll see if I can add a test). Are you interested in updated pedestal samples too ?

curl -k -vvv 
* Host localhost:8443 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:8443...
* Connected to localhost (::1) port 8443
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / X25519 / RSASSA-PSS
* ALPN: server accepted h2
* Server certificate:
[REDACTED]
* using HTTP/2
* [HTTP/2] [1] OPENED stream for 
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: localhost:8443]
* [HTTP/2] [1] [:path: /api/server-application-status]
* [HTTP/2] [1] [user-agent: curl/8.5.0]
* [HTTP/2] [1] [accept: */*]
> GET /api/server-application-status HTTP/2
> Host: localhost:8443
> User-Agent: curl/8.5.0
> Accept: */*
> 
-------------- this hangs for ~20s ---------------
* HTTP/2 stream 1 was not closed cleanly: CANCEL (err 8)
* Connection #0 to host localhost left intact
curl: (92) HTTP/2 stream 1 was not closed cleanly: CANCEL (err 8)

The handler does not get called