Skip to content

Metababel 2.0.0 lttng 2.16 - #123

Merged
TApplencourt merged 7 commits into
mainfrom
metababel-2.0.0-lttng-2.16
Oct 2, 2026
Merged

TApplencourt merged 7 commits into
mainfrom
metababel-2.0.0-lttng-2.16

Conversation

@TApplencourt

Copy link
Copy Markdown
Collaborator

No description provided.

TApplencourt and others added 6 commits September 21, 2026 21:24
… stack

THAPI records raw bytes as lttng-ust 2.16 BLOB fields from 0.0.17 on. Before
that it traced them as text and needed both halves of a work-around to read
them back: lttng-ust's 55cca69.diff, which wrote an array or sequence of text
in full rather than stopping at the first NUL, and babeltrace2's null-character
patch, which let the reader run past that NUL.

Both patches stay, for the builds that want them.

  - ruby-metababel 2.0.0, which generates the BLOB field classes and MIP-1
    field locations THAPI needs.
  - lttng-ust and lttng-tools 2.16.0.
  - 55cca69.diff capped at 2.15, the last lttng-ust without blobs.
  - babeltrace2's null-character patch becomes the +text-as-bytes variant
    rather than a version range. Which one a build wants depends on the THAPI
    being built, not on the babeltrace release: 2.1.2 serves both, and a
    version cap would have forced older THAPI off it for no reason. On a
    blob-era THAPI the patch is not merely unnecessary but wrong -- it makes a
    genuine ctf_string read past its terminator, and THAPI still traces real
    char text.
  - thapi@:0.0.16 is held to lttng-ust/lttng-tools @:2.15 and asks for
    babeltrace2 +text-as-bytes; devel and master take a stock 2.16 stack.

Archive mode follows the same split. lttng-tools gains a 2.16.0-archive
version, the ANL branch carrying the pause/resume commands rebased onto 2.16,
alongside the 2.14.0-archive one that released versions keep. babeltrace2
already has 2.1.2-archive; that branch now also carries the fix for the crash
that made the archive component unusable against a live session.

+archive is on by default from 0.0.17: reading archives on the fly is what the
pause/resume back-pressure loop exists for, so devel and master get it unless
built with ~archive. Released versions keep it opt-in, and their 2.14-era
branches.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The published gem is 0.1.5, from March 2025. BLOB field support and the
MIP-1 field locations landed in July 2026 and have not been released, so a
THAPI that records raw bytes as blobs cannot read its own traces with any
released version: the pretty-printer raises "unsupported field class type"
on the first blob field it meets.

Add a version built from the branch, as babeltrace2 itself carries its
-archive versions, and have thapi@0.0.17: depend on it. Released THAPI is
untouched and keeps the gem.

Drop both once a release carries those commits.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Concretization silently reused the installed pre-BLOB stack. Each of these is
a version floor that was missing or too low, so spack was free to satisfy a
blob-era THAPI with dependencies that cannot build it:

- lttng-ust had only an upper bound (@:2.15 for the pre-BLOB releases) and no
  floor for the blob era, so an installed 2.14 was reused. lttng-tools was
  unaffected only because it already carried an explicit 2.16.0-archive lower
  bound.

- ruby-metababel asked for @1.1.4:, a floor the old version already satisfies.
  BLOB codegen and the MIP-1 field locations it emits are 2.0.0; older
  metababel dies on the generated yaml with `unknown keyword:
  :length_field_location`.

- babeltrace2 was constrained only under +archive, so a ~archive blob build
  had no floor at all. The bt_field_class_blob_* API is 2.1.

- lttng-tools gained 2.16 versions without a matching lttng-ust pin. 2.16's
  configure asks for `lttng-ust >= 2.16 lttng-ust < 2.17` and stops there, so
  without the pin spack reuses 2.14 and the build dies in configure.

Spack also orders `master` and `develop` as infinity versions -- both compare
greater than any number -- so `@0.0.17:` silently caught `master` too, and
master is still 0.0.16 code that would have been handed a stack it cannot
build against. The two eras are now named once at module scope, PRE_BLOB and
BLOB, with `99` capping the numeric side so develop is the only infinity
version the blob era admits. Move `master` from PRE_BLOB to BLOB when 0.0.17
is released.
thapi@0.0.12 failed to build: metababel died with `unknown keyword:
length_field_path`. metababel 2.0.0 is a breaking change -- a dynamic length is
named by a structured length_field_location now -- and the floors in this
recipe are open-ended (`@1.1.2:`), so the solver handed 2.0.0 to a THAPI whose
models still emit the old key. Cap the pre-blob era at `@:1`.

Two more constraints named the pre-blob era by a literal range that stops at
0.0.16, and spack orders `master` as an infinity version greater than any
number, so each silently excluded it:

  - lttng-ust/lttng-tools `@:2.15` applied `when="@0.0.8:0.0.16"`, so master
    concretized against an unpatched 2.16 rather than the 2.15 stack its code
    needs. master is v0.0.16 today.
  - the `archive` variant was declared `when="@0.0.13:0.0.16"`, so +archive was
    an unknown variant on master and `thapi@master+archive` would not
    concretize at all. Pre-existing; no CI job pairs master with +archive.

These keep a lower bound, so they cannot reuse PRE_BLOB directly -- spack
rejects two version constraints on one spec. They get hand-intersected ranges
that keep the `master` PRE_BLOB names.

Verified by concretizing the CI matrix plus variants against this repo: 0.0.12
picks metababel 1.1.4 (2.0.0 before this change), master drops to lttng 2.14.0,
master+archive concretizes, and develop still takes metababel 2.0.0 with the
2.16 stack. The codegen failure was reproduced directly against the installed
2.0.0 gem, which accepts length_field_location and raises on
length_field_path.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@TApplencourt
TApplencourt force-pushed the metababel-2.0.0-lttng-2.16 branch from d4b21e3 to 78d2388 Compare October 1, 2026 23:28
@TApplencourt
TApplencourt merged commit ceac419 into main Oct 2, 2026
36 of 52 checks passed
@TApplencourt
TApplencourt deleted the metababel-2.0.0-lttng-2.16 branch October 2, 2026 16:37
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