|
8 | 8 |
|
9 | 9 | ## Current Tasks |
10 | 10 |
|
11 | | -### v1.20.0 Release |
12 | | - |
13 | | -Release branch and v1.20.0 tag exist. Core pillar work done. |
14 | | -- [x] Release-merge to release branch |
15 | | -- [ ] Verify crates.io publication succeeded |
16 | | -- [x] Docs consolidation (TRANSPORT.md, CORE-PILLARS.md) |
17 | | -- [x] Redis vs Kafka comparison table in TRANSPORT.md |
18 | | - |
19 | | -### Metrics Manifest (v1.22) |
20 | | - |
21 | | -- [x] **Metrics manifest infrastructure** — `MetricDescriptor`, `MetricRegistry`, `ManifestResponse` types |
22 | | - - Standards-aligned: OpenMetrics (type/description/unit), OTel Advisory (labels/buckets) |
23 | | - - Novel HyperI extensions: `group`, `use_cases`, `dashboard_hint` |
24 | | - - `MetricRegistry` (Arc<RwLock>) tightly coupled into `MetricsManager` |
25 | | - - Every `counter()`/`gauge()`/`histogram()` call auto-pushes descriptor |
26 | | - - New `_with_labels()` methods for declaring label keys and groups |
27 | | - - `set_build_info()`, `set_use_cases()`, `set_dashboard_hint()` enrichment |
28 | | -- [x] **`/metrics/manifest` endpoint** — JSON contract on both axum and raw server paths |
29 | | - - Correct path ordering (manifest checked before /metrics in raw server) |
30 | | - - Explicit Content-Type: application/json |
31 | | -- [x] **`DfeMetrics::register(&MetricsManager)` breaking change** — platform metrics tightly coupled |
32 | | - - All 24 dfe_* metrics auto-appear in manifest with correct labels and group="platform" |
33 | | -- [x] **dfe_groups updated** — all 8 groups use `_with_labels()` internally |
34 | | - - `AppMetrics::new()` calls `set_build_info()` automatically |
35 | | - - Label-based metrics push descriptors with correct key names |
36 | | - - Histogram buckets captured in manifest |
37 | | -- [x] **Downstream dfe-* projects updated** (committed, not pushed — waiting for parallelism remediation) |
38 | | - - dfe-loader, dfe-receiver, dfe-archiver, dfe-fetcher, dfe-transform-vector, dfe-transform-vrl |
39 | | - - Phase 3 (dfe-transform-wasm, dfe-transform-elastic, dfe-transform-splack) deferred |
40 | | -- [ ] **Phase 2 enrichment** — `set_use_cases()` / `set_dashboard_hint()` content (deferred to parallelism remediation) |
41 | | -- [ ] **Regenerate container + metrics contract artefacts** per project (deferred to push time) |
| 11 | +### Phase 2: Parallelism + Batching (all DFE projects) |
| 12 | + |
| 13 | +Common patterns needed in rustlib first: |
| 14 | +- [ ] `BatchAccumulator<T>` — bounded channel + drain-on-threshold for receiver batching |
| 15 | +- [ ] SIMD-optimised batch processing — sonic-rs batch parse, memchr for NDJSON splitting |
| 16 | +- [ ] Evaluate columnar batch layout — if SoA (struct-of-arrays) layout improves cache locality for batch transforms, adopt it. NOT necessarily Arrow — could be simple Vec<Field> columns. Profile before deciding. |
| 17 | +- [ ] Mutex audit enforcement — document/lint pattern for hot-path Mutex detection |
| 18 | + |
| 19 | +Per-project parallelism work: |
| 20 | +- [ ] dfe-archiver — per-destination writers (remove single Mutex), parallel compression |
| 21 | +- [ ] dfe-receiver — request batching (accumulate N bodies → batch validate+route → batch produce) |
| 22 | +- [ ] dfe-receiver — Splunk HEC / OTLP / gRPC parallel per-event processing via fan_out_async |
| 23 | +- [ ] dfe-fetcher — within-source parallel service fetching via fan_out_async |
| 24 | +- [ ] dfe-transform-vrl — parallel deserialisation (Phase 1 of pipeline, currently sequential) |
| 25 | +- [ ] Per-project: adversarial parallel tests, throughput benchmarks |
| 26 | + |
| 27 | +Phase 2 spec: `docs/superpowers/specs/2026-04-01-phase2-parallelism-batching.md` |
| 28 | + |
| 29 | +### Phase 3: Non-Integrated Transforms |
| 30 | + |
| 31 | +- [ ] dfe-transform-wasm — parallel WASM invocation per batch |
| 32 | +- [ ] dfe-transform-elastic — assess rustlib integration level, discuss |
| 33 | +- [ ] dfe-transform-splunk — assess rustlib integration level, discuss |
| 34 | + |
| 35 | +### Metrics Manifest Enrichment (deferred) |
| 36 | + |
| 37 | +- [ ] `set_use_cases()` / `set_dashboard_hint()` content per metric group |
| 38 | +- [ ] Regenerate container + metrics contract artefacts per project |
42 | 39 |
|
43 | 40 | ### Completed Previous Sessions |
44 | 41 |
|
@@ -101,9 +98,10 @@ Release branch and v1.20.0 tag exist. Core pillar work done. |
101 | 98 |
|
102 | 99 | ## Notes |
103 | 100 |
|
104 | | -- Use `CARGO_BUILD_JOBS=2` for all cargo commands |
105 | 101 | - Transport backends: Kafka, gRPC, Memory, File, Pipe, HTTP, Redis/Valkey |
106 | 102 | - Core pillars plan: `docs/superpowers/plans/2026-03-26-core-pillars.md` |
107 | 103 | - Two deployment modes: Kafka-mediated (persistence) vs direct gRPC (low latency) |
108 | 104 | - Routed transport is receiver/fetcher only — all other stages are 1:1 |
109 | | -- v1.20.0 released with breaking transport trait split (feat!: commit) |
| 105 | +- Common patterns in rustlib first — if all 6 DFE projects use the same pattern, implement in rustlib |
| 106 | +- DFE parallelisation playbook: `/projects/dfe-loader/docs/PARALLELISE-REMEDIATION.md` |
| 107 | +- Phase 2 spec: `docs/superpowers/specs/2026-04-01-phase2-parallelism-batching.md` |
0 commit comments