Skip to content

Releases: apache/kvrocks

2.10.1

24 Oct 15:10
Compare
Choose a tag to compare

This release only addresses some critical bugs found in 2.10.0.

Bug Fixes

  • fix(stream): change XREADGROUP response for empty read response #2569 by @jonathanc-n
  • fix(stream): Fix XPENDING serialization issue #2566 by @nathanlo-hrt
  • fix(stream): fix XINFO group metadata key overlapping. #2576 by @LindaSummer
  • fix: some rocksdb properties are counted multiple times #2589 by @sryanyuan
  • fix: should remove the db lock from the context to prevent blocking user requests #2597 by @git-hulk
  • fix(json): JSON.MSET may update on the old json value #2579 by @poipoiPIO
  • fix(rocksdb): downgrade RocksDB to v9.3.1 due to a blobdb issue #2614 by @git-hulk

2.10.0

06 Oct 12:05
Compare
Choose a tag to compare

Important Notice

This new release introduces significant features, improvements, and fixes.

Dependency Updates: RocksDB version bumps from 8.11.4 to 9.6.1.

Highlights

The new data structure HyperLogLog and its commands are supported now, users can use PF* commands in Kvrocks. Thanks to contributors: @mapleFU @tutububug.

All stream group commands are supported in this release which makes Kvrocks totally compatible with Redis stream.

We allow to enhance the transaction consistency by introducing the db context. It will always use the same snapshot in the transaction while the configuration txn_context_enabled is enabled. Thanks to contributor: @PokIsemaine

Kvrocks Search commands and HNSW index are supported in Kvrocks, but we haven't released them because they're not ready for production at the moment.

New Features

  • feat(config): add compaction-checker-cron to extend original compaction-checker-range by @PragmaTwice in #2383
  • feat(search): Add HNSW encoding index & insertion/deletion algorithm by @Beihao-Zhou in #2368
  • feat(cluster): support migrate slot range by @PokIsemaine in #2389
  • feat(config): change redis-cursor-compatible default value to yes by @jihuayu in #2429
  • feat(json): add support of JSON.RESP command by @jackyyyyyssss in #2390
  • feat(search): support query parameters in SQL and RediSearch query by @PragmaTwice in #2443
  • feat(search): Hnsw Vector Search Plan Operator & Executor by @Beihao-Zhou in #2434
  • feat(config): allow to change the max length of the bulk string by @git-hulk in #2444
  • feat(config): implement integer config option with the unit by @PragmaTwice in #2448
  • feat(hyperloglog): add support of the Hyperloglog data structure by @tutububug in #2142
  • feat(search): implement vector query for sql/redisearch parser & transformer by @Beihao-Zhou in #2450
  • feat(hyperloglog): Add support of PFMERGE command by @mapleFU in #2457
  • feat(search): add support of HNSW vector fields for FT.CREATE by @Beihao-Zhou in #2477
  • feat(command): Implement the new command POLLUPDATES for polling updates by sequence by @git-hulk in #2472
  • feat(conn): add arguments for unknown command message by @PragmaTwice in #2483
  • feat(search): allow to omit ON HASH|JSON in FT.CREATE by @PragmaTwice in #2484
  • feat(script): Support script flags of Eval script and Function by @PokIsemaine in #2446
  • feat: Add slow flags for commands with heavy disk I/O by @jonathanc-n in #2494
  • refactor: Improve consistency and isolation semantics by adding Context parameter to DB API by @PokIsemaine in #2332
  • feat(config): add txn_context_enabled to allow to enable the transaction feature by @PokIsemaine in #2506
  • feat: support limit WriteBatch size by @AntiTopQuark in #2508
  • feat: Bitmap type DUMP/RESTORE command support by @poipoiPIO in #2535

Bug Fixes

  • fix(stream): NOGROUP/BUSYGROUP error message should return without 'ERR' prefix by @git-hulk in #2397
  • fix: Add timeouts to go-redis client and ping on client creation by @torwig in #2404
  • fix(search): misidentify DESC token in SQL parser by @PragmaTwice in #2439
  • fix: monitor dumps 0xffffff prefix for signed char by @PragmaTwice in #2482
  • fix(replication): potential deadlock when switching master frequently by @git-hulk in #2516
  • fix(namespace): didn't reload namespaces from DB after the full sync by @git-hulk in #2527
  • fix(replication): didn't resume the db status after restarting full sync by @git-hulk in #2549
  • fix(rdb): incorrect type conversion during RDB loads the int8 encoding by @fstd2 in #2547
  • fix: add more check in cluster node parsing by @jonathanc-n in #2538
  • fix(test): use fixed seed to improve reproducibility. by @LindaSummer in #2557
  • fix(config): wrong rocksdb config name max_sub_compactions by @ChrisZMF in #2499

