Goal: Verify on a device that the stack meets its resource and latency criteria, with dispersion reported.
Requirements: All success criteria
Dependencies: Unit 6
Files:
- Extend: the Unit 1 measurement harness
- Create: results under
docs/
Approach:
- Three conditions: control with no history plugin, sqhp plus QuestDB, and this provider. The harness already exists from Unit 1, and Units 3a, 3b and 5a have reported through it, so figures are comparable rather than improvised per unit.
- Configure all conditions to the same workload — same path set, same rate cap, self only — and report rows/s for each. Divergence beyond a stated tolerance invalidates the comparison rather than being absorbed by the criterion band. The earlier baseline recorded 111.7 against 84.4 rows/s under configurations declared identical and never explained it.
- Report dispersion. Per-window values or a standard deviation. The earlier baseline reported point estimates, and its own numbers show the noise floor is high enough to swallow a 0.15-point CPU delta — the sqhp condition measured lower disk writes than the no-history control.
- Keep steady state and transients separate. Steady-state RSS is the continuous cost; the roll's peak is a transient. Do not sum them. The query service is neither: it starts on the first history request and stays, at 92 MB idle rising to the high-water mark of the largest answer it has served, so it is a standing cost from the first query onwards. A playback session adds no process of its own — Unit 4c reads its windows through that same service — so what a session costs is what it moves that mark to.
- Test an aged tree, not a fresh one. The 16–37 ms spike figures came from a tree the size of a single roll — roughly one file per path, the cheapest possible case. At the chosen roll interval a 30-day single-path range touches far more files, and an all-paths query over the same range multiplies that by path count. Measure a long-range query against a tree holding a full retention window's file count.
- Measure end-to-end wall time from spawn to result, not in-engine query time.
- Note whether QuestDB's Parquet storage policy was active during the sqhp condition; if it was, the reference figures need re-measuring.
- This unit can fail. If the criteria are not met, that is a finding and a decision, not an adjustment of the bar.
Test scenarios:
- Integration: steady-state added RSS across plugin and writer is under 150 MB.
- Integration: total CPU across plugin, writer and amortised roll is under +2.3 points of one core at 70–130 rows/second.
- Integration: Signal K process disk writes stay within noise of the 12 KB/s control.
- Integration: a single-path range and a bucket aggregate return within sqhp's range against a fresh tree.
- Integration: a 30-day single-path range and a 7-day all-paths range against an aged tree return within a stated bound.
- Integration: the roll's transient peak and the query service's resident size — idle, after ordinary queries, and over a playback session of several minutes — are each recorded and each fit available memory with the full marine stack running.
- Integration: two playback clients and a dashboard together. The service answers one request at a time and refuses past eight queued, so this is queue depth, refusals and what the service holds — not a per-client process count.
- Integration: a v1 snapshot in both of its branches — of the present, which reads the sidecar and the hot store, and of an instant the tree has rolled past, which reads two date directories. Neither is measured anywhere yet.
- Edge case: a full day of continuous recording followed by a roll shows no unbounded growth in writer RSS.
- Edge case: a roll coinciding with a query, with a playback session running — the summed transient is measured, since nothing admission-controls the roll against the query service.
Verification:
- A results table across all three conditions with dispersion shown and rows/s stated for each.
- Each criterion marked met or not met against a measured number.
Goal: Verify on a device that the stack meets its resource and latency criteria, with dispersion reported.
Requirements: All success criteria
Dependencies: Unit 6
Files:
docs/Approach:
Test scenarios:
Verification: