valkey/00-RELEASENOTES

213 lines
11 KiB
Plaintext

Valkey 9.0 release notes
========================
Upgrade urgency levels:
| Level | Meaning |
|----------|---------------------------------------------------------------------|
| LOW | No need to upgrade unless there are new features you want to use. |
| MODERATE | Program an upgrade of the server, but it's not urgent. |
| HIGH | There is a critical bug that may affect a subset of users. Upgrade! |
| CRITICAL | There is a critical bug affecting MOST USERS. Upgrade ASAP. |
| SECURITY | There are security fixes in the release. |
Valkey 9.0.0-rc1 - August 14, 2025
----------------------------------
Upgrade urgency LOW: This is the first release candidate of Valkey 9.0.0, with
performance improvements, atomic slot migrations, hash field expiration, and numbered databases in cluster mode,
as well as a whole host of new items as listed below.
### New Features
* Client Commands Extended Filtering by @sarthakaggarwal97 (#1466)
* Add multi-database support to cluster mode by @xbasel (#1671)
* Support BYPOLYGON option for GEOSEARCH by @KarthikSubbarao (#1809)
* Introduce MPTCP by @pizhenwei (#1811)
* Add sentinel_total_tilt to sentinel INFO sentinel by @carlosfu (#1904)
* Add support for automatic client authentication via TLS certificate fields by @omanges (#1920)
* Add --hotkeys-count option for valkey-cli by @hwware (#1933)
* Introduce atomic slot migration by @murphyjacob4 (#1949)
* Introduce MPTCP for replica by @pizhenwei (#1961)
* Add DELIFEQ command by @LinusU (#1975)
* Allow dynamic modification of io-threads num by @ayush933 (#2033)
* Introduce HASH items expiration by @ranshid (#2089)
* Add SAFE option to SHUTDOWN to reject shutdown in unsafe situations by @enjoy-binbin (#2195)
* Support negative filtering for client command filters by @soloestoy (#2378)
### New Configs
* Auto-failover on shutdown unified config by @zuiderkwast (#2292)
### Logging and Tooling Improvements
* Add node pfail and fail count to cluster info metrics by @hpatro (#1910)
* Introduce support for lttng based tracing by @artikell (#2070)
### Performance/Efficiency Improvements
* Optimize bitcount command by SIMD by @chzhoo (#1741)
* Save RDB file to disk using a background thread on replica(s) (#1784)
* Improve replication stability by prioritizing replication traffic in the replica by @xbasel (#1838)
* Optimize hyperloglog commands with ARM NEON SIMD instructions by @xbasel (#1859)
* Optimize BITCOUNT using ARM NEON SIMD by @xbasel (#1867)
* Optimize string-to-integer performance using AVX512 by @zhulipeng (#1944)
* Improve system responsiveness by limiting number of new cluster link connections per cycle by @hpatro (#2009)
* Optimize hash table performance using SIMD by @zhulipeng (#2030)
* Improve performance of network operations by directly writing responses to clients by @xbasel (#2078)
* Allow shrinking hashtables in low memory situations by @Fusl (#2095)
* Optimize string2ll with load-time CPU feature check using IFUNC resolver by @zhulipeng (#2099)
* Optimize WATCH by equalStringObjects early length check by @vitahlin (#2107)
* Optimize GEORADIUS command performance with pre-allocated buffer by @chzhoo (#2116)
* Improve zcount performance by combing range element ranks calculation with range elements search to @SoftlyRaining (#2129)
* Optimize scan/sscan/hscan/zscan commands by replacing list with vector by @chzhoo (#2160)
### Cluster
* Trigger manual failover on SIGTERM / shutdown to cluster primary by @enjoy-binbin (#1091)
* Add CLUSTER FLUSHSLOT command by @wuranxx (#1384)
* Allow replicas to become primaries without data by using CLUSTER REPLICATE NO ONE by @skolosov-snap (#1674)
* Add cluster bus port out of range error message for CLUSTER MEET command by @hwware (#1686)
* Add cluster-manual-failover-timeout to configure the timeout for manual failover by @enjoy-binbin (#1690)
### Module
* Add new module API flag to bypass command validation by @sungming2 (#1357)
### Bug Fixes
* Avoid shard id update of replica if it doesn't match with primary shard id by @hpatro (#573)
* Change "Redis ver." to "Valkey ver." in LOLWUT output by @sarthakaggarwal97 (#1559)
* Fix temp file leak during replication error handling by @enjoy-binbin (#1721)
* Fix raxRemove crash at memcpy() due to key size exceeds max Rax size by @VoletiRam (#1722)
* Respect process umask when creating data files by @kronwerk (#1725)
* Fix error "SSL routines::bad length" when connTLSWrite is called second time with smaller buffer by @zori-janea (#1737)
* cmd's out bytes need count deferred reply by @soloestoy (#1760)
* Enable TCP_NODELAY by default in incoming and outgoing connections by @sungming2 (#1763)
* Ignore stale gossip packets that arrive out of order by @enjoy-binbin (#1777)
* Remove unicode optimization in Lua cjson library by @rjd15372 (#1785)
* Save config file and broadcast PONG message on configEpoch change by @enjoy-binbin (#1813)
* Fix engine crash on module client blocking during keyspace events by @yairgott (#1819)
* Fix bug where invalidation messages were getting sent to closing clients by @madolson (#1823)
* Fix ACL LOAD crash on replica since the primary client don't has a user by @bogdanp05 (#1842)
* Fix RANDOMKEY infinite loop during CLIENT PAUSE by @li-benson (#1850)
* Improve clarity of errors for GEO commands when member does not exist by @chx9 (#1943)
* Fix panic in primary when blocking shutdown after previous block with timeout by @murphyjacob4 (#1948)
* fix cluster slot stats assertion during promotion of replica by @Fusl (#1950)
* Fix incorrect lag reported in XINFO GROUPS by @nesty92 (#1952)
* Fix crash during TLS handshake with I/O threads by @uriyage (#1955)
* Disallow sending REPLY ON / OFF / SKIP inside a multi-exec transaction by @sarthakaggarwal97 (#1966)
* Fix random element in skewed sparse hash table by @zuiderkwast (#2085)
* Allow mixing quoted and unquoted inline args by @Fusl (#2098)
* Only mark the client reprocessing flag when unblocked on keys by @ranshid (#2109)
* CLIENT UNBLOCK should't be able to unpause paused clients by @enjoy-binbin (#2117)
* Fix memory corruption in sharded pubsub unsubscribe by @uriyage (#2137)
* Detect SSL_new() returning NULL in outgoing connections by @zuiderkwast (#2140)
* Correctly handle large cluster bus extensions which may have resulted in dropped cluster packets by @madolson (#2144)
* Converge divergent shard-id persisted in nodes.conf to primary's shard ID by @hpatro (#2174)
* Fix replica can't finish failover when config epoch is outdated by @enjoy-binbin (#2178)
* Fix CLUSTER SLOTS/NODES showing wrong port after updating port/tls-port by @enjoy-binbin (#2186)
* Fix use-after-free when active expiration triggers hashtable to shrink by @gusakovy (#2257)
* Redact user data when a module crashes for not handling I/O errors enabled by @YueTang-Vanessa (#2274)
* Generate a new shard_id when the replica executes CLUSTER RESET SOFT by @enjoy-binbin (#2283)
* Fix missing response when AUTH returns an error inside a transaction by @enjoy-binbin (#2287)
* Fix memory leak when shrinking a hashtable without entries by @yzc-yzc (#2288)
* Fix MEMORY USAGE to consider embedded keys by @yulazariy (#2290)
* Fix replicas claiming to still have slots after manual failover by @enjoy-binbin (#2301)
* Prevent bad memory access when NOTOUCH client gets unblocked by @uriyage (#2347)
* Fix large allocations crashing Valkey during active defrag by @Fusl (#2353)
### Build and Tooling
* Support for RDB analysis reports by @artikell (#1743)
* Implement RPS control for valkey-benchmark by @artikell (#1761)
* valkey-cli: ensure output ends with a newline if missing when printing reply by @xbasel (#1782)
* Drop lua object files on clean by @secwall (#1812)
* Check both arm64 and aarch64 for ARM based system architecture by @eifrah-aws (#1829)
* Add --sequential option to valkey-benchmark to support populating entire keyspace by @SoftlyRaining (#1839)
* Support environment variable VALKEYCLI_AUTH alongside REDISCLI_AUTH in valkey-cli by @HiranmoyChowdhury (#1995)
* Add MGET test to valkey-benchmark by @zuiderkwast (#2015)
* Add support to send multiple arbitrary commands to valkey-benchmark by @zuiderkwast (#2057)
* Support RDMA for valkey-cli and benchmark by @pizhenwei (#2059)
* Support MPTCP for valkey-cli and benchmark by @pizhenwei (#2067)
* Allow valkey-benchmark to support multiple random (or sequential) placeholders by @SoftlyRaining (#2102)
* Change default values of valkey-cli to use valkey naming, and added fallback to old values by @avifenesh (#2334)
* Fix duplicate Acks for RDMA events and fix extremely large max latency for RDMA benchmark (#2430)
### Behavior Change
* Move auth check to the front, before command exist/arity/protected check by @enjoy-binbin (#1475)
* Include command fullname in error message when returning errors in multi-execs by @enjoy-binbin (#2286)
* Add STALE command flag to SCRIPT-EXISTS, SCRIPT-SHOW and SCRIPT-FLUSH by @enjoy-binbin (#2419)
### Contributors
* Ran Shidlansik @ranshid
* Binbin @enjoy-binbin
* Jacob Murphy @murphyjacob4
* Madelyn Olson @madolson
* YueTang-Vanessa @YueTang-Vanessa
* cxljs @cxljs
* Sarthak Aggarwal @sarthakaggarwal97
* amanosme @amanosme
* Hanxi Zhang @hanxizh9910
* Seungmin Lee @sungming2
* uriyage @uriyage
* Katie Holly @Fusl
* Nicky-2000 @Nicky-2000
* Allen Samuels @allenss-amazon
* yzc-yzc @yzc-yzc
* zhaozhao.zz @soloestoy
* asagegeLiu @asagege
* nitaicaro @nitaicaro
* Matthew @utdrmac
* Omkar Mestry @omanges
* Viktor Söderqvist @zuiderkwast
* kukey @kukey
* Harkrishn Patro @hpatro
* Avi Fenesh @avifenesh
* Amit Nagler @naglera
* Josh Soref @jsoref
* youngmore1024 @youngmore1024
* Rain Valentine @SoftlyRaining
* skyfirelee @artikell
* Wen Hui @hwware
* yulazariy @yulazariy
* Yakov Gusakov @gusakovy
* charsyam @charsyam
* Simon Baatz @gmbnomis
* Thalia Archibald @thaliaarchi
* chzhoo @chzhoo
* xbasel @xbasel
* Stav Ben-Tov @stav-bentov
* wuranxx @wuranxx
* Ayush Sharma @ayush933
* chx9 @chx9
* KarthikSubbarao @KarthikSubbarao
* Hüseyin Açacak @huseyinacacak-janea
* アンドリー・アンドリ @odaysec
* Ping Xie @PingXie
* Lipeng Zhu @zhulipeng
* Linus Unnebäck @LinusU
* Vitah Lin @vitahlin
* kronwerk @kronwerk
* Vadym Khoptynets @poiuj
* muelstefamzn @muelstefamzn
* zhenwei pi @pizhenwei
* George Padron @DoozkuV
* Björn Svensson @bjosv
* aradz44 @aradz44
* Hiranmoy Das Chowdhury @HiranmoyChowdhury
* Yair Gottdenker @yairgott
* Roshan Khatri @roshkhatri
* nesty92 @nesty92
* carlosfu @carlosfu
* Arthur Lee @arthurkiller
* Shai Zarka @zarkash-aws
* Sergey Kolosov @skolosov-snap
* Nathan Scott @natoscott
* lucasyonge @lucasyonge
* WelongZuo @WelongZuo
* Jim Brunner @JimB123
* jeon1226 @jeon1226
* Benson-li @li-benson
* Meinhard Zhou @MeinhardZhou
* Nikhil Manglore @Nikhil-Manglore
* Bogdan Petre @bogdanp05
* eifrah-aws @eifrah-aws
* Ricardo Dias @rjd15372
* secwall @secwall
* Anastasia Alexandrova @nastena1606
* Marek Zoremba @zori-janea
* VoletiRam @VoletiRam