Code Improvements

  • refactor: rename variable names for clarity in LCS method by @shoothzj in #2392
  • feat: add iter->status() check for loop iterators by @LindaSummer in #2395
  • perf(conn): skip index matching when index map is empty by @PragmaTwice in #2405
  • chore(resp): extract RESP functions from Connection by @PragmaTwice in #2406
  • refactor(stream): change the encoding of stream consumer group by @Yangsx-1 in #2384
  • chore: fix compiler warning in cluster and HNSW indexing by @jjz921024 in #2436
  • feat(stream): add support of XPENDING command by @Yangsx-1 in #2387
  • chore(hyperloglog): add go test cases and minor optimizations/bugfixes by @mapleFU in #2463
  • feat(search): Hnsw Vector Search Optimizaton Pass by @Beihao-Zhou in #2466
  • feat(command): add category enum for every command by @PragmaTwice in #2479
  • chore: use StringJoin in EnumField::Set by @PragmaTwice in #2485
  • chore: improve the style and document for SlotMigration by @mapleFU in #2465
  • fix(test): remove meaningless list-max-ziplist-size by @PokIsemaine in #2517
  • fix(typo): filed -> field by @AntiTopQuark in #2519
  • test: add go test cases for txn-context-enabled config by @PokIsemaine in #2530
  • chore(tests): add basic tests for the stream consumer group by @jonathanc-n in #2533
  • chore(tests): enhance the namespace replication to prevent flaky test by @git-hulk in #2540
  • chore(tests): refactor and enhance test cases to prevent flaky test failure by @git-hulk in #2544

Build & CI Changes

Read more

2.9.0

09 Jul 10:08
Compare
Choose a tag to compare

Important Notice

This new release introduces significant features, improvements, and fixes.

Numerous new commands are now supported, such as DUMP, SORT, LCS, COPY, ASKING, READONLY, and READWRITE. These additions enhance Kvrocks' capabilities by improving data migration and cluster features. A big thank you to all contributors for their valuable input to Kvrocks.

The default value of CMake option ENABLE_NEW_ENCODING is set to ON, which means the new data type encoding (specified here) is enabled by default while all old data is still compatible. (Note: After you upgrade to Kvrocks 2.9.0 and write new data, if you roll back Kvrocks to 2.3.0 or earlier versions, these newly-written data will not be available.)

Async IO in RocksDB is enabled by default since this release which might bring the performance benefit for the scan behavior if the io uring is supported.

In addition, the config option compaction-checker-range is still available but is marked as deprecated. We recommend using compaction-checker-cron instead. Also, the cron syntax in the config file has been extended. For example, you can now use cron expressions like * */2 1,3-6,8 * *.

Kvrocks Search (compatible with both SQL and RediSearch queries) and stream groups are two experimental new features that are already available in the unstable branch, but they are not enabled in this release.

RocksDB is still in version 8.11 (8.11.4) for this version. However, in the next feature release, we plan to bump RocksDB to version 9.

New Features

  1. Add the support of the LCS command by @JoverZhang in #2116
  2. Add compression level option by @Beihao-Zhou in #2171
  3. Add support of READONLY and READWRITE by @LiuYuHui in #2173
  4. Support value setting for nonexistent paths in JSON.SET by @PragmaTwice in #2178
  5. Add BIT support to BITPOS by @sheharyaar in #2170
  6. Add support of the command MOVEX by @Chiro11 in #2225
  7. Add support of the command DUMP by @AntiTopQuark in #2227
  8. Add support of the command JSON.MSET by @zjregee in #2228
  9. Add support of the SORT command by @PokIsemaine in #2262
  10. Support ASKING command by @jjz921024 in #2273
  11. Add support of the command JSON.DEBUG MEMORY by @jackyyyyyssss in #2323
  12. Enable the rocksdb async io by default by @xiaobiaozhao #2308

