Skip to content

v2.5.0

Choose a tag to compare

@xShinnRyuu xShinnRyuu released this 14 Jul 16:47
· 16 commits to release-2.5 since this release
6902c1e

Key Features

Client-Wide Circuit Breaker: Introduced a comprehensive per-client circuit breaker system that detects when the GLIDE core is unhealthy and proactively rejects requests synchronously at the FFI boundary. Enhanced with structured timeout diagnostics and watchdog-informed recovery mechanisms to prevent thread parking and improve overall client resilience.

Python Async Performance Enhancement: Completely overhauled the Python async client architecture by replacing UDS (Unix Domain Socket) and protobuf transport with direct FFI requests and unnamed pipes for responses, delivering significant performance improvements and reduced latency.

Custom Socket Address Resolution: Added comprehensive support for custom socket address resolution when connecting to Valkey across all client languages, providing greater flexibility for complex network configurations and deployment scenarios.

Comprehensive New Command Support: Added new commands with full multi-language implementation:

  • Migration: MIGRATE single-key and multi-key variants
  • Connection Management: RESET, CLIENT PAUSE, CLIENT UNPAUSE
  • Client-Side Caching: CLIENT CACHING, CLIENT TRACKING, CLIENT TRACKINGINFO
  • Monitoring: MONITOR with dedicated MonitorClient
  • Database Operations: SAVE, BGSAVE, BGREWRITEAOF
  • Replication: REPLICAOF, FAILOVER
  • Performance Monitoring: LATENCY HISTORY, LATENCY LATEST, LATENCY RESET
  • Memory Management: MEMORY DOCTOR, MEMORY MALLOC-STATS, MEMORY PURGE, MEMORY STATS

Enhanced TLS Performance: Fixed critical TLS connection performance regression by optimizing initial connection handling and implementing per-process certificate caching, eliminating timeouts in multi-client and multi-process deployments.

Advanced Client-Side Caching: Implemented Phase 2 server-assisted invalidation via CLIENT TRACKING with comprehensive support across all client languages, enabling efficient cache invalidation strategies.

Improved Core Reliability: Enhanced connection management with circular MOVED handling, TCP deadlock fixes for large payloads, topology refresh improvements, and liveness-aware pipeline send-timeout mechanisms.

Enterprise-Grade Observability: Added structured timeout diagnostics that classify timeout causes and provide actionable corrective recommendations, along with dedicated timeout watchdog threads independent of Tokio runtime for improved debugging and monitoring capabilities.

Go OpenTelemetry Enhancement: Added support for connecting GLIDE command and batch spans to an application's existing OpenTelemetry trace context through OpenTelemetry.SetSpanContextExtractor, letting applications propagate active trace context from context.Context without adding a direct go.opentelemetry.io/otel dependency to the Go SDK.

Go Valkey Search Server Module Package: Refactored Valkey Search (FT) commands into a standalone glideft server module package, decoupling search functionality from client internals and establishing a scalable pattern for future server module support.

