Skip to content

[#22] Bump iceoryx2 submodule to v0.9.1#23

Draft
patdhlk wants to merge 5 commits into
eclipse-iceoryx:mainfrom
patdhlk:csharp-iox2-22-bump-iceoryx2-v0.9.1
Draft

[#22] Bump iceoryx2 submodule to v0.9.1#23
patdhlk wants to merge 5 commits into
eclipse-iceoryx:mainfrom
patdhlk:csharp-iox2-22-bump-iceoryx2-v0.9.1

Conversation

@patdhlk

@patdhlk patdhlk commented May 27, 2026

Copy link
Copy Markdown
Contributor

Notes for Reviewer

Bumps the bundled iceoryx2 native library from v0.8.1 to v0.9.1, which crosses both v0.9.0 and v0.9.1 upstream releases (see #22 for the full breakage survey). On the C# side this turns out to be a much smaller patch than #22 anticipated, because most of v0.9.0's API churn doesn't surface on our current P/Invoke surface yet.

What does surface and is fixed in this PR:

  • One constant rename. IOX2_SERVICE_ID_LENGTH -> IOX2_SERVICE_HASH_LENGTH (value still 64), with callers in Node.cs and Iox2NativeMethods.cs updated together.
  • One internal struct rename. iox2_request_storage_t / iox2_request_t -> iox2_active_request_storage_t / iox2_active_request_t, matching v0.9.0's split of the server-side handle from the client-side request-mut. Internal-only — no public C# API impact.
  • Eight storage-struct ABI size updates, including a couple where the alignment also moved from 8 to 16 (client/server builder). See the second commit for the per-struct table.
  • Tripwire expansion. NativeStructSizesTests previously mirrored just 2 of the 27 storage-struct sizes (the largest ones). I expanded it to all 27 — six of the size drifts in this PR would have slipped past the previous tripwire entirely. Same intentional-duplication convention as before (each constant duplicates the StructLayout(Size = N) attribute; sharing a single const between the two sides would erase the tripwire).

What does not surface on the current binding and was therefore unchanged:

  • NodeId -> UniqueNodeId (no iox2_node_id_* usage in our P/Invoke surface)
  • UnableToDeliverStrategy -> BackpressureStrategy (no QoS enum usage)
  • DegradationCallback -> DegradationHandler (no degradation wiring)
  • DegradationAction::Fail -> DegradeAndFail
  • Node::remove_stale_resources -> try_remove_stale_resources
  • Config::global.service.creation_timeout -> node.creation_timeout
  • iceoryx2_loggers -> iceoryx2_bb_loggers (link-time only; the stale --features iceoryx2-loggers/file doc comment in Iox2NativeMethods.cs is corrected)
  • libc_platform feature removal (build-flag only)

If/when the request/response or degradation surfaces get wired into C#, the corresponding renames will become required at that point.

Test summary

  • Full xUnit suite passes locally on net8.0 / net9.0 / net10.0 (53 tests each, including the 27 new size tripwires).
  • All 18 example projects build clean.
  • The two upstream bugfixes most relevant to this binding (iceoryx2#1650 concurrent node creation, iceoryx2#1681 cleanup_dead_nodes_on_open with send_dead_node_signal) complement the binding-side concurrency hardening that landed in Csharp iox2 12 ffi testing #20.

Pre-Review Checklist for the PR Author

  • Add sensible notes for the reviewer
  • PR title is short, expressive and meaningful
  • Consider switching the PR to a draft (Convert to draft)
    • as draft PR, the CI will be skipped for pushes
  • Relevant issues are linked in the References section
  • Branch follows the naming format (csharp-iox2-123-short-description)
  • Commits messages are according to this guideline
    • Commit messages have the issue ID ([#123] Add feature description)
  • Tests have been added/updated for new functionality
  • XML documentation comments added to public APIs (no public API changes in this PR)
  • Changelog updated in the unreleased section including API breaking changes
  • Assign PR to reviewer
  • All checks have passed

PR Reviewer Reminders

  • Commits are properly organized and messages are according to the guideline
  • Unit tests have been written for new behavior
  • Public API is documented with XML comments
  • PR title describes the changes
  • Code follows C# conventions (PascalCase for public APIs)
    • dotnet format has been exectued before submitting

References

Closes #22
Relates to #20 (FFI testing infrastructure that this PR's expanded tripwires extend)
Relates to #21 (cbindgen-driven generation that would obsolete this PR's manual size updates)

patdhlk added 5 commits May 27, 2026 17:16
Crosses v0.9.0 (2026-05-18) and v0.9.1 (2026-05-27). Picks up upstream
bugfixes for concurrent node creation, docker-container alive
detection, write-only shared memory cleanup with root, and the
`cleanup_dead_nodes_on_open` / `send_dead_node_signal` interaction;
plus the new `AdaptiveWaitBehavior`.

The v0.9.0 API breakage that surfaces in this binding is a single
constant rename (`IOX2_SERVICE_ID_LENGTH` -> `IOX2_SERVICE_HASH_LENGTH`)
and a handful of internal storage-struct size changes; both addressed
in the follow-up commits on this branch. The remaining v0.9.0 renames
listed in the issue (UnableToDeliverStrategy, DegradationCallback,
NodeId, stale-resources cleanup, config field rename, loggers crate
rename, libc_platform feature) do not appear on the current P/Invoke
surface and require no binding-side change.
…ename

Updates the C# P/Invoke surface to match the regenerated cbindgen
header for iceoryx2 v0.9.1.

Constant rename (v0.9.0 ServiceId -> ServiceHash):

  IOX2_SERVICE_ID_LENGTH -> IOX2_SERVICE_HASH_LENGTH  (value unchanged at 64)

Struct rename (v0.9.0 named the server-side request handle separately
from the client-side request-mut handle):

  iox2_request_storage_t      -> iox2_active_request_storage_t
  iox2_request_t              -> iox2_active_request_t

Storage size updates (uint8_t internal[N]):

  iox2_port_factory_publisher_builder_storage_t  128 -> 208
  iox2_port_factory_client_builder_storage_t      24 -> 256   (also Pack 8 -> 16)
  iox2_port_factory_server_builder_storage_t      24 -> 256   (also Pack 8 -> 16)
  iox2_server_storage_t                         1248 -> 248
  iox2_request_mut_storage_t                      64 -> 80
  iox2_active_request_storage_t                   96 -> 128
  iox2_response_mut_storage_t                     64 -> 88
  iox2_pending_response_storage_t                 32 -> 88

Also corrects a stale doc comment: the upstream loggers crate was
renamed from `iceoryx2-loggers` to `iceoryx2-bb-loggers` in v0.9.0,
so the `--features iceoryx2-loggers/file` hint for rebuilding with
file-logger support no longer matches the crate's name.
…to 27 storage structs

Mirrors every uint8_t internal[N] storage-struct size from the
cbindgen header, not just the two largest ones. The v0.9.1 bump
silently drifted six other sizes (publisher/client/server builder,
server, request_mut, active_request, response_mut, pending_response)
that the previous two-row tripwire would not have caught.

Same double-entry bookkeeping convention as before: each constant
intentionally duplicates the StructLayout(Size = N) attribute in
Iox2NativeMethods.cs so a future maintainer must touch both files.
…dotnet format)

CI's `dotnet format --verify-no-changes` step flagged the file: the
project's .editorconfig sets `insert_final_newline = false`.
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.

Update iceoryx2 submodule from v0.8.1 to v0.9.1

1 participant