Skip to content

Commit 37afb26

Browse files
committed
Promote cache completion into 1.2
1 parent e9ce174 commit 37afb26

2 files changed

Lines changed: 40 additions & 7 deletions

File tree

docs/opentelemetry-tracing.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ Fluxheim and its upstream services.
2323
- Keep OpenTelemetry code out of default builds.
2424
- Use W3C Trace Context propagation.
2525
- Correlate access logs, security events, and traces through a trace ID.
26+
- Pair new operational observability with Prometheus metrics where practical:
27+
metrics provide aggregate service health, while OpenTelemetry explains the
28+
request path behind those aggregate signals.
2629
- Keep tracing overhead bounded through sampling and background export.
2730
- Avoid storing secrets, cookies, authorization headers, raw request bodies, or
2831
high-cardinality labels in spans.
@@ -59,6 +62,8 @@ Planned spans:
5962
- `fluxheim.auth_request`: future external authorization probe;
6063
- `fluxheim.cache_lookup`: memory/disk cache lookup and hit/miss decision;
6164
- `fluxheim.cache_store`: cache admission and write;
65+
- `fluxheim.cache_purge`: admin-triggered cache invalidation by scope, prefix,
66+
wildcard, tag, or future soft-purge operation;
6267
- `fluxheim.upstream_select`: load-balancer selection;
6368
- `fluxheim.upstream_connect`: TCP/TLS connect and handshake;
6469
- `fluxheim.upstream_response`: upstream first-byte and response metadata;

docs/versioning-plan.md

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -312,9 +312,11 @@ Exit criteria:
312312
- Release notes clearly state whether certificate reload is automatic,
313313
restart-based, or deploy-hook based in `1.1.0`.
314314

315-
### 1.2 - Operations Pack
315+
### 1.2 - Operations And Cache Completion Pack
316316

317-
Goal: add safe operational visibility and controlled reload tooling.
317+
Goal: add safe operational visibility, controlled reload tooling, and finish
318+
the production cache platform already started during the 1.2 gateway migration
319+
work.
318320

319321
Stable scope:
320322

@@ -338,6 +340,11 @@ Stable scope:
338340
- document container secret mounts for EAB files without relabel suffixes
339341
when the host tree is already labeled for container access.
340342
- Prometheus metrics baseline on loopback by default.
343+
- Observability changes should be designed as paired surfaces where practical:
344+
Prometheus metrics for aggregate dashboards and OpenTelemetry
345+
traces/attributes/events for request-path diagnosis. Cache observability in
346+
particular should expose the same low-cardinality vhost, route, tier, status,
347+
and reason concepts across admin JSON, Prometheus, and OpenTelemetry.
341348
- Proxy response buffering and streaming/backpressure controls for production
342349
gateway migrations, including configurable response buffer count/size
343350
equivalents, bounded memory budgets per connection, safe streaming behavior
@@ -348,6 +355,20 @@ Stable scope:
348355
- Route-scoped cache policies for selective production caches, such as
349356
repository avatar/assets paths, where only one proxy route should use a cache
350357
tier while the rest of the vhost remains uncached.
358+
- Cache completion work promoted into 1.2:
359+
- persistent cache index across process restarts;
360+
- background or incremental disk purge/cleanup for very large purge scopes;
361+
- cache warmer/preload command or admin workflow for release deploys;
362+
- surrogate-key/cache-tag purge for application-level invalidation;
363+
- soft purge, where objects are marked stale and refreshed instead of removed
364+
immediately;
365+
- hit-for-pass/pass-cache decisions for repeatedly uncacheable dynamic
366+
objects;
367+
- end-to-end proxy regressions for cache-hit `Age`, conditional, and range
368+
behavior;
369+
- cache observability through both Prometheus and OpenTelemetry, including
370+
per-vhost/per-route/tier hit, miss, stale, bypass, store, refusal, eviction,
371+
purge, and storage-pressure signals.
351372
- Production ACME companion operating mode:
352373
- Keep the `1.1` in-process ACME background worker for simple single-binary
353374
installs.
@@ -383,6 +404,8 @@ Exit criteria:
383404
- Snapshot and rollback tests pass.
384405
- Logs redact secrets by default.
385406
- Metrics labels are cardinality-safe.
407+
- Cache metrics and OpenTelemetry attributes are cardinality-safe and never use
408+
raw path, query, cookie, authorization, or cache-key values by default.
386409
- ACME CLI output is actionable for partial-success production runs and does
387410
not require operators to infer which target failed from issuer-level errors.
388411
- Container migration docs include a validated HTTP-only first-issuance flow,
@@ -416,6 +439,10 @@ Exit criteria:
416439

417440
Goal: add controlled image/static caching.
418441

442+
Status: mostly promoted into the 1.2 Operations And Cache Completion Pack. Keep
443+
this section as the cache maturity checklist and move completed items upward as
444+
they land.
445+
419446
Current implementation status:
420447

421448
- Implemented in the current 1.2 development line:
@@ -462,12 +489,13 @@ Stable scope for declaring the cache pack complete:
462489

463490
Beta scope:
464491

465-
- Persistent cache index across process restarts.
466492
- Partial streaming admission.
467-
- Background disk purger or incremental cleanup worker for very large purge
468-
scopes.
469-
- End-to-end cache-hit regressions for Pingora-provided `Age`, conditional, and
470-
range behavior under the Fluxheim proxy path.
493+
- Distributed cache metadata or peer-fill support, if production deployments
494+
need multi-node cache coherence.
495+
- Cache import/export/debug tooling for inspecting individual cached objects,
496+
metadata, TTL, headers, and purge-index entries.
497+
- Programmable cache policy hooks remain a later design problem; the default
498+
cache model should stay declarative and safe.
471499

472500
Exit criteria:
473501

0 commit comments

Comments
 (0)