What's Changed

  • Enable PeriodicCheck parameter for Go Client in AdvancedClusterClient Configuration by @xShinnRyuu in #5839
  • Java: Make jedis-compatibility a pure-Java JAR with no-classifier support by @affonsov in #5649
  • Support custom socket address resolution by @tavomaciel in #5328
  • fix(glide-core): fall back to existing connections when initial nodes are unavailable during toplogy refresh by @jduo in #5857
  • Go: Refactor ft commands into a glideft package by @edlng in #5855
  • Go: Create common client interfaces by @prateek-kumar-improving in #5862
  • fix(node): accept pointer as single i64 to prevent 64-bit truncation by @jduo in #5874
  • Isolate flaky workflows and tests by @Aryex in #5808
  • fix(go): Update docs after FT module refactor by @edlng in #5881
  • Python: Optimize cache metrics retrieval to be synchronous (#5772) by @shohamazon in #5856
  • fix: java workflow correctly skips container tests on windows only and moved start time by @Aryex in #5882
  • Python: Support custom socket address resolution by @affonsov in #5876
  • Fix TCP deadlock in MultiplexedConnection with large payloads by @ranshid in #5892
  • fix(node): allow protobufjs build scripts in pnpm test by @affonsov in #5899
  • Compression Bugfixes by @alexr-bq in #5895
  • Update README with up-to-date information by @Aryex in #5941
  • Core: Propagate per-command response timeout to multiplexed connection by @jeremyprime in #5916
  • Cherry pick #5952 to main: Java: Add a synchronous check on inflight request limits before submitting tasks by @jduo in #5976
  • Core: Add dedicated timeout watchdog thread independent of Tokio runtime by @jeremyprime in #5917
  • docs: add documentation update reminder to PR template and contributing guide by @affonsov in #5943
  • Node: Support custom socket address resolution when connecting to valkey by @affonsov in #5890
  • Go: Support custom socket address resolution by @affonsov in #5891
  • Python: Fix sync client FFI signature mismatch for address resolver by @xShinnRyuu in #6013
  • Python: Include _fast_response extension in glide-sync wheel by @xShinnRyuu in #6015
  • Implement connection refresh on circular moved by @alexr-bq in #5893
  • Node.js: Add MIGRATE command support by @affonsov in #5934
  • Go: Add MIGRATE command support by @affonsov in #5935
  • Core: Phase 2 client-side caching - server-assisted invalidation via CLIENT TRACKING by @affonsov in #5962
  • Python: Add MIGRATE command support by @affonsov in #5933
  • Core: track post-RESET connection state in handle_reset_command by @affonsov in #5959
  • Python: Add RESET command support by @affonsov in #5944
  • Node.js: Add RESET command support by @affonsov in #5945
  • Core/FFI: MonitorClient for MONITOR command by @affonsov in #5977
  • fix(ci): Update valkey-bundle image to a stable version by @edlng in #6049
  • Java: Add RESET command support by @affonsov in #5947
  • Go: Add RESET command support by @affonsov in #5946
  • Commit lock files by @fenichelar in #5859
  • feat(jedis-compatibility): standalone JedisPool parity (broken resour… by @prashanna-frsh in #5793
  • fix(core): avoid panic on cluster scan with AZ affinity read strategy by @SAY-5 in #5936
  • Update/review prs.md comment resolving policy by @xShinnRyuu in #6061
  • changelog: add Go and Java RESET command support entries by @affonsov in #6067
  • Java: Skip AZ affinity tests on Windows due to zero replicas by @xShinnRyuu in #6128
  • fix(build): fix Makefile issues across Go and root targets by @currantw in #6143
  • FFI: Enable client-side caching support on the URI API by @affonsov in #5860
  • feat(client): Add CLIENT PAUSE and CLIENT UNPAUSE commands by @currantw in #6068
  • Fix PubSub test timeouts on Windows CI (#6085, #6088) by @xShinnRyuu in #6090
  • go: apply gofumpt and golines formatting by @sdg3iv in #6051
  • docs: fix CHANGELOG formatting and consistency by @currantw in #6142
  • Pin all GitHub Actions by @fenichelar in #5987
  • Java: Add support for SAVE, BGSAVE, BGREWRITEAOF commands by @currantw in #6165
  • fix(core): honor AWS_ENDPOINT_URL_STS in IAM credentials-provider loader by @edwardpark97 in #5968
  • Java: Add multi-key MIGRATE support to standalone client by @affonsov in #6063
  • Java: Add Checkstyle to Java lint pipeline by @yunhwane in #5687
  • Replace unmaintained iai-callgrind with gungraun by @jeremyprime in #6209
  • Core, Java, Python, Node, Go: Add client-wide circuit breaker by @jeremyprime in #6050
  • Go: Add MEMORY DOCTOR / MEMORY MALLOC-STATS / MEMORY PURGE / MEMORY STATS commands by @sdg3iv in #5986
  • Core: make pipeline send-timeout liveness-aware (#5446) by @khaeransori in #6136
  • Java: Add failover and ReplicaOf command by @prateek-kumar-improving in #6170
  • Update CD workflows to be consistent across all clients, add pre-publish smoke tests, and better AWS_ACTION gates by @xShinnRyuu in #6062
  • Add SAVE, BGSAVE, BGREWRITEAOF commands (Node, Python, Go) by @currantw in #6188
  • fix(ffi): avoid heap corruption in convert_vec_to_pointer by @jduo in #6225
  • chore: temporarily allow pyo3 advisory pending version bump by @jamesx-improving in #6228
  • Core: Extend timeout watchdog with structured diagnostics by @jduo in #6044
  • chore(python): upgrade pyo3 from 0.25 to 0.29 by @jamesx-improving in #6238
  • Python: Change async client to use FFI for requests and unnamed pipe for responses instead of UDS for both by @jduo in #5637
  • [Java] Remove inaccurate JVM-heap OpenTelemetry memory-leak tests by @xShinnRyuu in #6119
  • Go: Add LATENCY HISTORY / LATENCY LATEST / LATENCY RESET commands by @jagathprabhu in #5958
  • Docs: Update Python documentation URL by @xm4dn355x in #6223
  • feat(go): support external OpenTelemetry span context by @lwojciechowski in #6003
  • fix(python): pin pytest<9.1 to fix fixture finalizer assertion errors by @jduo in #6268
  • Java: implement MONITOR command by @affonsov in #6187
  • Python: Add missing dependency for python async by @jamesx-improving in #6256
  • deps(node): fix transitive dev-only advisories in node/ and examples/node/ (js-yaml, markdown-it, @babel/core, minimatch) by @xShinnRyuu in #6277
  • Node, Python, GO: Add failover and replicaOf commands by @prateek-kumar-improving in #6222
  • deps(node): bump protobufjs to ^7.6.3 (CVE-2026-48712, CVE-2026-54269) by @xShinnRyuu in #6274
  • Node: Add GlideMonitorClient for MONITOR command by @affonsov in #6212
  • Python: implement MONITOR command for sync and async clients by @affonsov in #6132
  • Core: Use watchdog diagnostics to inform CB recovery by @jeremyprime in #6240
  • Go: Add MonitorClient for MONITOR command by @affonsov in #6211
  • perf(java): optimize memory consumption of GlideString validation by @yeoncheol-jang in #6196
  • CI: Add self-hosted x86 Linux runners by @jamesx-improving in #6184
  • Java: Phase 2 client-side caching - serverAssisted field and clientTrackingInfo by @affonsov in #5965
  • Node: Add MIGRATE KEYS (multi-key) variant by @affonsov in #6064
  • Add LATENCY HISTORY, LATEST, and RESET command support by @currantw in #6257
  • Python: Add MIGRATE KEYS (multi-key) variant by @affonsov in #6066
  • CI/CD workflow extraction of shared actions that other repos can use by @alexr-bq in #6218
  • Node: Improve performance of Client initial connection with TLS by @jamesx-improving in #6219
  • Changelog: Add missing changelog entris for multi-key MIGRATE and monitor by @affonsov in #6185
  • fix(python): use response_buffer.nbytes for buffer GET capacity by @omerrubi-amzn in #6311
  • fix(node): use only primary address in Static mode write test by @xShinnRyuu in #5997
  • dev(python): add clean command to dev.py by @currantw in #6320
  • Python: fix MonitorClient trio compatibility via anyio by @affonsov in #6327
  • perf(python): optimize test client pooling and pubsub teardown by @jduo in #6335
  • Add MEMORY commands, remove LATENCY/MEMORY batch support (Java, Python, Node, Go) by @currantw in #6307
  • test(ffi): add native-memory leak regression tests for OpenTelemetry spans by @xShinnRyuu in #6227
  • fix: suppress false-positive response-wait warnings for blocking commands by @mvanhorn in #6291
  • [CI] Add retry logic to cargo-zigbuild install by @xShinnRyuu in #6313
  • Client-side caching: add serverAssisted config and CLIENT TRACKINGINFO command (Node, Python, Go, Java) by @currantw in #6344
  • GO: Add migrate commands support for multiple keys by @prateek-kumar-improving in #6293
  • fix(python): trio backend race condition and asyncio.sleep() usages by @Aryex in #6308
  • Python: Fix pubsub pipe head-of-line blocking and add lifecycle tests by @jduo in #6321
  • build(deps): update anyhow to 1.0.103 to fix RUSTSEC-2026-0190 (#6364) by @xShinnRyuu in #6382
  • cherry-pick: Fix python and node release workflows (#6363) by @Aryex in #6387

New Contributors

Full Changelog: v2.4.2...v2.5.0