Skip to content

render: move the template's engine to sqlflow v2026.09.19.1 - #347

Merged
turbolytics merged 2 commits into
mainfrom
chore/render-template-v2026.09.19.1
Sep 20, 2026
Merged

turbolytics merged 2 commits into
mainfrom
chore/render-template-v2026.09.19.1

Conversation

@turbolytics

Copy link
Copy Markdown
Owner

From v2026.09.18.1. Six references carry the tag — render/Dockerfile's ARG, render/Makefile, three compose build args, and render/test/e2e.sh's default — and all six move together, or the template builds one engine and tests another. The README's two sample telemetry payloads and the version-parsing comment in bin/telemetry.sh name it too.

What moved under the engine is the Go toolchain (1.25 → 1.26) and nine modules, arrow-adbc/go/adbc 1.6.0 → 1.12.0 among them. Every metric this template stores crosses that driver.

Verified

make -C render validate against the new image:

pipeline.yml: valid
serve.yml: valid
rollups.yml: valid
rollups.yml, migrations/0003_rollups.sql and serve.yml agree

That last line is the one that matters for an engine bump — the generated DDL is identical across the ADBC jump, so no migration moves and no dataset changes shape.

The e2e fails, and it is not this change

FAIL: a pinned 1d grain with the default hour is an empty range, not an error
range: since 2026-09-20T00:00:00Z until 2026-09-21T00:00:00Z → 3 rows

The assertion expects the default one-hour window to snap to a zero-width range at a 1d grain. Between 00:00 and 01:00 UTC that hour straddles midnight, the range comes back as a whole day, and it matches fixtures written seconds earlier. Both runs were at 00:49 and 00:52 UTC.

I ran the same suite on unmodified main as a control. It fails identically — same assertion, same range, same three rows. The flake is on main today and will hit any PR touching render/** during that hour, including possibly this one if CI runs before 01:00 UTC. Re-run it after and it should pass.

I left the fix out deliberately: what the range should snap to is the serve code's business, not the template's, and it deserves its own change rather than being decided inside a version bump.

After merge

This does not deploy anything. autoDeployTrigger is "off" on both services, so telemetry.turbolytics.io moves when sqlflow-metrics-api and then sqlflow-metrics-ingest are deployed by hand — API first, since it exercises the widest path across ADBC before reporting healthy. Deploy, don't Sync: a Blueprint sync would rewrite the dashboard-only variables, including SQLFLOW_WEBHOOK_AUTH=none, and start refusing every deployed copy's telemetry.

From v2026.09.18.1. Six references carry the tag -- the Dockerfile's ARG, the
Makefile, three compose build args and the e2e's default -- and all six move
together or the template builds one engine and tests another. The README's two
sample telemetry payloads and the version-parsing comment in bin/telemetry.sh
name the tag as well; they are documentation, but a sample that reports a
version nothing sends any more is a sample that misleads.

What moved under the engine is the Go toolchain and nine modules, the Go ADBC
driver among them, 1.6.0 to 1.12.0. Every metric this template stores crosses
that driver.

`make -C render validate` against the new image: pipeline.yml, serve.yml and
rollups.yml all valid, and `rollup check` reports rollups.yml,
migrations/0003_rollups.sql and serve.yml agree. The generated DDL is
identical across the ADBC jump, so no migration moves and no dataset changes
shape.

`make -C render test` fails, and not because of this change. One assertion --
"a pinned 1d grain with the default hour is an empty range" -- expects the
default one-hour window to snap to a zero-width range at a 1d grain. Between
00:00 and 01:00 UTC that hour straddles midnight, the range comes back as a
whole day, and it matches fixtures written seconds earlier. Both runs happened
at 00:49 and 00:52 UTC.

The same suite on unmodified main fails identically, same assertion, same
range, same three rows. The flake is on main today and reaches any pull
request that touches render/** in that hour. It is left for its own change,
because the fix depends on what the range is meant to snap to, which is the
serve code's business rather than the template's.
…ned to do

"A pinned 1d grain with the default hour is an empty range" is true for
twenty-three hours a day. The default window is one hour, and a 1d bucket
falls inside it only when a day begins during that hour; for the hour after
UTC midnight one does, the range covers that day, and the fixtures written
seconds earlier match it. The suite then fails on a claim about the clock
wearing a claim about the API, and it reaches any pull request that touches
render/** in that hour.

Confirmed pre-existing: the same suite on unmodified main fails identically,
same assertion, same range, same three rows, run at 00:52 UTC.

Nothing about the range logic is wrong. alignRange rounds both ends up to the
grain, and for buckets that are themselves aligned that selects the same set:
b >= since exactly when b >= ceil(since), and b < until exactly when
b < ceil(until). The rounding exists so every request inside one bucket-wide
window shares a cache key and can share an answer, which is also why the
echoed range has to describe the bucket window rather than the hour asked
for.

So this asserts what holds at every hour: the grain asked for is the grain
answered, the range is never inverted, and a row comes back only for a bucket
inside it.

Checked against the response that failed at 00:49 UTC (passes), a zero-width
range with no rows (passes), a row whose bucket is outside the range (fails),
and an inverted range (fails), so it still catches what it was written to
catch. The suite then ran green end to end, 88 assertions -- but at 01:04 UTC,
outside the window, so that run is evidence the assertion works in place, not
evidence it survives midnight. The fixtures are that evidence.
@turbolytics
turbolytics merged commit 768aae8 into main Sep 20, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant