github dahomey-technologies/rustis 0.27.1

2 hours ago

Fixed

  • A stream closed or dropped while the client is disconnected releases its
    channel.
    Its UNSUBSCRIBE reached the network task between two reconnection
    attempts and, being non-retryable, was failed with DisconnectedByPeer
    without the subscription being forgotten. The reconnection then subscribed the
    server again to the channel, for a subscriber that no longer existed, and
    every later subscribe to it on the same Client was refused with
    AlreadySubscribed until a message happened to arrive on it. A channel that
    stays quiet, like a per-user channel while its user is offline, stayed blocked
    for the life of the Client. Such an UNSUBSCRIBE now succeeds without being
    sent: a fresh connection is subscribed to nothing, so it has nothing left to
    do. PubSubStream::close therefore returns Ok during an outage.
  • A subscription whose stream is gone no longer refuses a new subscriber. A
    subscribe to a channel whose previous stream had been dropped was refused
    with AlreadySubscribed until the server confirmed the UNSUBSCRIBE of that
    stream, so a caller that subscribed again right after a drop had to retry. It
    now takes the channel over at once.
  • The crate builds again with warnings denied on Rust 1.99. That toolchain
    deprecates AtomicUsize::fetch_update in favour of try_update, which the
    1.88 MSRV does not have, so the test-only fault-injection countdown now
    decrements through a compare_exchange_weak loop that both accept. Its clippy
    also reports #[must_use] on BlockingCommands::monitor as redundant -- an
    async fn returns a future, already must_use -- so the attribute is gone,
    with no change to what a caller is warned about.

Don't miss a new rustis release

NewReleases is sending notifications on new releases.