Releases: cloudflare/pingora
Releases · cloudflare/pingora
Pingora 0.6.0
0.6.0 - 2025-08-15
Highlights
- This release bumps the minimum h2 crate dependency to guard against the MadeYouReset H2 attack
🚀 Features
- Log runtime names during Server shutdown
- Enabling tracking the execution phase of a server
- Allow using in-memory compression dicts
- Make H2Options configurable at HttpServer, HttpProxy
Also adds HttpServerOptions to the HttpServer implementation, and
updates the HttpEchoApp to use HttpServer for easier adhoc testing.
🐛 Bug Fixes
- Fix: read body without discard
Everything Else
- Try loading each LRU shard individually and warn on errors
- Update LRU save to disk to be atomic
- Allow cache to spawn_async_purge
- Pass hit handler in hit filter
- Cache hit filter can mutate cache, allow resetting cache lock
- Persist keepalive_timeout between requests on same stream
- Properly check for H2 io ReadError retry types
- Add cache lock wait timeout for readers
- Fix CacheLock status timeout conditions
- Handle close on partial chunk head
- Allow optional to reset session timeouts
- Clippy fixes for 1.87, add 1.87 to GitHub CI
- Run
range_{header,body}_filterafter disabling cache - Convert
InterpretCacheControlmembers toDuration - Disable downstream ranging on max file size
- Allow explicit infinite keepalive timeout to be respected
Note that a necessary follow up is to refactor the infinite keepalive
timeout to only apply to first read between requests on reused conns. - Add method to disable keepalive if downstream is unfinished
- Discard extra upstream body and disable keepalive
- Explicitly disable keepalive on upstream connection when excess body
(content-length) is detected. - Add brief sleep to shutdown signal tests to avoid flake
- Allow override of cache lock timeouts
- Allow arbitrary bytes in CacheKey instead of just Strings
- Corrects out-of-order data return after multiple peek calls with different buffer sizes.
- Mark previously too large chunked assets as cacheable
- Boring/OpenSSL load cert chain from connector options
- Add initial support for multipart range requests
- Adds a callback to HttpHealthCheck for collecting detailed backend summary information
- Multipart range filter state fixes
Docs
- Explanation of request_body_filter phase
Pingora 0.5.0
0.5.0 - 2025-05-09
🚀 Features
- Add tweak_new_upstream_tcp_connection hook to invoke logic on new upstream TCP sockets prior to connection
- Add ability to configure max retries for upstream proxy failures
- Allow tcp user timeout to be configurable
- Add peer address to downstream handshake error logs
- Allow proxy to set stream level downstream read timeout
- Improve support for sending custom response headers and bodies for error messages
- Allow configuring multiple listener tasks per endpoint
- Add get_stale and get_stale_while_update for memory-cache
🐛 Bug Fixes
- Fix deadloop if proxy_handle_upstream exits earlier than proxy_handle_downstream
- Check on h2 stream end if error occurred for forwarding HTTP tasks
- Check for content-length underflow on end of stream h2 header
- Correctly send empty h2 data frames prior to capacity polling
- Signal that the response is done when body write finishes to avoid h1 downstream/h2 upstream errors
- Ignore h2 pipe error when finishing an H2 upstream
- Add finish_request_body() for HTTP healthchecks so that H2 healthchecks succeed
- Fix Windows compile errors by updating
impl<T> UniqueIDto use correct return type - Fixed compilation errors on Windows
- Poll for H2 capacity before sending H2 body to propagate backpressure
- Fix for write_error_response for http2 downstreams to set EOS
- Always drain v1 request body before session reuse
- Fixes HTTP1 client reads to properly timeout on initial read
- Fixes issue where if TLS client never sends any bytes, hangs forever
Everything Else
- Add builder api for pingora listeners
- Better handling for h1 requests that contain both transfer-encoding and content-length
- Allow setting raw path in request to support non-UTF8 use cases
- Allow reusing session on errors prior to proxy upstream
- Avoid allocating large buffer in the accept() loop
- Ensure HTTP/1.1 when forcing chunked encoding
- Reject if the HTTP header contains duplicated Content-Length values
- proxy_upstream_filter tries to reuse downstream by default
- Allow building server that avoids std::process::exit during shutdown
- Update Sentry crate to 0.36
- Update the bounds on
MemoryCachemethods to accept broader key types - Flush already received data if upstream write errors
- Allow modules to receive HttpTask::Done, flush response compression on receiving Done task
- API signature changes as part of experimental proxy cache support
- Note MSRV was effectively bumped to 1.82 from 1.72 due to a dependency update, though older compilers may still be able to build by pinning dependencies, e.g.
cargo update -p backtrace --precise 0.3.74.
Pingora 0.4.0
0.4.0 - 2024-11-01
🚀 Features
- Add preliminary rustls support
- Add experimental support for windows
- Add the option to use no TLS implementation
- Add support for gRPC-web module to bridge gRPC-web client requests to gRPC server requests
- Add the support for h2c and http1 to coexist
- Add the support for custom L4 connector
- Support opaque extension field in Backend
- Add the ability to ignore informational responses when proxying downstream
- Add un-gzip support and allow decompress by algorithm
- Add the ability to observe backend health status
- Add the support for passing sentry release
- Add the support for binding to local port ranges
- Support retrieving rx timestamp for TcpStream
🐛 Bug Fixes
- Handle bare IPv6 address in raw connect Host
- Set proper response headers when compression is enabled
- Check the current advertised h2 max streams
- Other bug fixes and improvements
⚙️ Changes and Miscellaneous Tasks
- Make sentry an optional feature
- Make timeouts Sync
- Retry all h2 connection when encountering graceful shutdown
- Make l4 module pub to expose Connect
- Auto snake case set-cookie header when downgrade to from h2 to http1.1
- shutdown h2 connection gracefully with GOAWAYs
- Other API signature updates
Full Changelog: 0.3.0...0.4.0
Pingora 0.3.0
0.3.0 - 2024-07-12
🚀 Features
- Add support for HTTP modules. This feature allows users to import modules written by 3rd parties.
- Add
request_body_filter. Now request body can be inspected and modified. - Add H2c support.
- Add TCP fast open support.
- Add support for server side TCP keep-alive.
- Add support to get TCP_INFO.
- Add support to set DSCP.
- Add
or_err()/or_err_withAPI to convertOptionstopingora::Error. - Add
or_fail()API to convertimpl std::error::Errortopingora::Error. - Add the API to track socket read and write pending time.
- Compression: allow setting level per algorithm.
🐛 Bug Fixes
- Fixed a panic when using multiple H2 streams in the same H2 connection to upstreams.
- Pingora now respects the
Connectionheader it sends to upstream. - Accept-Ranges header is now removed when response is compressed.
- Fix ipv6_only socket flag.
- A new H2 connection is opened now if the existing connection returns GOAWAY with graceful shutdown error.
- Fix a FD mismatch error when 0.0.0.0 is used as the upstream IP
⚙️ Changes and Miscellaneous Tasks
- Dependency: replace
structoptwithclap - Rework the API of HTTP modules
- Optimize remove_header() API call
- UDS parsing now requires the path to have
unix:prefix. The support for the path without prefix is deprecated and will be removed on the next release. - Other minor API changes
Pingora 0.1.1
0.1.1 - 2024-04-05
🚀 Features
Server::newnow acceptsInto<Option<T>>- Implemented client
HttpSession::get_keepalive_valuesfor Keep-Alive parsing - Expose
ListenFdsandFdsto fix a voldemort types issue - Expose config options in
ServerConf, provide newServerconstructor upstream_response_filternow runs on upstream 304 responses during cache revalidation- Added
server_addrandclient_addrAPIs toSession - Allow body modification in
response_body_filter - Allow configuring grace period and graceful shutdown timeout
- Added TinyUFO sharded skip list storage option
🐛 Bug Fixes
- Fixed build failures with the
boringsslfeature - Fixed compile warnings with nightly Rust
- Fixed an issue where Upgrade request bodies might not be handled correctly
- Fix compilation to only include openssl or boringssl rather than both
- Fix OS read errors so they are reported as
ReadErrorrather thanReadTimeoutwhen reading http/1.1 response headers
⚙️ Miscellaneous Tasks
- Performance improvements in
pingora-ketama - Added more TinyUFO benchmarks
- Added tests for
pingora-cachepurge - Limit buffer size for
InvalidHTTPHeadererror logs - Example code: improvements in pingora client, new LB cluster example
- Typo fixes and clarifications across comments and docs
Pingora 0.1.0
Highlights
- First Public Release of Pingora 🎉