github apache/kvrocks v2.14.0
2.14.0

11 hours ago

Highlights

Added WAIT — Blocks after a write until N replicas acknowledge (or timeout), returning the ack count. Enables synchronous-style replication for stronger durability and consistency in Kvrocks.

Added T-Digest — Probabilistic data type for fast, memory-efficient approximate percentiles on streams and large datasets. Ideal for latency histograms, telemetry, and anomaly detection. See supported commands.

Lua scripting: strict key-access mode — Enforces access only to keys declared via EVAL/FCALL. In this mode the global lock is removed, delivering much higher concurrency and throughput. Recommended for workloads that heavily use Lua scripts.

Dep Updates — RocksDB is upgraded to version 10.6.2 in this release.

Other notable updates — Added RISC-V support; significant replication performance/stability improvements; and Search enhancements, including a compaction filter and skipping expired keys during queries.

New features

  • feat(replication): implement WAIT without timeout support by @zhixinwen in #3047
  • feat(tdigest): add TDIGEST.MERGE command implementation by @LindaSummer in #3054
  • feat(replication): make replication delay configurable by @zhixinwen in #3087
  • feat(namespace): add a subcommand to show the current ns name by @PragmaTwice in #3088
  • feat(replication): clean up all wait_contexts in CleanupWaitConnection by @zhixinwen in #3104
  • feat(replication): replication support group sync by @zhixinwen in #3092
  • feat(function): support subcommand FUNCTION FLUSH by @PragmaTwice in #3119
  • feat: Add support for RISC-V architecture by @wanghan-sanechips in #3053
  • feat(replication): WAIT cmd supports timeout by @zhixinwen in #3117
  • feat(scripting): support strict key-accessing mode for lua scripting by @PragmaTwice in #3139
  • feat(config): add RocksDB periodic compaction controls by @sryanyuan in #3170
  • feat(info): expose RocksDB level file count and pending compaction bytes via info by @sryanyuan in #3181
  • feat(replication): add replication-no-slowdown config by @zhixinwen in #3219

Improvements

  • feat(replication): implement WAIT based on replica acks by @zhixinwen in #3061
  • feat(replication): set low watermark when reading replication data by @zhixinwen in #3098
  • feat(function): propagate FUNCTION FLUSH/DELETE to replicas by @PragmaTwice in #3121
  • feat(Dockerfile): use a numeric UID instead of a username by @SpecLad in #3138
  • feat(script): make EVAL & FCALL exclusive if lua-strict-key-accessing is disabled by @PragmaTwice in #3155
  • feat(command): return all flags in COMMAND INFO by @PragmaTwice in #3160
  • feat(replication): optimize wait and replication locks by @zhixinwen in #3090
  • feat(search): support to skip expired keys in query by @PragmaTwice in #3086
  • feat(replication): implement _getack for quick WAIT response by @zhixinwen in #3075
  • feat(search): add a compaction filter for search column family by @PragmaTwice in #3084
  • chore(common): refactor parse utils via std::from_chars by @PragmaTwice in #3052
  • build: disable LTO in debug mode by @PragmaTwice in #3069
  • chore(metadata): optimize RedisTypeNames & make timeseries an emptyable type by @PragmaTwice in #3083
  • chore(function): make LUA_GC_CYCLE_PERIOD a global constant by @PragmaTwice in #3116
  • chore: remove unused autoResizeBlockAndSST method and config by @jonahgao in #3136
  • chore(config): enable level_compaction_dynamic_level_bytes by default by @jonahgao in #3144
  • perf(storage): eliminate unnecessary rocksdb::DB::ListColumnFamilies() by @jonahgao in #3145
  • build: fix build with Homebrew Clang on macOS by @sryanyuan in #3154
  • perf(scan): optimise scan performance when scanning keys with a tag by @sryanyuan in #3156
  • perf(repl): only calculate crc of fetched file when needed by @jonahgao in #3161
  • refactor(storage): optimize MDel with MultiGet options by @cyningsun in #3195
  • chore(cluster): check and send the migration batches when the buffer is full by @hll1213181368 in #3227

Bug fixes

  • fix(config): the default log-dir should include stdout by @PragmaTwice in #3085
  • fix(migration): send migration batch while full to avoid oom by @greatsharp in #3094
  • fix(search): support number literal for tag fields by @zhenghaoz in #3096
  • fix(key): check status returned from SETEX and PSETEX by @hll1213181368 in #3108
  • fix(hscan): HSCAN support NOVALUES by @LiuQhahah in #3109
  • fix(search): support escaped character in tags by @zhenghaoz in #3110
  • fix(function): reset lua states from all workers in FUNCTION DELETE by @PragmaTwice in #3115
  • fix(search): convert query tag to lowercase if case insensitive by @zhenghaoz in #3118
  • fix(search): wrong upper bound in reverse scan for infinity by @zhenghaoz in #3124
  • fix(replication): Fix Seg Fault On Signal When Replication is Enabled by @zhixinwen in #3131
  • fix(scan): pattern-based SCAN iterations may skip remaining keys by @sryanyuan in #3146
  • fix(namespace): set token can delete another namespace by @jonahgao in #3149
  • fix(test): flaky test case in KMETADTA command by @git-hulk in #3150
  • fix(repl): check the status of listing checkpoint files by @jonahgao in #3158
  • fix(list): check the status of rocksdb iterator by @jonahgao in #3168
  • fix(stream): XPENDING won't return the idle and deliver count when reading with id '<' by @git-hulk in #3185
  • fix(ts): Disable TS.MGET/MRANGE in cluster mode by @yezhizi in #3182
  • fix(json): allow to insert at the end of the array by @git-hulk in #3186
  • fix(ts): Avoid aggregating empty downstream bucket when writing to empty series by @yezhizi in #3184
  • fix(ts): Ensure downstream deletion of all subsequent data from latest bucket by @yezhizi in #3183
  • fix(command): RESET should be only allowed to run with admin role by @git-hulk in #3191
  • fix(command): MONITOR command should redact sensitive tokens by @git-hulk in #3193
  • fix(ts): Ensure required keywords in commands and correct TS.CREATERULE syntax by @yezhizi in #3192
  • fix(server): data race when accessing the db scan info by @git-hulk in #3199
  • fix(tests): flaky test cases due to the command execution order in WAIT command by @git-hulk in #3200
  • fix(ts): Enhance retrieval of source and target series in compaction rule by @yezhizi in #3201
  • fix(storage): data race when closing the DB by @git-hulk in #3203
  • fix: gcc15 compiler warning free-nonheap-object in cmd_search.cc by @LindaSummer in #3172
  • fix(util): avoid the overload conflict of StringJoin by @PragmaTwice in #3207
  • fix(replication): send ack on ping even if no data written by @zhixinwen in #3220
  • fix(config): disallow setting migrate-batch-rate-limit-mb to zero by @hll1213181368 in #3228
  • fix(replication): fix stuck replication due to wrong watermark by @zhixinwen in #3243

Misc

New Contributors

Full Changelog: v2.13.0...v2.14.0-rc1

Don't miss a new kvrocks release

NewReleases is sending notifications on new releases.