Below is a non-exhaustive list of changes between gen_rpc versions.
- Support compression when serializing Erlang term to binary.
- Add
gen_rpc:check_server_ports_available/0to help checking ifAddress:Portis in use.
- Fix log 'domain' metadata.
- Improve logging
- Switched to structured logging.
- Support user provided logger module.
- Refactor client initialization to use async connection setup via
handle_continue/2, preventing dispatcher blocking during client startup - Fix supervisor crash reports by using
{shutdown, Reason}for graceful client termination instead of abnormal reasons - Improve error handling and logging for connection failures
- Performance: Use lazy tracepoints in hot code paths to reduce overhead
- Chore: Reduce debug level logging
- CI: Update GitHub action versions
- Fix: Don't crash the server due to client problems
- Back-pressure towards sender by
{active, 100}socket option in acceptor side.
- Improve logging. Sever listener error reports port number.
- Deleted some hardcoded TLS options
- Add config 'ipv6_only' to support IPv6 only network.
- Fix peer address format crash when IPv6 is configred for 'socket_ip'.
- Support ssl ciphers config.
- Add node name to the auth challenge message
- Security: implement challenge-response authentication; avoid sending cookie over the network
-
Support multiple connections per node using aribtrary keys.
-
Add support for Linux and Darwin/macOS custom keepalive settings to detect socket issues faster.
- Support external node driver/port discovery.
This release boasts a major rengineer/refactor of gen_rpc that includes quite a few new features:
-
The server and acceptor FSMs have been converted to
gen_statemto follow Erlang's best practices and development. As a result, support for Erlang releases older than 19.1 has been dropped. -
Specific options, leveraging Erlang 19, have been enabled such as off-heap mailboxes for client and acceptor, and higher priorities for all
gen_rpcprocesses. -
Ports are not dynamically assigned anymore as it shows that, after some research, offers no additional benefits to having a static port listener. That means less processes to supervise and less moving parts where something can go wrong.
-
Support for SSL has been added. Please refer to the README for more information on how to use it.
-
Module version control support has been added, effectively allowing you to only make RPC calls to nodes that run specific versions of modules.
-
lagersupport has been dropped in favor of the logging backend-agnostic libraryhut, in order to better support Elixir installations. The test suite and development profiles still use lager but this doesn't interfere with production deployments ofgen_rpc. -
Tests have been updated to test more edge cases, including new SSL functionality.
-
Some options in
gen_rpc.app.srchave changed names to better describe what they do. Again, please refer to the README to verify your preexisting settings are consistent with their new names. -
Various smaller bugs have been fixed and various responses have been massaged for consistency.
-
Implemented blacklisting/whitelisting of modules available for RPC.
-
Implemented abcast and sbcast support.
-
Updated documentation
-
Updated/optimized various TCP options
-
Updated tests to include more edge cases
-
Support client-configurable listener port per remote node
-
Small code refactoring and cleanup
This release drops the hybrid RPC/TCP approach and uses a separate TCP listener to emulate initial RPC communication. In addition, this release includes:
-
Updated documentation
-
Added integration tests using Docker