Skip to content

test: NetMQ upstream 4.0.4.1 bump (main base, do not merge)#4049

Draft
ipdae wants to merge 1 commit into
mainfrom
yang/test-netmq-upstream-bump
Draft

test: NetMQ upstream 4.0.4.1 bump (main base, do not merge)#4049
ipdae wants to merge 1 commit into
mainfrom
yang/test-netmq-upstream-bump

Conversation

@ipdae

@ipdae ipdae commented May 7, 2026

Copy link
Copy Markdown
Contributor

Summary

Draft / test-only — do not merge. This PR exists solely to trigger CI (check-build + CircleCI test suite) against the upstream NetMQ package and check whether `Libplanet.Net` compiles and passes its NetMQ-related tests.

Context

`Planetarium.NetMQ 4.0.0.261-planetarium` is a Planetarium fork last touched 2021-04-22. It is currently 124 commits behind `zeromq/netmq` master (4.0.4.1, 2026-04-30).

The fork's distinctive contributions — `ReceiveMultipartMessageAsync` and `AsyncReceiveExtensions` cancellation support — were merged back into upstream NetMQ. API signature comparison against upstream master confirms identical method signatures and bodies for the methods Libplanet.Net depends on.

Production observation on Heimdall mainnet (2026-05): heimdall validator-5 segfaults (Exit 139) every ~2h with stack:

```
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
at NetMQ.Core.Transports.StreamEngine.MechanismReady()
at NetMQ.Core.Transports.StreamEngine.ProcessHandshakeCommand(Msg& msg)
```

This NRE pattern is a known race-condition class in NetMQ's StreamEngine that has likely received fixes in upstream's 124 follow-up commits.

Change

One-line PackageReference swap in `src/Libplanet.Net/Libplanet.Net.csproj`:

```diff

```

No Libplanet code changes.

What CI proves

Check Validates
check-build (GH + CircleCI) dotnet pack succeeds → upstream NetMQ API surface compatible
CircleCI test runs Libplanet.Net.Tests/Transports/NetMQTransportTest, TransportTest pass against upstream
Benchmarks (CircleCI) No performance regression on transport hot paths

Companion branch

A parallel branch `yang/test-netmq-upstream-bump-552` performs the same change rebased on release tag 5.5.2 (the version NineChronicles.Headless currently consumes). If both CI runs are green, the swap is low-risk to adopt.

Out of scope

  • Actual merge / release of NetMQ bump — that's a follow-up after CI signal is reviewed.
  • Removing the Planetarium.NetMQ fork — depends on whether anyone still consumes it.

The fork (Planetarium.NetMQ 4.0.0.261-planetarium) hasn't received
upstream changes since 2021-04 — 124 commits behind zeromq/netmq master.

Production observation on Heimdall mainnet (2026-05): heimdall validator
crashes with Exit 139 due to NullReferenceException at
NetMQ.Core.Transports.StreamEngine.MechanismReady() during timeout
cleanup of a peer connection. Pattern repeats every ~2h, accumulating
NetMQ broadcast-timeout state on remote-headless and surfacing as
user-visible tx staging timeouts.

The fork's distinctive contributions (ReceiveMultipartMessageAsync +
cancellation support, AsyncReceiveExtensions improvements) have already
been merged into upstream 4.0.x — verified via API signature comparison.

This branch swaps the package reference to upstream NetMQ 4.0.4.1 so
CI (check-build + CircleCI test suite) can validate compilation, API
compatibility, and unit-test pass against the upstream library.

This is intentionally a minimal change — no Libplanet code modified —
to isolate the question of whether Libplanet.Net builds + passes its
NetMQ-related tests against the upstream package.

Not meant for merge until benchmarks-pr / NetMQTransportTest /
TransportTest results are reviewed.
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