NanoMQ 0.25.5 is ready now! We continue to serve the community by providing swift feedback to feature requests and security issue reports. Fixing multiple minor security issues, adding a new batch_resend option for rapid local QoS msg resend, and a new nolocal param for bridging client.
Attention! From 0.25.5, we drop the official binary release of MIPS & ARMel arch due to the incompatibility between Github 24.04 runner & newer MsQuic dependencies. Have to stick with times.
AI generated release notes:
NanoMQ v0.25.5 is a feature-enhancement and maintenance release focusing on hot-reloading capabilities, observability, and underlying protocol stability in the NanoNNG transport layer.
Core Features & Enhancements
Lock-free Configuration Reloading: Introduced a lock-free, hazard-pointer reclamation mechanism for applying ACL-file changes via nanomq reload. Additionally, dynamic reloading for log levels is now fully supported.
QoS & Resend Architecture: Implemented a new batch_resend policy. The QoS ACK handling logic has been structurally improved by moving it from the transport layer directly into the protocol layer.
State Machine Consolidation: Refactored and consolidated the internal state machine within broker.c to streamline connection lifecycle management.
Protocol Support: Added support for overwriting the No Local flag.
Stability & Bug Fixes
MQTT over WebSocket (mqtt_ws): Fixed critical AIO (Asynchronous I/O) state issues. Resolved a bug where qsaio ack-send callbacks could trigger a double-finish on user tx AIO, and ensured recv/send AIO completes correctly upon cancellation to prevent pipe-reaping deadlocks.
Shared Subscriptions: Fixed a storage bug to ensure offline QoS messages for shared subscriptions are accurately routed to cached sessions.
Memory & Concurrency: Resolved SQLite QoS message memory leaks within the resend loop and patched multiple data races flagged by ThreadSanitizer (TSan).
Observability & Tooling
Enhanced Logging: Security and debugging logs are now much more granular. ACL deny logs now actively include the clientid, username, and target topic. Furthermore, publisher clientid and username are now appended to per-message debug lines.
CI/CD & Build: Repaired broken CI workflows caused by MSQUIC API changes and the GitHub deprecation of Ubuntu 20.04 runners. Updated default and CI configurations to explicitly set max_topic_alias.
Community Acknowledgements
Thanks to our new contributors @jayenashar and @ingwinlu for their valuable fixes and documentation additions. Expensive Fable5 token appreciated.
What's Changed in NanoMQ
- Apply ACL-file changes on
nanomq reload(lock-free, hazard-pointer reclamation) by @jayenashar in https://github.com/nanomq/nanomq/pull/2376 - Bump actions/cache from 5.0.2 to 6.1.0 by @dependabot[bot] in https://github.com/nanomq/nanomq/pull/2368
- Bump docker/setup-buildx-action from 4.0.0 to 4.2.0 by @dependabot[bot] in https://github.com/nanomq/nanomq/pull/2370
- docs: HTTP acl_req authorizes PUBLISH and SUBSCRIBE by @ingwinlu in https://github.com/nanomq/nanomq/pull/2354
- FIX [cli] Sleep 500ms before pub cli exit & Fixed a compile warning missing header file. by @wanghaEMQ in https://github.com/nanomq/nanomq/pull/2379
- rework on logging reload feature by @JaylinYu in https://github.com/nanomq/nanomq/pull/2380
- fix(conf): set max_topic_alias in default and CI configs by @jayenashar in https://github.com/nanomq/nanomq/pull/2377
- DOC add new docs about reload log level by @JaylinYu in https://github.com/nanomq/nanomq/pull/2382
- FIX [acl] include clientid, username and topic in acl deny log by @jayenashar in https://github.com/nanomq/nanomq/pull/2385
- NEW [log] log publisher clientid and username in per-message debug lines by @jayenashar in https://github.com/nanomq/nanomq/pull/2387
- FIX [ci] authenticate latest-tag lookup to avoid anonymous rate limit by @jayenashar in https://github.com/nanomq/nanomq/pull/2389
- NNG Bridge: Sync with the
sdv_masterbranch by @alvin1221 in https://github.com/nanomq/nanomq/pull/2383 - consolidate the state machin in broker.c by @JaylinYu in https://github.com/nanomq/nanomq/pull/2396
- FIX [test] make the function test CI suite reliable again by @jayenashar in https://github.com/nanomq/nanomq/pull/2388
- FIx broken CI Build packages workflow caused by new ver of msquic & ubuntu 20.0 runner is dropped by github by @JaylinYu in https://github.com/nanomq/nanomq/pull/2401
New Contributors
- @jayenashar made their first contribution in https://github.com/nanomq/nanomq/pull/2376
- @ingwinlu made their first contribution in https://github.com/nanomq/nanomq/pull/2354
Full Changelog: https://github.com/nanomq/nanomq/compare/0.25.3...0.25.5
What's Changed in NanoNNG
- fix nanomq issue 2242 by @wanghaEMQ in https://github.com/nanomq/NanoNNG/pull/1478
- reload log level by @JaylinYu in https://github.com/nanomq/NanoNNG/pull/1568
- rewok of PR#1569 by @JaylinYu in https://github.com/nanomq/NanoNNG/pull/1571
- FIX [broker] store offline shared-subscription QoS msgs for cached sessions by @ingwinlu in https://github.com/nanomq/NanoNNG/pull/1564
- FIX [broker] free expired sqlite QoS msg in resend getopt loop by @ingwinlu in https://github.com/nanomq/NanoNNG/pull/1573
- FIX [broker] resolve TSan data races behind the red sanitize job by @ingwinlu in https://github.com/nanomq/NanoNNG/pull/1575
- NNG Bridge: Sync with
sdv_masterbranch by @alvin1221 in https://github.com/nanomq/NanoNNG/pull/1576 - FIX [mqtt_ws] stop qsaio ack-send cb from double-finishing user tx aio by @jayenashar in https://github.com/nanomq/NanoNNG/pull/1577
- FIX [mqtt_ws] complete recv/send aio on cancel so pipe reaping can't wedge by @jayenashar in https://github.com/nanomq/NanoNNG/pull/1578
- move QoS ACK logic from transport to protocol layer by @JaylinYu in https://github.com/nanomq/NanoNNG/pull/1580
- update msquic ver for better compatibility by @JaylinYu in https://github.com/nanomq/NanoNNG/pull/1583
- Add no local config reader & improve cmakelist for new ver of msquic by @JaylinYu in https://github.com/nanomq/NanoNNG/pull/1586
- support nolocal flag overwritten by @JaylinYu in https://github.com/nanomq/NanoNNG/pull/1588
- new resend policy batch_resend by @JaylinYu in https://github.com/nanomq/NanoNNG/pull/1589
New Contributors
- @ingwinlu made their first contribution in https://github.com/nanomq/NanoNNG/pull/1564
- @jayenashar made their first contribution in https://github.com/nanomq/NanoNNG/pull/1577
Full Changelog: https://github.com/nanomq/NanoNNG/compare/0.25.3...0.25.5