diff --git a/NEWS.rst b/NEWS.rst index afb856b..35e7980 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -4,6 +4,56 @@ Changelog .. towncrier release notes start +tractor 0.1.0a2 (2021-09-07) +============================ + +Features +-------- + +- Add `tokio-style broadcast channels + `_ as + a solution for `#204 `_ and + discussed thoroughly in `trio/#987 + `_. + + This gives us local task broadcast functionality using a new + ``BroadcastReceiver`` type which can wrap ``trio.ReceiveChannel`` and + provide fan-out copies of a stream of data to every subscribed consumer. + We use this new machinery to provide a ``ReceiveMsgStream.subscribe()`` + async context manager which can be used by actor-local concumers tasks + to easily pull from a shared and dynamic IPC stream. (`#229 + `_) + + +Bugfixes +-------- + +- Handle broken channel/stream faults where the root's tty lock is left + acquired by some child actor who went MIA and the root ends up hanging + indefinitely. (`#234 `_) + + There's two parts here: we no longer shield wait on the lock and, + now always do our best to release the lock on the expected worst + case connection faults. + + +Deprecations and Removals +------------------------- + +- Drop stream "shielding" support which was originally added to sidestep + a cancelled call to ``.receive()`` + + In the original api design a stream instance was returned directly from + a call to ``Portal.run()`` and thus there was no "exit phase" to handle + cancellations and errors which would trigger implicit closure. Now that + we have said enter/exit semantics with ``Portal.open_stream_from()`` and + ``Context.open_stream()`` we can drop this implicit (and arguably + confusing) behavior. (`#230 `_) + +- Drop Python 3.7 support in preparation for supporting 3.9+ syntax. + (`#232 `_) + + tractor 0.1.0a1 (2021-08-01) ============================ diff --git a/newsfragments/229.feature.rst b/newsfragments/229.feature.rst deleted file mode 100644 index bda005c..0000000 --- a/newsfragments/229.feature.rst +++ /dev/null @@ -1,12 +0,0 @@ -Add `tokio-style broadcast channels -`_ as -a solution for `#204 `_ and -discussed thoroughly in `trio/#987 -`_. - -This gives us local task broadcast functionality using a new -``BroadcastReceiver`` type which can wrap ``trio.ReceiveChannel`` and -provide fan-out copies of a stream of data to every subscribed consumer. -We use this new machinery to provide a ``ReceiveMsgStream.subscribe()`` -async context manager which can be used by actor-local concumers tasks -to easily pull from a shared and dynamic IPC stream. diff --git a/newsfragments/230.removal.rst b/newsfragments/230.removal.rst deleted file mode 100644 index afb7cdb..0000000 --- a/newsfragments/230.removal.rst +++ /dev/null @@ -1,9 +0,0 @@ -Drop stream "shielding" support which was originally added to sidestep -a cancelled call to ``.receive()`` - -In the original api design a stream instance was returned directly from -a call to ``Portal.run()`` and thus there was no "exit phase" to handle -cancellations and errors which would trigger implicit closure. Now that -we have said enter/exit semantics with ``Portal.open_stream_from()`` and -``Context.open_stream()`` we can drop this implicit (and arguably -confusing) behavior. diff --git a/newsfragments/232.removal.rst b/newsfragments/232.removal.rst deleted file mode 100644 index 728caee..0000000 --- a/newsfragments/232.removal.rst +++ /dev/null @@ -1 +0,0 @@ -Drop Python 3.7 support in preparation for supporting 3.9+ syntax. diff --git a/newsfragments/234.bugfix b/newsfragments/234.bugfix deleted file mode 100644 index 00a0ce9..0000000 --- a/newsfragments/234.bugfix +++ /dev/null @@ -1,6 +0,0 @@ -Handle broken channel/stream faults where the root's tty lock is left acquired by some -child actor who went MIA and the root ends up hanging indefinitely. - -There's two parts here: -- Don't shield wait on the lock -- Always do our best to release the lock on the expected worst case connection faults