Skip to content

test: native acceptance run for range-independent field binding (#914) - #938

Merged
xe-nvdk merged 1 commit into
mainfrom
range-schema-acceptance-914
Sep 21, 2026
Merged

xe-nvdk merged 1 commit into
mainfrom
range-schema-acceptance-914

Conversation

@xe-nvdk

@xe-nvdk xe-nvdk commented Sep 21, 2026

Copy link
Copy Markdown
Member

Summary

Ports the reproducer that came with the field report behind #914 to a native acceptance script, scripts/range_schema_acceptance.py, in the style of scripts/compaction_cycle_acceptance.py: no containers, loopback only, Python standard library only. It spawns the arc binary and drives the Line Protocol, query, schema and compaction APIs. docs/testing/range-schema-26.09.2.md documents the run, and the #914 release notes entry points at it.

Scenarios

  • A late field inside one day: twelve files on 2026-01-01, one carrying only stable, eleven adding late_only. The narrow hour binds late_only as a BIGINT NULL before and after daily compaction, with the compaction-enabling restart the report used, and every observation is identical across the compaction.
  • A field first written 59 days after the earlier day was compacted: January compacts while weeks_later exists nowhere (Binder Error), March introduces it and compacts as a separate candidate without rewriting the January output. January-only then binds it as a BIGINT NULL, the span groups to 0 of 12 and 12 of 12, COALESCE and try_cast behave, and SELECT * has the same columns over the span and over January alone.
  • A field that stops being written: the mirror case with retired_field.
  • Restarts: with query.stable_schema = false the narrow projections are Binder Errors again and January-only SELECT * loses the column, which is the 26.09.1 behavior and proves the assertions observe the feature. Restarting with the default reads the stored anchors back.

An unknown field must still fail to bind in every scenario.

Results

  • Build of main: passes, four planned process starts, zero unexpected exits.
  • 26.09.1 release binary: fails at the first narrow-range assertion (late_only absent from the early-range SELECT *).

Review notes

An independent pass over the script found five weak spots that are fixed here: the empty-range check goes through the pre-existing whole-measurement fallback (now labelled as such), NULLs are now checked with typeof, the disabled-feature control now also shows the SELECT * column set depends on the feature, daily_skip_file_age_check_days is set explicitly with a comment, and candidates are matched by measurement and partition path rather than by count.

Part of the 26.09.2 work on #914.

Port the reproducer that came with the field report against 26.09.1 to a
native acceptance script in the style of compaction_cycle_acceptance.py:
no containers, loopback only, standard library only. It spawns the arc
binary and drives the Line Protocol, query, schema and compaction APIs.

Scenarios: a late field inside one day (before and after daily
compaction, with the compaction-enabling restart the report used), a
field first written 59 days after the earlier day was compacted (March
compacts as a separate candidate without rewriting January), a field
that stops being written, and restarts. The restart phase turns
query.stable_schema off and requires the 26.09.1 Binder Errors back, so
the assertions are shown to observe the feature. Every NULL is checked
with typeof, an unknown field must still fail to bind, and SELECT * must
have the same columns over every range.

Passes on main with four planned process starts; the 26.09.1 release
binary fails at the first narrow-range assertion.
@xe-nvdk
xe-nvdk merged commit 88423dd into main Sep 21, 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