Bug Fixes

  1. Fix glog may buffer the stdout's output by @i18n-now in #2131
  2. Fix duplicate flag for building rocksdb by @aleksraiden in #2139
  3. Fix build warnings: local variable 's' will be copied despite being returned by name by @aleksraiden in #2148
  4. Fix missing fields in HELLO command response by @git-hulk in #2150
  5. Fix XREADGROUP command didn't fetch the latest metadata after creating a consumer by @Yangsx-1 in #2153
  6. Fix the pidfile and backup_dir will be rewritten even though they weren't modified by @git-hulk in #2186
  7. Fix wrongly append the ERR prefix in no script error by @lloydzhou in #2201
  8. Fix should forbid importing the slot which belongs to itself in cluster mode by @git-hulk in #2209
  9. Fix GetOptions in C++17 build by @mapleFU in #2213
  10. Fix wrongly try to rewrite the namespace in the cluster mode by @git-hulk in #2221
  11. Fix should use the minimum compatible RDB version when dumping the payload by @git-hulk in #2252
  12. Fix the replica should remove the master link when receiving the CLUSTER RESET command by @git-hulk in #2259
  13. Fix unused-variable error for lower gcc version due to structure bindings by @13015517713 in #2265
  14. Fix the error logging when the importer is not in a started state by @git-hulk in #2280
  15. Fix JSON.[STRLEN|OBJLEN] response inconsistently with Redis when the path doesn't exist by @jackyyyyyssss in #2336
  16. Fix minica version in CI workflow to prevent TLS test failure by @PragmaTwice in #2307
  17. Fix compiler warnings in KQIR and RDB by @raffertyyu in #2303
  18. Fix plan operator child iterator in KQIR by @PragmaTwice in #2282
  19. Fix JSON.ARRTRIM key no exists by @jackyyyyyssss in #2374
  20. Fix config: avoid rewriting the config file if it's unnecessary by @git-hulk in #2347
  21. Fix stream: make consumer decrement pending number when message is acknowledged by @LindaSummer in #2352

Code Improvements

  1. Extract common/port.h and optimize dbstats by @mapleFU in #2145
  2. Add macos arm64 runner to actions workflow by @PragmaTwice in #2155
  3. Optimize numeric comparison via interval analysis in KQIR by @PragmaTwice in #2257
  4. Refactor TTL processing in string type by @PragmaTwice in #2250
  5. Improve code style in cluster by @jihuayu in #2272
  6. Refactor Column Family Handling by @mapleFU in #2296
  7. Improve logging message for retryable background IO errors by @VasuDevrani in #2317
  8. Optimize the implementation of IntervalSet intersection by @13015517713 in #2300
  9. Improve RESP handling code in replication by @PragmaTwice in #2334
  10. Refactor cron: add CronPattern and implement more cron syntax by @PragmaTwice in #2377

Build & CI Changes

  1. Uniform image update/upgrade in Dockerfile by @aleksraiden in #2138
  2. Try to workaround the broken ubuntu image by @git-hulk in #2161
  3. Revert broken ubuntu image temporary fix by @enjoy-binbin in #2189
  4. Bump zstd to v1.5.6 by @aleksraiden in #2204
  5. Add semantics checker for KQIR by @PragmaTwice in #2207
  6. Add a simple pass manager for KQIR by @PragmaTwice in #2226
  7. Bump Snappy to 1.2.0 by @aleksraiden in #2224
  8. (ci) Bump apache/skywalking-eyes to 0.6.0 by @aleksraiden in #2241
  9. Enable CI for kvrocks2redis by @Zakelly in #2175
  10. ci(pr-lint): force the PR title to follow the conventional commits by @PragmaTwice in #2342
  11. Upload build artifact for the sonar scan by @git-hulk in #2321
  12. Fix missing temp dir while running sonar scan by @git-hulk in #2322
  13. Bump Snappy v1.2.1 by @aleksraiden in #2325
  14. Set ENABLE_NEW_ENCODING=FALSE in CI workflow by @PragmaTwice in #2333
  15. (ci) Remove 'ps aux' command from kvrocks2redis test by @aleksraiden in #2337
  16. chore: bump rocksdb to v9.2.1 by @aleksraiden in #2327
  17. chore: bump jsoncons to v176.0 by @aleksraiden in #2328
  18. test: fix listpack decoding in kvrocks2redis integration tests by @PragmaTwice in #2345
  19. build: set ENABLE_NEW_ENCODING=FALSE when building kvrocks2redis by @PragmaTwice in #2350
  20. chore: bump rocksdb to v9.2.2 by @aleksraiden in #2351

