envoyproxy / envoyproxy/envoy

HTTP/3 hot restart should be supported with eBPF

Open
#34,731 25 comments 1 reaction 0 assignees View on GitHub
area/hot_restart area/quic enhancement help wanted
Dominant language
C++
Stars
28.9k
Forks
5.6k
Avg merge
1d 20h
Merged PRs (30d)
437

Description

In #19454, software-level support was added for HTTP/3 during hot restart, in which packets are forwarded from parent instance to child instance for the duration of the hot restart handoff.

Ideally this soft support could be bypassed using eBPF filters to deliver packets to the right instance first time.

To achieve this it would be necessary to:

- [ ] have the [QUIC eBPF rule](https://github.com/envoyproxy/envoy/blob/main/source/extensions/quic/connection_id_generator/envoy_deterministic_connection_id_generator.cc#L56-L70) direct packets to the newer instance if they don't have an instance ID in the QUIC header.
- [ ] have the [QUIC ID generator](https://github.com/envoyproxy/envoy/blob/main/source/extensions/quic/connection_id_generator/envoy_deterministic_connection_id_generator.cc) include encoding an instance ID.
- [ ] have the [QUIC eBPF rule](https://github.com/envoyproxy/envoy/blob/main/source/extensions/quic/connection_id_generator/envoy_deterministic_connection_id_generator.cc#L56-L70) direct packets to the specified instance if they do have an instance ID.
- [ ] modify the [hot restart behavior](https://github.com/envoyproxy/envoy/blob/main/source/common/network/udp_listener_impl.cc#L46-L57) that causes the new instance to not listen until the parent is shut down, to listen immediately if there is eBPF support available. (Probably in [pause()](https://github.com/envoyproxy/envoy/blob/main/source/common/network/udp_listener_impl.h#L29))

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.