Repository navigation
fix(lifecycle): retain libraries after native unload failure - #165
Merged
Merged
Conversation
Replace Consul creation macros with typed bases, a private owning factory and explicit DLL entry points. Preserve interface registration, disabled updates and request behavior, and add construction/lifecycle checks with bilingual migration guidance. BREAKING CHANGE: Consul implementation and plugin class layouts change. Rebuild Consul and its consumers together; all existing public types and logical header paths remain available.
Read hash blocks and write digest bytes without alignment or aliasing assumptions. Use C++20 rotations and provide explicit legacy MSVC methods for persisted-key migration. BREAKING CHANGE: default MurmurHash3 now uses canonical little-endian blocks and output. Old MSVC IDs, shard mappings and persisted keys require an explicit migration or the matching legacy MSVC method.
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.8 to 3.1.9. - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](fastify/fast-uri@v3.1.8...v3.1.9) --- updated-dependencies: - dependency-name: fast-uri dependency-version: 3.1.9 dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]>
# Conflicts: # docs/reference/utility.md # docs/reference/utility_CN.md # src/core/hash/murmur_hash.hpp # tests/core/README.md # tests/core/README_CN.md
Use typed module and plugin bases with a private interface-returning factory and explicit entry points. Retain every public header, default plugin selection and existing Etcd request implementation. Add factory, ownership and production DSO checks to Applications acceptance. BREAKING CHANGE: etcd_client_module_impl and etcd_client_plugin have changed public class layouts. Rebuild Etcd Client and all consumers together; existing interfaces and logical header paths remain available.
Resolve the duplicated Consul history by retaining the preceding integration tree plus the exact Etcd feature delta. Preserve the independent hash-header check, codec cleanup and all typed plugin construction coverage.
Check a successful live-listener negative control, retain the exercised TCP peer across manager shutdown, and require a remote EOF or reset before stopping that peer. Check listener closure using an exact refused new connection instead of global immediate port rebinding. Keep existing endpoint ownership, manager state, main-thread callbacks and pending HTTP cancellation assertions. The original macOS CI bind conflict holder was not reproduced locally; no production shutdown or reuse-address behavior changes.
Use a private io_context, async_connect and the existing five-second deadline. Cancel and close the probe socket on expiry, return typed timed_out rather than operation_aborted, and drain connect and timer callbacks before returning. Keep all live-listener, retained-peer and owner-state assertions and the existing test timeout. Production shutdown remains unchanged.
Retain public OSS SDK headers and types while replacing creation macros with module_base, an interface-returning private factory, plugin_base and explicit entry points. Replace the undefined deregistration call with typed owned unregistration while preserving the interface key and disabled updates. Add real-factory assembly and controlled DSO lifecycle regressions, production export checks and bilingual migration guidance. Keep the optional plugin off by default and retain its TODO capability boundary. BREAKING CHANGE: oss_sdk_module_impl and oss_sdk_plugin change public class layouts. Rebuild OSS SDK and all affected consumers together; original public header paths, types and the oss_sdk_module interface remain available.
Use typed module/plugin bases, a private interface-returning factory and explicit DLL entries while preserving enabled updates and RdKafka callback inheritance. Add real factory/assembly, controlled lifecycle and production export checks. Cast callback log enums to integers for current fmt compatibility. BREAKING CHANGE: Kafka implementation and plugin public class layouts change. Rebuild Kafka and its C++ consumers together; retained public headers, interface keys and producer behavior remain available.
Retain both typed module migrations, their public header contracts and independent disabled/enabled update selections. Preserve original production and permanent test sources while resolving shared bilingual guidance and core test wiring.
Own the receive array with a private unique_ptr deleter, prohibit shallow copies and transfer allocation/cursor state through noexcept moves. Leave moved-from buffers empty and reusable, preserve self-move, capacity growth and throwing allocation behavior, and route growth through matching configured array hooks. Reject out-of-range consumption and avoid null-pointer operations for empty writes and storage. Add permanent ownership, framing-state, deterministic allocation-failure and isolated custom-hook regressions with bilingual guidance. BREAKING CHANGE: ark::buffer no longer supports copy construction or copy assignment and its private storage representation changes. Use explicit moves for ownership transfer and rebuild affected Core/Net consumers and plugins together. Define compatible ARK_NEW_ARRAY/ARK_DELETE_ARRAY overrides consistently; growth now uses the same hook pair as construction and destruction.
Move compaction and growth preparation into a private helper behind the C++20 unlikely branch for insufficient tail space. Keep allocation and exception handling off the steady receive-write path without changing any ownership, bounds, hook or failure contract. AppleClang Release disassembly moves grow out of the framing loop and reduces the local benchmark's parse_frames body from 335 to 270 instructions. The bounded timing comparison remains separate evidence and is retained locally.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A native library close failure was reported as success and the plugin manager deleted its wrapper regardless. Interpret FreeLibrary/dlclose results correctly, retain the original handle on failure, and clear it only after success. Empty/already closed wrappers return success without a second native close.
The manager now stops at the first failed close, retains that wrapper and not-yet-closed libraries, and latches its existing shutdown failure state. Repeated stop does not repeat exits or unloads. Earlier module teardown and successful closes are not rolled back. Public APIs, object layouts, natural task draining and startup-failure retention remain unchanged; a private per-call adapter enables controlled tests without global hooks or invalid OS handles.
Local validation at 9923f33 passed: six deterministic/native-probe tests, full core and business-runtime regressions, 157 CI contracts, clang-format 18, Nimbus and actual English/Chinese article/Markdown checks. Tests cover retained valid handles, partial close failure, exceptions, repeated stop and actual normal entry/exit/close. Linux/Windows remain subject to the PR's own hosted acceptance. Native close success does not prove physical OS image removal, arbitrary hot-update safety or external-thread retirement.
A local synchronization with #164 at1174d569 also passed combined real-launcher checks using CI's exact arknet pin a0dfe09c: 11 stop modes, malformed deadlines, all24 startup-failure children and6native-unload cases/72assertions. Production and native-unload changes are identical to the prior tested delta.
Depends on #164. Every native job of its full candidate40300536911 has started before this PR's fresh source admission. Queue admission remains held until #164 is accepted; this PR still requires its own protected full-candidate checks.