Skip to content

refactor: Narrow message metadata API - #937

Merged
paleolimbot merged 2 commits into
apache:mainfrom
rustyconover:refactor/ipc-message-metadata-api
Sep 10, 2026
Merged

refactor: Narrow message metadata API#937
paleolimbot merged 2 commits into
apache:mainfrom
rustyconover:refactor/ipc-message-metadata-api

Conversation

@rustyconover

Copy link
Copy Markdown
Contributor

Follow-up to #924.

This removes ArrowIpcDecoderGetMessageMetadataValue() before the API ships in a release. Callers that need one key can use ArrowMetadataGetValue() with the packed metadata returned by ArrowIpcDecoderGetMessageMetadata(); callers that need zero-copy iteration can continue using ArrowIpcDecoderVisitMessageMetadata().

It also scopes the visitor callback type as ArrowIpcMessageMetadataVisitFunction and replaces the hand-generated keyless KeyValue FlatBuffer test fixture with a flatcc-built message.

Tests:

  • IPC-enabled CMake build
  • ctest: 365 tests passed (16 codec-dependent tests skipped)
  • git diff --check
  • clang-format on changed lines

…latcc

Address review feedback on the Message.custom_metadata support:

- Remove ArrowIpcDecoderGetMessageMetadataValue(). Get and Visit already
  cover the same ground, and every public function is permanent surface;
  callers who want one key use ArrowMetadataGetValue() on the buffer from
  ArrowIpcDecoderGetMessageMetadata(). This also removes the
  _NANOARROW_IPC_VISIT_STOP sentinel, which was not an errno and existed
  only to unwind that lookup.

- Rename ArrowIpcMetadataVisitFunction to
  ArrowIpcMessageMetadataVisitFunction, scoping the name to the one
  public entry point that accepts it.

- Build the keyless-KeyValue message in NanoarrowIpcDecodeMetadataWithoutKey
  with flatcc rather than embedding a hand-generated flatbuffer blob, so
  the test documents itself and survives a flatcc regeneration. Verified
  that it still segfaults when the strlen() it guards against is restored.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KYFwnKHTw7dhiJeDxy7APV
@codecov-commenter

codecov-commenter commented Sep 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 79.47%. Comparing base (6657945) to head (cd327f5).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #937      +/-   ##
==========================================
- Coverage   79.49%   79.47%   -0.03%     
==========================================
  Files         106      106              
  Lines       16564    16547      -17     
  Branches     1986     1982       -4     
==========================================
- Hits        13167    13150      -17     
  Misses       2164     2164              
  Partials     1233     1233              

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@rustyconover

Copy link
Copy Markdown
Contributor Author

Fixed the bundled-build failure in cd327f5. The new test included the generated FlatBuffers header through the source include root, which is intentionally absent when NANOARROW_BUNDLE=ON. The header now uses a same-directory include, preserving the bundled include-path check while keeping the flatcc-built fixture. Reproduced locally with NANOARROW_BUNDLE=ON and NANOARROW_IPC=ON: build succeeded and all 365 tests passed (16 codec-dependent tests skipped).

@paleolimbot paleolimbot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't particularly mind any of this, but I also didn't mind the hard-coded fixture or the special-cased ArrowIpcDecoderGetMessageMetadataValue() (I don't spend much time with message-level metadata but presumably this would be a reasonably common pattern, like fetching a geo key or something?). Is there a specific motivation for removing it?

@rustyconover

Copy link
Copy Markdown
Contributor Author

It was a commit I had in my tree and I think I forgot to push it as a cleanup.

@paleolimbot paleolimbot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works for me! We can always add the zero copy single key accessor later.

@paleolimbot paleolimbot changed the title refactor(ipc): Narrow message metadata API refactor: Narrow message metadata API Sep 10, 2026
@paleolimbot
paleolimbot merged commit e675fc7 into apache:main Sep 10, 2026
43 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.

3 participants