Highlights
This new release introduces significant features, improvements, and fixes.
A critical fix is that the server will crash when using ZRANDMEMBER for non-existent keys, please see #2982.
We introduce a few new commands and enhance some old commands, including:
- CLIENT REPLY to allow clients to control server reply behavior
- KPROFILE to enable/disable/dump the memory profiling
- FLUSHMEMTABLE to flush memtables
- FLUSHBLOCKCACHE to explicitly release the block cache
Another highlight is that the community is working to support the TDIGEST data structure, but we don't bring it to this release for stable consideration.
New Features
- feat(cmds): Add support for CLIENT REPLY subcommand and related tests by @DCjanus in #2943
- feat(tdigest): Add support for QUANTILE command by @SharonIV0x86 in #2849
- feat(command): add a new command to enable/disable/dump the memory profiling by @git-hulk in #3007
- feat(command): Add redis command to flush memtables by @Ryan4253 in #3022
- feat(command): add new command to release block cache by @sryanyuan in #3049
Improvements
- feat(search): add debug mode for FT.EXPLAINSQL by @PragmaTwice in #2886
- refactor: replace glog with spdlog by @PragmaTwice in #2881
- feat(logs): enable saving the slow logs into the file by @greatsharp in #2903
- chore(search): rename TopNSort to TopN by @xiedeyantu in #2930
- feat(event): add logging for blob file creation and deletion by @Ryan4253 in #3014
- feat(config): allow to configure the rocksdb.min_write_buffer_number_to_merge by @nathanlo-hrt in #3016
- feat(storage): allow to enable the blob cache by @Ryan4253 in #3027
- feat(search): accept DIALECT option in FT.SEARCH by @PragmaTwice in #3037
- feat(config): allow to configure the rocksdb.sst_file_delete_rate_bytes_per_sec by @sryanyuan in #3040
- chore(search): use c++ attributes gnu::may_alias by @PragmaTwice in #3045
- chore(log): replace logging calls in
cli/*
andcommon/*
by @PragmaTwice in #2888 - chore(log): replace logging calls in
utils/kvrocks2redis
by @PragmaTwice in #2890 - chore(log): replace logging calls in
config/*
by @sharatthk in #2891 - chore(log): add unreachable() based on the current logging infra by @PragmaTwice in #2893
- chore(log): replace logging calls in
types/*
by @yezhizi in #2892 - chore(log): remove the DCHECK macro by @PragmaTwice in #2896
- chore(log): replace logging calls in
cluster/*
by @SharonIV0x86 in #2894 - chore: fix & cleanup RESP error messages by @PragmaTwice in #2902
- chore(log): replace logging calls in commands/* by @XueSongTap in #2905
- chore(util): add prefix/suffix string util functions by @PragmaTwice in #2911
- chore(log): replace logging calls in server/* by @xiedeyantu in #2928
- chore(log): replace logging calls in storage/* by @SharonIV0x86 in #2909
- chore(log): replace logging calls in storage/rdb by @PragmaTwice in #2936
Bug Fixes
- fix(protocol): inline mode should allow the quoted string by @git-hulk in #2873
- fix: typo in compaction checker by @geonove in #2879
- fix(tdigest): fix centroid encoding overwrite for same mean by @LindaSummer in #2878
- feat(storage): support for sideloading SSTs by @ltagliamonte-dd in #2845
- fix(stream): should return an empty string instead of nil in XREAD/XRANGE by @git-hulk in #2897
- feat(script): pass storage context through scripting by @PragmaTwice in #2901
- fix(core): potential data race between blocking command and transaction by @git-hulk in #2910
- fix(zset): wrong RESP reply in ZRANDMEMBER and ZMSCORE command by @weim0000 in #2937
- fix(zset): crash in ZRANDMEMBER for non-existent keys by @weim0000 in #2982
- fix(zset): wrong RESP reply in ZMSCORE command for non-existent key by @weim0000 in #2983
- fix(list): dst-key's version is 0 in rpoplpush cmd for non-existent dst-key by @weim0000 in #2985
- fix(stream): ensure XINFO STREAM command has enough arguments by @rmsacks in #2994
- fix(search): missing the indexing phase for scripting by @PragmaTwice in #2998
- fix(txn): wrong RESP reply for EXEC if error occurred in commit by @PragmaTwice in #2996
- fix(event): should log reason string instead of id in EventListener::OnFlushCompleted by @Ryan4253 in #3012
- fix(storage): don't try to commit empty write batches by @nathanlo-hrt in #3015
- fix: Unset change_level if level_compaction_dynamic_level_bytes is enabled by @hotpxl in #3020
- fix(core): remove extraneous RocksDB::CancelAllBackgroundWork calls (#3017) by @Ryan4253 in #3019
- fix(core): Avoid hardcoding RocksDB property strings by @Ryan4253 in #3029
- fix(config): Parse rocksdb.max_bytes_for_level_base as uint64_t by @Ryan4253 in #3032
- fix(config): Setting rocksdb.level0_slowdown_writes_trigger to 0 disables it by @Ryan4253 in #3034
- fix(config): the default log-dir should include stdout by @PragmaTwice in #3085
Misc
- chore(deps): bump rocksdb to v10.0.1 by @aleksraiden in #2864
- chore: clean up cgo flags and conditionally compile grocksdb by @PragmaTwice in #2885
- chore(ci): mark the branch 2.12 as a protected branch by @git-hulk in #2895
- fix(ci): use CMAKE 3.31 instead of 4.0 in macOS by @git-hulk in #2899
- fix(ci): add workaround for rocksdb compiling on arch linux gcc 15 by @LindaSummer in #2929
- chore(deps): bump Google test to v1.17.0 by @aleksraiden in #2913
- chore(ci): update crate-ci/typos action to v1.32.0 by @aleksraiden in #2926
- chore(deps): bump fmtlib to 11.2.0 by @aleksraiden in #2925
- chore(tests): remove SST load command test and grocksdb by @git-hulk in #2942
- chore(deps): bump rocksdb to v10.2.1 by @aleksraiden in #2912
- chore(deps): bump spdlog to 1.15.3 by @aleksraiden in #2951
- ci: add a clang build job in ubuntu ARM runner by @PragmaTwice in #2952
- chore(README): refine the wording for supported platform, cluster and license by @PragmaTwice in #2953
- chore(config): mark the configuration
rocksdb.row_cache_size
as deprecated by @git-hulk in #2989 - chore(config): change
raw-key-value
as the default cluster migration type by @git-hulk in #2990 - chore: remove ghproxy option in x.py by @PragmaTwice in #2991
- chore(deps): update go deps by @aleksraiden in #2999
- build(jemalloc): enable the profiling option when compiling the jemalloc by @git-hulk in #3001
- build: replace zlib with zlib-ng for rocksdb compression by @PragmaTwice in #3003
- chore(Dockerfile): enable the jemalloc option but no active by @git-hulk in #3011
- chore(deps): Bump cpptrace to v1.0.0 by @aleksraiden in #3025
- chore(deps): bump cpptrace to v1.0.2 by @aleksraiden in #3039
- chore(deps): bump oneTBB to v2022.2.0 by @aleksraiden in #3043
- chore(ci): bump crate-ci/typos to 1.34.0 by @aleksraiden in #3042
- chore(deps): bump rocksdb v10.4.2 by @aleksraiden in #3050
New Contributors
- @geonove made their first contribution in #2879
- @sharatthk made their first contribution in #2891
- @XueSongTap made their first contribution in #2905
- @xiedeyantu made their first contribution in #2928
- @DCjanus made their first contribution in #2943
- @rmsacks made their first contribution in #2994
- @Ryan4253 made their first contribution in #3012
- @hotpxl made their first contribution in #3020
Full Changelog: v2.12.1...v2.13.0-rc1