Documentation Changes

  1. Add more documents in KQIR by @PragmaTwice in #2196
  2. Fix invalid url in docs by @mapleFU in #2192
  3. Update "Type Conversion" doc by @PragmaTwice in #2235
  4. Fix doc typo by @Yangsx-1 in #2240
  5. Add more docs for the dynamic column family by @mapleFU in #2298

2.8.0

08 Mar 02:47
Compare
Choose a tag to compare

Important Notice

Dependency Updates: RocksDB is bumped from 8.8.1 to 8.11.3 in this version.

Highlights:

Set the default value of redis-cursor-compatible to yes, so from this version, Kvrocks' SCAN will be compatible with Redis by default. We also proudly announce that RESP3 is fully supported now, you can enable the RESP3 feature via set resp3-enabled yes.

In addition, the cluster now can use the rocksdb write-batch to migrate slot data between instances via the APPLYBATCH command, which is faster and consumes less CPU compared to the replay command way.

It is worth mentioning that the community is working on the RedisSearch module, and we look forward to seeing RedisSearch in a future release.

New Features

Bug Fixes

  • Fix redundant ERR prefix in cluster redirect error message by @git-hulk in #1928
  • Avoid to fetch old value in SET command if NX/XX/GET/KEEPTTL is not set by @git-hulk in #1968
  • Fix parse BITCOUNT by @tisonkun in #1979
  • Fix RESET arity and command flags by @enjoy-binbin in #2018
  • Fix crash in zset store getkeys, fix zdiff/bzmpop range, add tests by @enjoy-binbin in #2051
  • Bugfix: BITCOUNT/BITPOS negative handling fixing by @mapleFU in #2069
  • Fix incorrent bytes to calculate length of ziplist/listpack 32bit string by @git-hulk in #2124

Improvements

Misc

Read more

2.7.0

17 Dec 11:08
Compare
Choose a tag to compare

Important Notice

Dependency Updates: RocksDB is bumped from 8.3.3 to 8.8.1 in this version.

Highlights:

We're thrilled to announce that the JSON data structure is supported now, huge thanks to @PragmaTwice and all contributors for making this happen. Also, basic capabilities of Functions have been supported to make up for the lack of modularity of the EVAL-series commands.

From this release, the speedb is allowed to be used as an alternative to rocksdb, you have a try as simple as to append the build option -DENABLE_SPEEDB=ON. Additionally, dynamic change number of worker threads is also supported and users can change it via CONFIG SET workers {NUMBER}. Furthermore, numerous new commands and bug fixes have been implemented.

NOTICE: JSON and BloomFilter is not ready for the cluster mode yet.

New Features

Bug Fixes

Improvements

Misc

New Contributors

Read more

2.6.0

26 Sep 07:42
Compare
Choose a tag to compare

Important Notice

Dependency Updates: RocksDB is bumped from 8.3.2 to 8.3.3 in this version.

Configuration Changes: The default value of max-io-mb is changed to 0 (unlimited), and rocksdb.level_compaction_dynamic_level_bytes changed to yes from no.

Highlights: In this release, we have added support for the BloomFilter data structure and most of its commands (prefixed with BF.). Special thanks to @zncleon and @mapleFU. Additionally, the RESTORE command has been supported by @git-hulk to facilitate various data migration scenarios, such as using RedisShake upon Kvrocks. Moreover, TLS can now secure not only server connections but also replication connections. Furthermore, numerous new commands and bug fixes have been implemented. We extend our gratitude to all contributors!

New Features

Improvements

Bug Fixes

Read more

2.5.1

05 Aug 12:47
Compare
Choose a tag to compare

Highlights: This release only contains bug fixes since 2.5.0 and some critical issues need to be noticed. For #1615, the data race when reading the cluster slot's info may cause the server to crash in cluster mode, and #1568 / #1593 will also crash the server if users pass the wrong arguments.

Bug Fixes

2.5.0

