Repository navigation
Reduce implementation complexity - #270
Merged
Merged
Conversation
Restructure the client internals to remove about 1,550 lines while keeping every feature and the binary-compatible public API. Shared paging, routing, transaction scopes, transport lifecycle, reconnect scheduling and the per-name subscription model replace per-topology and per-backend copies. Fix bugs found along the way, each covered by a test, including: - interrupt-safe close, connect and handshake cleanup, and a teardown deadlock between the socket I/O threads - subscribe and unsubscribe reply matching, including Valkey error replies to SUNSUBSCRIBE, refused names, and pub/sub-only ACL users - shard and classic subscriptions moving off migrated, removed or demoted nodes, with bounded recovery latency - retries keeping master-only routing, READONLY inside a transaction, and span and event attribution for cached and redirected reads User-visible changes: a subscription the server refuses fails with the server's error, cached() rejects blocking commands with NotCacheable, and master-replica connect reports TimedOut when every ROLE probe times out.
ghostdogpr
marked this pull request as ready for review
October 3, 2026 14:29
MultiNodeCluster waits until CLUSTER SLOTS lists every replica. Redis lists a replica only once its replication offset is nonzero, and on an idle master the offset first moves with the replication PING, sent every 10 seconds by default. That wait added about 8 seconds to every cluster test. Sending the PING every second brings RedisClusterFailoverSuite back from about 68 to 38 seconds.
…f TxSupport The new byte parser behind ValueCodec and KeyCodec rejected "05" and "-0", which decoded as 5 and 0 before. Existing string data read as Int or Long decodes the same way again. A leading '+', spaces and non-ASCII digits are still rejected. SharedRunner, LiveClient and RoutedClient move from TxSupport.scala to LiveClient.scala, since they cover all client dispatch, not only transactions.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reduces the code across the repository by about 4,450 lines while keeping every feature and the binary-compatible public API (MiMa passes).
Each module went through repeated review rounds until they stopped finding removals. Every round looked for three things: freedoms the types allow but the code never needs, concerns that are tangled together, and guarantees that depend on discipline rather than types. Every bug found along the way is fixed with a test.
call.is(expected),>>to chain steps, direct test registration, one suite for both Redis and Valkey), and the benchmarks share one workload per client.User-visible changes
cached()rejects blocking commands withNotCacheable.TimedOutwhen every ROLE probe times out.Other fixes
CIO.timeoutreported anullresult as a timeout.