Releases: Ericsson/libpaf
v1.1.12
News in this release:
- Fix a bug where unpublishing a service or unsubscribing a subscription which was not yet synced to a server could lead to a crash in a subsequent paf_process() call. See 9aa44b5 for details.
Documentation can be found at:
https://ericsson.github.io/libpaf/doc/v1.1.12/
v1.1.11
News in this release:
- Fix memory leak triggered by republishing stale services.
- Fix Python deprecation warning in gencert tool used by the test suite.
Documentation can be found at:
https://ericsson.github.io/libpaf/doc/v1.1.11/
v1.1.10
News in this release:
- Fix bug causing protocol v3 clients which had not published a service and which were attached to a domain which had no explicit max idle time configuration to instead of using the maximum idle time as their effective idle time, instead use the minimum idle time. This caused unnecessary liveness-related signalling between client and server.
Documentation can be found at:
https://ericsson.github.io/libpaf/doc/v1.1.10/
v1.1.9
News in this release:
- Domain file format is extended, allowing idle time configuration (issue #32).
- Improved subscription match handling, to more carefully track per-server ("source") state. libpaf is now able to verify server behavior and better handle certain race conditions in high availability (i.e., multiple-server) configurations. For details, see 23dc0bb.
- Fixed bug which caused the idle time ceiling to be ignored.
- Fixed bug which disallowed setting minimum protocol version only (as opposed to both minimum and maximum).
- Fixed bug causing missing log entries for disappeared type events.
Documentation can be found at:
https://ericsson.github.io/libpaf/doc/v1.1.9/
v1.1.8
News in this release:
- Time out and retry a transport protocol and initial Pathfinder protocol handshake which fails to complete within PAF_IDLE_MIN (default, 4 s).
- Fix bug where early connection restarts postponed orphan timeouts.
Documentation can be found at:
https://ericsson.github.io/libpaf/doc/v1.1.8/
v1.1.7
This release of libpaf adds support for Pathfinder protocol version 3, in addition to the existing version 2 support.
Pathfinder protocol version 3 moves the keepalive/heartbeat functionality from the transport protocol (e.g., TCP) into the Pathfinder application-layer protocol itself. See the v3 protocol specification for details.
When protocol version 3 is in used, libpaf uses a notion of a per-connection maximum idle time. When nothing has been heard from the server for about ~50% of the max idle time, libpaf will send a track query to the server. If the server fails to respond for the remaining half of the max idle time, the connection will be considered down, and libpaf will close it and reopen a new connection. A server will behave in a similar manner.
libpaf takes time-to-live (TTL) of client-owned services into account when computing the effective max idle time for a connection. Hence, it becomes important to configure an appropriate TTL. Low TTLs will cause a fair amount of keepalive signaling. The amount of network traffic is always lower in protocol v3 compared to protocol v2, but the cost of processing a single heartbeat is much higher in v3 than in v2.
Two new environment variables are added, PAF_IDLE_MIN and PAF_IDLE_MAX, which allow some user-level control over heartbeat behavior. See the API documentation for details.
The domain file format is extended with two new per-server configuration parameters, which allows control over which protocol versions are advertised as supported to the server. Using this mechanism, one may force libpaf to use a particular protocol version.
To allow for client protocol version observability and track latency monitoring, the "clients" Pathfinder protocol command is extended to provide more information on all connected clients in version 3.
libpaf behavior when a very large amount of services and/or subscriptions are issued from a single client is improved. The old design queued up a large amount of protocol-level request messages to the server. This approach may cause excessive transaction latencies (e.g., from a client-issued "request" to the client receiving an "accept" message from the server). In protocol v2, this is not a major issue, but with v3, very large transaction latencies (in the range of seconds) becomes an issue, since the heartbeat signaling is in-band (as opposed to the out-of-band TCP keepalive used previously). "Track" queries and replies must be processed in a timely manner, or the connection may be torn down by either side.
With this release, libpaf puts an upper bound to the number of concurrent, unacknowledged, protocol transaction. The limit is currently 32. This limit does not affect the maximum number of services and/or subscriptions, but rather only controls the details of the client<->server interaction. Another improvement is that libpaf puts an upper bound to the amount of messages are received and transmitted every paf_process() call, to avoid starving RX, TX or some non-libpaf task the thread should attend to.
lpafc is updated with support for the new "track" protocol-level command, as well as the extended version of the "stats" command. Just like libpaf, lpac supports both v2 and v3.
Some of the libpaf-internal processing related to TTL is likely to cause performance regressions in scenarios where a large number of services are published by the same client.
The library API (<paf.h>) contract is not affected by protocol version 3 support. However, for contexts linked over protocol v3 connections, an application failing to call paf_process() when the context's fd is active (in violation of the API) risks the connection being torn down, and any services orphaned.
The unchanged API/ABI is the reason this otherwise-substantial release is classified as a patch release.
Bugfixes in this release:
- Fixed bug where a server EOF could cause a libpaf server link to be stuck in operational state, when it should be restarted.
- Fixed bug where a PAF_RESCAN value of zero caused a library crash.
Documentation can be found at:
https://ericsson.github.io/libpaf/doc/v1.1.7/
v1.1.6
News in this release:
- Work around GNU readline 8.1 quirk causing build errors.
- Fix bug where a paf_detach() call during server handshake would cause detachment process to never finish.
- Eliminate the “paf.client” dependency of the test suite, in turn eliminating the test-time dependency toward the “paf” repository.
- Refactor the “link” module to use the new “proto” module, leading to an overall simplification.
- Print log prefixes when logging to console.
This is a maintenance release.
Documentation can be found at:
https://ericsson.github.io/libpaf/doc/v1.1.6/
v1.1.5
News in this release:
- Bug introduced in 1.1.4 related to the use of variadic functions, causing initial Pathfinder handshake ("hello") failures on 64-bit ARM (and possibly other architectures/ABIs), is fixed. libpaf 1.1.4 x86_64 builds seemed to work, although uplifts on x86 are also encouraged.
- Bug which caused libpaf crashes in case the server would signal protocol transaction failure is fixed.
This is a maintenance release.
Documentation can be found at:
https://ericsson.github.io/libpaf/doc/v1.1.5/
v1.1.4
Release v1.1.4 includes the following improvements:
Command-line Client
This libpaf release introduces a new command-line tool lpafc
. lpafc is a Pathfinder client which presents interactive CLI to a human operator, and is meant for debugging and exploration.
lpafc is compatible with the pafc
tool of the Pathfinder server software suite.
lpafc is targeting environments which are unable to satisfy the Python dependency of the original pafc tool. With lpafc comes a dependency to GNU readline.
Other Improvements
- Fix bug where libpaf could fail to properly handle subscription notifications during detach, resulting in an application crash.
- Improve certificate revocation test.
- Split library level test cases and test setup.
- Fix false-positive buffer-overrun related compiler warning.
- Add tpafd support in the test suite.
- Fix cosmetic memory leak in unit test framework (utest).
v1.1.3
Release v1.1.3 includes the following improvements:
Certificate Revocation
Starting in v1.1.3, libpaf supports checking certificates against one or more certificate revocation lists (CRLs). The domain file may optionally contain a key tlsCrlFile, which points to a CRL bundle in PEM format. For CRL checking functionality to be available, libpaf must be linked against XCM v1.9.0 or later. libpaf still supports older releases (down to v1.5.0). This feature is only relevant when the server is reached over TLS.
Multi-homed servers
libpaf v1.1.3 supports multi-homed servers. If the server's DNS name is configured in the domain file, and it resolves to multiple IP addresses, libpaf will interpret that a single server reachable via multiple IP addresses. The list of IP addresses retrieved from DNS will be scanned (i.e., connected to) until a functioning connection can be established. The details of the procedure is much like "Happy Eyeballs", as described in RFC 6555. This feature is only relevant when the server is reached over some TCP-based transport.
Support for multi-homed servers relies on functionality available only in XCM versions v1.9.0 and later.
Source-based Routing
With this release, libpaf allows specifying the source IP address and/or source TCP port to use when contacting a particular server in the domain file (using a new localAddress field). This feature may be useful in scenario where source-based routing is used.
Other Improvements
- Work around false positive maybe-uninitialized warning in GCC 11.3.
- Various minor improvements of the test suite.
- Drop support for XCM API versions older than v1.5.0.
For details concerning the domain file-related changes of this release, consult the API documentation:
https://ericsson.github.io/libpaf/doc/v1.1.3/