diff --git a/docs/release_notes.rst b/docs/release_notes.rst index 03e1c469..804f3a1f 100644 --- a/docs/release_notes.rst +++ b/docs/release_notes.rst @@ -3,6 +3,65 @@ Release Notes .. towncrier release notes start +py-libp2p v0.2.9 (2025-07-09) +----------------------------- + +Breaking Changes +~~~~~~~~~~~~~~~~ + +- Reordered the arguments to ``upgrade_security`` to place ``is_initiator`` before ``peer_id``, and made ``peer_id`` optional. + This allows the method to reflect the fact that peer identity is not required for inbound connections. (`#681 `__) + + +Bugfixes +~~~~~~~~ + +- Add timeout wrappers in: + 1. ``multiselect.py``: ``negotiate`` function + 2. ``multiselect_client.py``: ``select_one_of`` , ``query_multistream_command`` functions + to prevent indefinite hangs when a remote peer does not respond. (`#696 `__) +- Align stream creation logic with yamux specification (`#701 `__) +- Fixed an issue in ``Pubsub`` where async validators were not handled reliably under concurrency. Now uses a safe aggregator list for consistent behavior. (`#702 `__) + + +Features +~~~~~~~~ + +- Added support for ``Kademlia DHT`` in py-libp2p. (`#579 `__) +- Limit concurrency in ``push_identify_to_peers`` to prevent resource congestion under high peer counts. (`#621 `__) +- Store public key and peer ID in peerstore during handshake + + Modified the InsecureTransport class to accept an optional peerstore parameter and updated the handshake process to store the received public key and peer ID in the peerstore when available. + + Added test cases to verify: + 1. The peerstore remains unchanged when handshake fails due to peer ID mismatch + 2. The handshake correctly adds a public key to a peer ID that already exists in the peerstore but doesn't have a public key yet (`#631 `__) +- Fixed several flow-control and concurrency issues in the ``YamuxStream`` class. Previously, stress-testing revealed that transferring data over ``DEFAULT_WINDOW_SIZE`` would break the stream due to inconsistent window update handling and lock management. The fixes include: + + - Removed sending of window updates during writes to maintain correct flow-control. + - Added proper timeout handling when releasing and acquiring locks to prevent concurrency errors. + - Corrected the ``read`` function to properly handle window updates for both ``read_until_EOF`` and ``read_n_bytes``. + - Added event logging at ``send_window_updates`` and ``waiting_for_window_updates`` for better observability. (`#639 `__) +- Added support for ``Multicast DNS`` in py-libp2p (`#649 `__) +- Optimized pubsub publishing to send multiple topics in a single message instead of separate messages per topic. (`#685 `__) +- Optimized pubsub message writing by implementing a write_msg() method that uses pre-allocated buffers and single write operations, improving performance by eliminating separate varint prefix encoding and write operations in FloodSub and GossipSub. (`#687 `__) +- Added peer exchange and backoff logic as part of Gossipsub v1.1 upgrade (`#690 `__) + + +Internal Changes - for py-libp2p Contributors +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Added sparse connect utility function to pubsub test utilities for creating test networks with configurable connectivity. (`#679 `__) +- Added comprehensive tests for pubsub connection utility functions to verify degree limits are enforced, excess peers are handled correctly, and edge cases (degree=0, negative values, empty lists) are managed gracefully. (`#707 `__) +- Added extra tests for identify push concurrency cap under high peer load (`#708 `__) + + +Miscellaneous Changes +~~~~~~~~~~~~~~~~~~~~~ + +- `#678 `__, `#684 `__ + + py-libp2p v0.2.8 (2025-06-10) ----------------------------- diff --git a/newsfragments/579.feature.rst b/newsfragments/579.feature.rst deleted file mode 100644 index 9da91328..00000000 --- a/newsfragments/579.feature.rst +++ /dev/null @@ -1 +0,0 @@ -Added support for ``Kademlia DHT`` in py-libp2p. diff --git a/newsfragments/621.feature.rst b/newsfragments/621.feature.rst deleted file mode 100644 index f55894f8..00000000 --- a/newsfragments/621.feature.rst +++ /dev/null @@ -1 +0,0 @@ -Limit concurrency in ``push_identify_to_peers`` to prevent resource congestion under high peer counts. diff --git a/newsfragments/631.feature.rst b/newsfragments/631.feature.rst deleted file mode 100644 index 1d88c779..00000000 --- a/newsfragments/631.feature.rst +++ /dev/null @@ -1,7 +0,0 @@ -Store public key and peer ID in peerstore during handshake - -Modified the InsecureTransport class to accept an optional peerstore parameter and updated the handshake process to store the received public key and peer ID in the peerstore when available. - -Added test cases to verify: -1. The peerstore remains unchanged when handshake fails due to peer ID mismatch -2. The handshake correctly adds a public key to a peer ID that already exists in the peerstore but doesn't have a public key yet diff --git a/newsfragments/639.feature.rst b/newsfragments/639.feature.rst deleted file mode 100644 index f6aa54a6..00000000 --- a/newsfragments/639.feature.rst +++ /dev/null @@ -1,6 +0,0 @@ -Fixed several flow-control and concurrency issues in the ``YamuxStream`` class. Previously, stress-testing revealed that transferring data over ``DEFAULT_WINDOW_SIZE`` would break the stream due to inconsistent window update handling and lock management. The fixes include: - -- Removed sending of window updates during writes to maintain correct flow-control. -- Added proper timeout handling when releasing and acquiring locks to prevent concurrency errors. -- Corrected the ``read`` function to properly handle window updates for both ``read_until_EOF`` and ``read_n_bytes``. -- Added event logging at ``send_window_updates`` and ``waiting_for_window_updates`` for better observability. diff --git a/newsfragments/649.feature.rst b/newsfragments/649.feature.rst deleted file mode 100644 index 82ba5cd7..00000000 --- a/newsfragments/649.feature.rst +++ /dev/null @@ -1 +0,0 @@ -Added support for ``Multicast DNS`` in py-libp2p diff --git a/newsfragments/678.misc.rst b/newsfragments/678.misc.rst deleted file mode 100644 index 2d45d482..00000000 --- a/newsfragments/678.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Refactored gossipsub heartbeat logic to use a single helper method ``_handle_topic_heartbeat`` that handles both fanout and gossip heartbeats. diff --git a/newsfragments/679.internal.rst b/newsfragments/679.internal.rst deleted file mode 100644 index 372053dd..00000000 --- a/newsfragments/679.internal.rst +++ /dev/null @@ -1 +0,0 @@ -Added sparse connect utility function to pubsub test utilities for creating test networks with configurable connectivity. diff --git a/newsfragments/681.breaking.rst b/newsfragments/681.breaking.rst deleted file mode 100644 index 7d5b8f6b..00000000 --- a/newsfragments/681.breaking.rst +++ /dev/null @@ -1,2 +0,0 @@ -Reordered the arguments to ``upgrade_security`` to place ``is_initiator`` before ``peer_id``, and made ``peer_id`` optional. -This allows the method to reflect the fact that peer identity is not required for inbound connections. diff --git a/newsfragments/684.misc.rst b/newsfragments/684.misc.rst deleted file mode 100644 index 9957deb7..00000000 --- a/newsfragments/684.misc.rst +++ /dev/null @@ -1 +0,0 @@ -Uses the ``decapsulate`` method of the ``Multiaddr`` class to clean up the observed address. diff --git a/newsfragments/685.feature.rst b/newsfragments/685.feature.rst deleted file mode 100644 index 1ea15c49..00000000 --- a/newsfragments/685.feature.rst +++ /dev/null @@ -1 +0,0 @@ -Optimized pubsub publishing to send multiple topics in a single message instead of separate messages per topic. diff --git a/newsfragments/687.feature.rst b/newsfragments/687.feature.rst deleted file mode 100644 index d7985cd6..00000000 --- a/newsfragments/687.feature.rst +++ /dev/null @@ -1 +0,0 @@ -Optimized pubsub message writing by implementing a write_msg() method that uses pre-allocated buffers and single write operations, improving performance by eliminating separate varint prefix encoding and write operations in FloodSub and GossipSub. diff --git a/newsfragments/690.feature.rst b/newsfragments/690.feature.rst deleted file mode 100644 index f3bcaced..00000000 --- a/newsfragments/690.feature.rst +++ /dev/null @@ -1 +0,0 @@ -Added peer exchange and backoff logic as part of Gossipsub v1.1 upgrade diff --git a/newsfragments/696.bugfix.rst b/newsfragments/696.bugfix.rst deleted file mode 100644 index ba27cc54..00000000 --- a/newsfragments/696.bugfix.rst +++ /dev/null @@ -1,4 +0,0 @@ -Add timeout wrappers in: -1. ``multiselect.py``: ``negotiate`` function -2. ``multiselect_client.py``: ``select_one_of`` , ``query_multistream_command`` functions -to prevent indefinite hangs when a remote peer does not respond. diff --git a/newsfragments/701.bugfix.rst b/newsfragments/701.bugfix.rst deleted file mode 100644 index 1ef33f0a..00000000 --- a/newsfragments/701.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Align stream creation logic with yamux specification diff --git a/newsfragments/702.bugfix.rst b/newsfragments/702.bugfix.rst deleted file mode 100644 index f73b45fd..00000000 --- a/newsfragments/702.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed an issue in ``Pubsub`` where async validators were not handled reliably under concurrency. Now uses a safe aggregator list for consistent behavior. diff --git a/newsfragments/707.internal.rst b/newsfragments/707.internal.rst deleted file mode 100644 index 7c521d29..00000000 --- a/newsfragments/707.internal.rst +++ /dev/null @@ -1 +0,0 @@ -Added comprehensive tests for pubsub connection utility functions to verify degree limits are enforced, excess peers are handled correctly, and edge cases (degree=0, negative values, empty lists) are managed gracefully. diff --git a/newsfragments/708.internal.rst b/newsfragments/708.internal.rst deleted file mode 100644 index 286615e9..00000000 --- a/newsfragments/708.internal.rst +++ /dev/null @@ -1 +0,0 @@ -Added extra tests for identify push concurrency cap under high peer load