Repository navigation
Release Notes
This release adds a direct client for plain blocking code and fixes several connection, subscription, and failover bugs.
-
Direct client.
sage-client-directserves plain blocking code and has no effect library dependency. Each command blocks the calling thread and returns its result, failures are thrown, and interrupting the thread cancels the wait. It is designed for virtual threads and works well with Eezo, which serves each request on its own virtual thread. Streaming helpers return anIterator, subscriptions return a blocking iterator that you close to unsubscribe, andonMessage,onPatternMessage, andonShardMessagedeliver messages to a callback. Lock bodies run on the calling thread, so they see its thread-local values. See Getting started. -
Bug fixes. Closing a client from an interrupted thread now releases its connections, and an interrupted connect or TLS handshake cleans up its socket. Subscriptions match their server replies correctly, including Valkey error replies and pub/sub-only ACL users, and they move off cluster nodes that are migrated, removed, or demoted. Retried commands keep their master-only routing.
-
Behavior changes. A subscription that the server refuses, for example with
NOPERM, fails with the server's error.cached()rejects blocking commands withNotCacheable. A master-replica connection reportsTimedOutwhen everyROLEprobe times out. -
Binary compatibility checks. Every published module is now checked with MiMa against the previous release.
What's Changed
- Check binary compatibility with MiMa by @ghostdogpr in #267
- Reduce implementation complexity by @ghostdogpr in #270
- Add a direct backend for plain blocking code by @ghostdogpr in #277