Skip to content

Commit f0376e2

Browse files
committed
docs: add issue file for re-enabling caddy http3
Refs: #31
1 parent d86668d commit f0376e2

1 file changed

Lines changed: 93 additions & 0 deletions

File tree

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# Re-enable Caddy HTTP/3 and Document ISSUE-29 Rationale
2+
3+
**Issue**: [#31](https://github.com/torrust/torrust-tracker-demo/issues/31)
4+
**Related**:
5+
[#29](https://github.com/torrust/torrust-tracker-demo/issues/29),
6+
[#30](https://github.com/torrust/torrust-tracker-demo/issues/30),
7+
[ISSUE-29-research-high-cpu-load-after-udp-fix.md](ISSUE-29-research-high-cpu-load-after-udp-fix.md)
8+
9+
## Overview
10+
11+
ISSUE-29 removed Caddy UDP port mapping `443:443/udp` (HTTP/3 over QUIC) during a controlled
12+
production experiment. The observations showed no measurable CPU improvement after disabling
13+
HTTP/3, while service availability remained stable.
14+
15+
This follow-up issue proposes re-enabling HTTP/3 at the Caddy edge and documenting why this
16+
reversal is intentional. The goal is to restore HTTP/3 capability for present and future clients,
17+
while keeping a controlled rollback path if resource cost or reliability regresses.
18+
19+
This issue also clarifies the protocol boundary in the current architecture:
20+
21+
- Edge protocol (client -> Caddy) can include HTTP/3.
22+
- Backend protocol (Caddy -> tracker/grafana) remains reverse-proxy HTTP and does not require
23+
tracker native HTTP/3 support.
24+
25+
## Problem Statement
26+
27+
The current ISSUE-29 wording can be read as "HTTP/3 disabled for hygiene" even though the
28+
experiment outcome was only that disabling HTTP/3 did not fix CPU pressure.
29+
30+
Keeping HTTP/3 disabled by default may also block automatic support for clients that prefer
31+
or require HTTP/3 in the future. Since this demo already runs a Caddy edge proxy, re-enabling
32+
UDP 443 is a low-complexity way to restore HTTP/3 capability without changing backend services.
33+
34+
The change should therefore be treated as a product-capability decision with operational
35+
guardrails, not as a CPU-remediation tactic.
36+
37+
## Goals
38+
39+
1. Re-enable Caddy UDP 443 publish mapping for HTTP/3 at the edge.
40+
2. Keep backend application topology unchanged.
41+
3. Record explicitly that ISSUE-29 did not show CPU benefit from disabling HTTP/3.
42+
4. Document why re-enable is being done now (future compatibility/capability) and how rollback
43+
will be handled if needed.
44+
45+
## Proposed Change
46+
47+
1. Re-add `"443:443/udp"` in Caddy service ports in
48+
`server/opt/torrust/docker-compose.yml`.
49+
2. Apply the same change on live `/opt/torrust/docker-compose.yml` and recreate only Caddy.
50+
3. Observe immediate, T+1h, and T+next-day checkpoints with the same metrics used in ISSUE-29.
51+
52+
## Rollback Triggers
53+
54+
If any trigger is met after re-enable, revert by removing `"443:443/udp"` again and record
55+
the rollback in evidence:
56+
57+
1. Caddy CPU increases by more than 20% sustained for 24h vs pre-change baseline.
58+
2. Host load average increases by more than 15% sustained for 24h vs pre-change baseline.
59+
3. New external availability regression appears on tracked HTTP1 or UDP1 endpoints.
60+
61+
## Deliverables
62+
63+
- Compose change that re-enables Caddy UDP 443 publish mapping.
64+
- Evidence notes for post-change observations (immediate, T+1h, T+next-day).
65+
- Updated ISSUE-29 wording that clearly separates:
66+
- measured performance result,
67+
- capability/product decision,
68+
- rollback criteria and operational safeguards.
69+
70+
## Implementation Plan
71+
72+
- [ ] Re-add `"443:443/udp"` for Caddy in `server/opt/torrust/docker-compose.yml`.
73+
- [ ] Apply only that change on the live server and recreate only Caddy.
74+
- [ ] Validate Caddy health and confirm host UDP 443 listener exists after deploy.
75+
- [ ] Capture immediate post-change metrics: `mpstat`, `docker stats`, Prometheus HTTP1/UDP1
76+
rates, and `newtrackon.com/raw` sample.
77+
- [ ] Capture T+1h and T+next-day checkpoints with the same metrics.
78+
- [ ] Evaluate rollback triggers; if triggered, revert and record evidence.
79+
- [ ] Update ISSUE-29 text to explain why the earlier disablement is being reversed now.
80+
- [ ] Ensure ISSUE-29 states backend services do not need native HTTP/3 for edge HTTP/3 support.
81+
- [ ] Run `./scripts/lint.sh` and fix any markdown/cspell issues.
82+
83+
## Acceptance Criteria
84+
85+
- [ ] Caddy HTTP/3 edge capability is re-enabled via `443:443/udp` mapping.
86+
- [ ] Immediate, T+1h, and T+next-day evidence snapshots are recorded.
87+
- [ ] No rollback trigger is met during the observation window, or rollback is executed and
88+
documented if a trigger is met.
89+
- [ ] ISSUE-29 explicitly states that disabling HTTP/3 did not reduce CPU in prior observations.
90+
- [ ] ISSUE-29 explicitly states why HTTP/3 was re-enabled and under which conditions it may be
91+
disabled again.
92+
- [ ] Documentation clearly states edge HTTP/3 is independent from backend native HTTP/3 support.
93+
- [ ] All changed files pass `./scripts/lint.sh`.

0 commit comments

Comments
 (0)