12 Jul 01:55
Compare
Choose a tag to compare

Important Notice

Dependency Updates: RocksDB is bumped from 8.1.1 to 8.3.2 in this version.

Highlights: We have supported Redis-compatible SCAN cursors so that you can use any Redis client library to perform the SCAN far painless than before. Enable it via redis-cursor-compatible in the configuration file. Many thanks to @jihuayu. Meanwhile, lots of ZSET commands are newly supported, like ZMPOP, ZRANGESTORE, BZMPOP, ZUNION. Many thanks to @infdahai for driving them and other contributors for implementing them. The detailed changes and contributors are listed below.

New Features

Improvements

Bug Fixes

Build & CI related

Misc

New Contributors

Full Changelog: v2.4.0...v2.5.0-rc2

2.4.0

03 May 03:49
Compare
Choose a tag to compare

Note: In this release, we have upgraded RocksDB to version 8.1.1. In addition, we have introduced a new storage encoding format that can accommodate 64-bit element count and expiration time in milliseconds. To enable this feature, you must include -DENABLE_NEW_ENCODING=ON during the build process (which is not enabled by default). Once the new encoding is enabled, data stored using the old encoding will remain accessible for reading and writing as usual. However, any new data will be written using the new encoding format.

New Features

Improvements

Bug Fixes

Build & CI related

  • Automatically build and push the docker image when tagging a new version by @git-hulk in #1247
  • Revert "Automatically build and push the docker image when tagging a new version" by @git-hulk in #1248
  • Add header filter for clang-tidy checks by @PragmaTwice in #1249
  • Automatically set the env MACOSX_DEPLOYMENT_TARGET to the current macOS version unless the env is already set by @git-hulk in #1250
  • Enable LuaJIT to improve the performance of scripts by @xiaobiaozhao in #1241
  • build: Drop travis workflow by @tisonkun in #1258
  • Use nproc instead of default for job numbers in docker build to avoid timeout by @PragmaTwice in #1272
  • build: package sources in a folder by @tisonkun in #1332
  • Fix clang-tidy warnings by @torwig in #1334
  • Add clang-tidy checking for unit tests by @PragmaTwice in #1337
  • Add some readability checks and fix all reports in current codebase by @PragmaTwice in #1348
  • Fix stream_metadata enum -Wint-in-bool-context warning by @enjoy-binbin in #1349
  • Enable readability-identifier-naming in clang-tidy by @PragmaTwice in #1383
  • Fix member name convension for readability-identifier-naming by @PragmaTwice in #1385
  • Remove underscore suffix for public member name by @PragmaTwice in #1386
  • Check static class member and type alias name in readability-identifier-naming by @PragmaTwice in #1387
  • Check method and namespace names in readability-identifier-naming by @PragmaTwice in #1388
  • Check function names in readability-identifier-naming by @PragmaTwice in #13...
Read more

2.3.0

22 Feb 13:05
Compare
Choose a tag to compare

For this release, we now upgrade the RocksDB to 7.9.2 which will significantly improve the compaction performance. Another to be noticed, Kvrocks cluster mode will persist the cluster nodes' topology in the local file by default, you can disable it in flight by config set persist-cluster-nodes-enable no.

New Features

  • Add config for log cleaner by @IoCing in #1171
  • Persist the cluster nodes info after applying the cluster topology by @git-hulk in #1219
  • Add ability to set log level via config file by @torwig in #1230

Improvements

Bug Fixes

  • Fix logging initialized before loading by @mapleFU in #1061
  • Harden list_test.go by @tisonkun in #1141
  • Fix redis cli test will fail if cannot read response at once by @git-hulk in #1129
  • Fix the script load should return SHA as the bulk string by @git-hulk in #1133
  • Fix format output in Server::GetRocksDBStatsJson by @PragmaTwice in #1142
  • Increase blocking timeout to harden the blocking pop test case by @git-hulk in #1128
  • Fix wrongly append the ERR prefix in no script error by @git-hulk in #1162
  • Check if the thread is joinable before joining in the replication thread by @git-hulk in #1195
  • Fix SockConect doesn't resolve domain before connecting by @git-hulk in #1183
  • Fix error message passing in Server::Start by @PragmaTwice in #1225
  • Fix deadlock when unblocking connection on stream by @torwig in #1228

Refine Code Style

New Contributors