Releases: apache/kvrocks
2.10.1
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
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
inEnumField::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
- ci: Bump build-push-action to v6 by @aleksraiden in #2367
- chore: protect release branches in .asf.yaml by @PragmaTwice in #2385
- fix(.asf.yaml): branch protection cannot be created by @PragmaTwice in #2386
- ci: use official typos github action by @shoothzj in #2388
- chore(ci): drop CentOS7 in CI since it's EOL now by @git-hulk in #2393
- chore: Bump fmtlib to 11.0.0. by @aleksraiden in #2391
- chore: Bump fmtlib to 11.0.1 by @aleksraiden in #2394
- chore: Bump rocksdb to v9.3.1 by @aleksraiden in #2380
- chore: Bump oneTBB to 2021.13.0 by @aleksraiden in #2375
- chore(.asf.yaml): add release branch 2.9 to protected branches by @PragmaTwice in #2396
- chore(test): bump dependencies of go test by @aleksraiden in #2400
- chore(test): bump dependencies of go-redis by @aleksraiden in #2407
- chore: bump Rocksdb to v9.4.0 by @aleksraiden in #2408
- ci: Update MacOS runner to macos13 by @aleksraiden in #2324
- ci: update runner os from ubuntu 20 to 22 by @PragmaTwice in #2409
- chore(x.py): improve style of commit message for release by @PragmaTwice in #2410
- chore(x.py): revert gotest timeout to 1800sec by @aleksraiden in #2413
- chore: bump googletest to v1.15.0 by @aleksraiden in #2430
- chore: bump cpptrace to v0.6.3 by @aleksraiden in #2412
- chore: bump fmtlib to v11.0.2 by @aleksraiden in #2440
- chore: bump lz4 to v1.10.0 by @aleksraiden in #2441
- feat(ci): integrate Rocky Linux environment into the CI workflow by @SpiffyEight77 in #2451
- build(cmake): update compiler version requirement by @PragmaTwice in #2455
- chore: bump googletest to v1.15.2 by @aleksraiden in #2460
- chore(storage): Remove speedb due to lack of active by @git-hulk in #2476
- feat: use non-root use...
2.9.0
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
- Add the support of the LCS command by @JoverZhang in #2116
- Add compression level option by @Beihao-Zhou in #2171
- Add support of READONLY and READWRITE by @LiuYuHui in #2173
- Support value setting for nonexistent paths in JSON.SET by @PragmaTwice in #2178
- Add BIT support to BITPOS by @sheharyaar in #2170
- Add support of the command MOVEX by @Chiro11 in #2225
- Add support of the command DUMP by @AntiTopQuark in #2227
- Add support of the command JSON.MSET by @zjregee in #2228
- Add support of the SORT command by @PokIsemaine in #2262
- Support ASKING command by @jjz921024 in #2273
- Add support of the command JSON.DEBUG MEMORY by @jackyyyyyssss in #2323
- Enable the rocksdb async io by default by @xiaobiaozhao #2308
Bug Fixes
- Fix glog may buffer the stdout's output by @i18n-now in #2131
- Fix duplicate flag for building rocksdb by @aleksraiden in #2139
- Fix build warnings: local variable 's' will be copied despite being returned by name by @aleksraiden in #2148
- Fix missing fields in HELLO command response by @git-hulk in #2150
- Fix XREADGROUP command didn't fetch the latest metadata after creating a consumer by @Yangsx-1 in #2153
- Fix the pidfile and backup_dir will be rewritten even though they weren't modified by @git-hulk in #2186
- Fix wrongly append the ERR prefix in no script error by @lloydzhou in #2201
- Fix should forbid importing the slot which belongs to itself in cluster mode by @git-hulk in #2209
- Fix GetOptions in C++17 build by @mapleFU in #2213
- Fix wrongly try to rewrite the namespace in the cluster mode by @git-hulk in #2221
- Fix should use the minimum compatible RDB version when dumping the payload by @git-hulk in #2252
- Fix the replica should remove the master link when receiving the CLUSTER RESET command by @git-hulk in #2259
- Fix unused-variable error for lower gcc version due to structure bindings by @13015517713 in #2265
- Fix the error logging when the importer is not in a started state by @git-hulk in #2280
- Fix JSON.[STRLEN|OBJLEN] response inconsistently with Redis when the path doesn't exist by @jackyyyyyssss in #2336
- Fix minica version in CI workflow to prevent TLS test failure by @PragmaTwice in #2307
- Fix compiler warnings in KQIR and RDB by @raffertyyu in #2303
- Fix plan operator child iterator in KQIR by @PragmaTwice in #2282
- Fix JSON.ARRTRIM key no exists by @jackyyyyyssss in #2374
- Fix config: avoid rewriting the config file if it's unnecessary by @git-hulk in #2347
- Fix stream: make consumer decrement pending number when message is acknowledged by @LindaSummer in #2352
Code Improvements
- Extract common/port.h and optimize dbstats by @mapleFU in #2145
- Add macos arm64 runner to actions workflow by @PragmaTwice in #2155
- Optimize numeric comparison via interval analysis in KQIR by @PragmaTwice in #2257
- Refactor TTL processing in string type by @PragmaTwice in #2250
- Improve code style in cluster by @jihuayu in #2272
- Refactor Column Family Handling by @mapleFU in #2296
- Improve logging message for retryable background IO errors by @VasuDevrani in #2317
- Optimize the implementation of IntervalSet intersection by @13015517713 in #2300
- Improve RESP handling code in replication by @PragmaTwice in #2334
- Refactor cron: add CronPattern and implement more cron syntax by @PragmaTwice in #2377
Build & CI Changes
- Uniform image update/upgrade in Dockerfile by @aleksraiden in #2138
- Try to workaround the broken ubuntu image by @git-hulk in #2161
- Revert broken ubuntu image temporary fix by @enjoy-binbin in #2189
- Bump zstd to v1.5.6 by @aleksraiden in #2204
- Add semantics checker for KQIR by @PragmaTwice in #2207
- Add a simple pass manager for KQIR by @PragmaTwice in #2226
- Bump Snappy to 1.2.0 by @aleksraiden in #2224
- (ci) Bump apache/skywalking-eyes to 0.6.0 by @aleksraiden in #2241
- Enable CI for kvrocks2redis by @Zakelly in #2175
- ci(pr-lint): force the PR title to follow the conventional commits by @PragmaTwice in #2342
- Upload build artifact for the sonar scan by @git-hulk in #2321
- Fix missing temp dir while running sonar scan by @git-hulk in #2322
- Bump Snappy v1.2.1 by @aleksraiden in #2325
- Set ENABLE_NEW_ENCODING=FALSE in CI workflow by @PragmaTwice in #2333
- (ci) Remove 'ps aux' command from kvrocks2redis test by @aleksraiden in #2337
- chore: bump rocksdb to v9.2.1 by @aleksraiden in #2327
- chore: bump jsoncons to v176.0 by @aleksraiden in #2328
- test: fix listpack decoding in kvrocks2redis integration tests by @PragmaTwice in #2345
- build: set ENABLE_NEW_ENCODING=FALSE when building kvrocks2redis by @PragmaTwice in #2350
- chore: bump rocksdb to v9.2.2 by @aleksraiden in #2351
Documentation Changes
- Add more documents in KQIR by @PragmaTwice in #2196
- Fix invalid url in docs by @mapleFU in #2192
- Update "Type Conversion" doc by @PragmaTwice in #2235
- Fix doc typo by @Yangsx-1 in #2240
- Add more docs for the dynamic column family by @mapleFU in #2298
2.8.0
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
- Add the support of JSON.MGET command by @skyitachi in #1930
- Add support of new command: ssubscribe and sunsubscribe by @raffertyyu in #2003
- Add support of new command: RESET by @chrisxu333 in #1999
- Add the ApplyBatch command for data migration scenario by @caipengbo in #2010
- Add support of new command: ZRANDMEMBER by @JxLi0921 in #2016
- Add support of the command ZDIFF and ZDIFFSTORE by @MaheshMadushan in #2021
- Add support of the command RENAME&RENAMENX by @jihuayu in #2026
- Add support of using hyper clock cache as the block cache by @JxLi0921 in #2031
- Implement the unify WAL iterator by @caipengbo in #2040
- Initialize metadata and tag indexing encoding for RediSearch by @PragmaTwice in #2066
- Allow to migrate cluster slot by raw write batch by @caipengbo in #2067
- Add search metadata encoding for numeric fields by @PragmaTwice in #2086
- Support BIT and BYTE options in the BITCOUNT command by @kay011 in #2087
- Add a noindex flag to search metadata by @PragmaTwice in #2094
- Set the redis-cursor-compatible field to yes in the initial configuration by @jihuayu in #2103
- Implement index updating for numeric and tag field by @PragmaTwice in #2115
- Fallback to use the redis command migration type if the target don't support the ApplyBatch command by @caipengbo in #2117
- Implement the RESP3 boolean type by @git-hulk in #1991
- Implement the RESP3 null for the nil string and array by @git-hulk in #2017
- Implement RESP3 set type for the set data structure by @git-hulk in #2024
- Add the support of RESP3 map type by @git-hulk in #2028
- Add RESP3 big number by @git-hulk in #2034
- Add the support of RESP3 double type by @git-hulk in #2053
- Add support of RESP3 attribute type by @git-hulk in #2088
- Add support of RESP3 verbatim string by @wsehjk in #2102
- Add support of RESP3 in Lua by @git-hulk in #2119
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
- Add redis_mode/kvrocks_mode fields in INFO SERVER by @enjoy-binbin in #1927
- Add the rocksdb's block cache hit/miss count to the INFO command by @git-hulk in #1938
- Add SET command KEEPTLE and GET options supported by @jihuayu in #1935
- Add no-multi no-script flags to SHUTDOWN command by @enjoy-binbin in #1957
- Add support of EXPIRETIME and PEXPIRETIME by @kay011 in #1965
- Record and export the keyspace hit/miss count to INFO command by @git-hulk in #1971
- Add the support of ANALYZE command to inspect the performance of RocksDB by @chrisxu333 in #1943
- Add INFO comment when DB not scaned by @jihuayu in #1956
- Allow to get the latest sequence number when creating the backup by @git-hulk in #1987
- Add support of BITFIELD_RO by @jyf111 in #1990
- Add the support of ZINTER and ZINTERCARD by @kay011 in #1992
- Replace manual RedisType check by calling IsSingleKVType by @PragmaTwice in #2013
- Make the result of SRANDMEMBER random by @wsehjk in #2032
- Ignore max-db-size limit when deleting data or writing aux informations by @caipengbo in #2047
- Use human readable string instead of the integer when printing flush/compaction reason by @git-hulk in #1962
- Add usage of std::move where compiler suggested by @torwig in #2099
- Check if the type is an entry while iterating the stream subkeys by @jihuayu in #2112
- Make BITPOS in Bitmap handling
stop_given
by @mapleFU in #2085 - Make COMMAND command consistent with redis when the renamed command exists by @caipengbo in #2123
- Bump jsoncons to 0.173.2 by @aleksraiden in #2082
- Bump speedb to 2.8.0 by @aleksraiden in #2080
- Bump fmtlib to 10.2.1 by @aleksraiden in #2081
- Bump jsoncons to 0.173.4 by @aleksraiden in #2089
- Bump span-lite to 0.11.0 by @aleksraiden in #2092
- Bump typo checker in CI to 1.18.1 by @aleksraiden in #2093
- Bump rocksdb to v8.9.1 by @aleksraiden in #1933
- Bump rocksdb to 8.10.0 by @aleksraiden in #2005
- Bump rocksdb to 8.10.2 by @aleksraiden in #2110
- Bump rocksdb to 8.11.3 by @aleksraiden in #2122
Misc
- Unify the way of parsing metadata by @git-hulk in #1964
- Optimize ParseMetadata by introducing RedisTypes by @PragmaTwice in #1967
- Update copyright date in NOTICE by @PragmaTwice in #1975
- Refactor kvrocks2redis via rocksdb secondary instance by @maochongxin in #1963
- The storage engine type awareness in Kvrocks by @MaheshMadushan in #1973
- Implement an unify key-value iterator for Kvrocks by @git-hulk in #2004
- Minor refactor the implementation of the command ZRANDMEMBER by @mapleFU in #2025
- Add type check before metadata decode by @jihuayu in #2015
- Minor: improve the style of zdiff by @mapleFU in #2027
- Clarification in kvrocks.conf that disable_wal will break replication by @pleaseshutup in #2029
- Run SonarQube scan in Github Actions to support coverage analysis by @PragmaTwice in #2030
- Fix build file missing in SonarCloud CI by @PragmaTwice in #2033
- Fix shell command in SonarCloud CI by @PragmaTwice in #2037
- Only runs sonar action on the main repo by @jihuayu in #2038
- Minor: avoid the implicit conversion from PinnableSlice to Slice by @mapleFU in #2039
- Remove the second parameter of MultiBulkString by @PragmaTwice in #2042
- Use condition argument of cv.wait instead of loop by @PragmaTwice in #2043
- fix(debug command): update err msg
int
->integer
by @AntiTopQuark in #2046 - Enhance error handling and types in BITFIELD by @mapleFU in #2041
- Dump github event information in CI by @PragmaTwice in #2049
- Fix sonar ...
2.7.0
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
- Add the support of the BF.INSERT command by @zncleon in #1768
- Add the support of the BLMPOP command by @HolyLow in #1774
- Add speedb as an alternative to rocksdb by @PragmaTwice in #1792
- Add the support of the namespace replication by @git-hulk in #1776
- Add support of command FCALL_RO by @PragmaTwice in #1791
- Implement FUNCTION commands like redis by @PragmaTwice in #1788
- Add LISTLIB subcommand as an extension to FUNCTION by @PragmaTwice in #1796
- Add the support of the load RDB command by @xq2010 in #1798
- Add subcommand and permission check to RDB command by @PragmaTwice in #1834
- Allow to change the worker thread number in-flight by @git-hulk in #1855
- Support for the BITFIELD command by @julic20s in #1901
- Support pinnable slice get by @chrisxu333 in #1888
- Support for the JSON.ARRLEN command by @Ziy1-Tan in #1856
- Support for the JSON.TOGGLE command by @MaheshMadushan in #1875
- Support JSON.ARRINDEX command by @skyitachi in #1865
- Support for CBOR as a storage format for the JSON data type by @PragmaTwice in #1871
- Support for the JSON.OBJKEYS command by @jihuayu in #1872
- Support for the JSON.ARRPOP command by @jyf111 in #1874
- Add support for the JSON.MERGE command by @2rueSid in #1852
- Support for the JSON.ARRTRIM command by @jihuayu in #1881
- Support for the JSON.ARRINSERT command by @jihuayu in #1867
- Support for JSON.STRAPPEND and JSON.STRLEN command by @guojidan in #1841
- Support for the JSON.OBJLEN command by @isHuangXin in #1860
- Support for the JSON.DEL command by @Qiaolin-Yu in #1859
- Support JSON.NUMINCRBY and JSON.NUMMULTBY command by @skyitachi in #1890
- Support of JSON.FORGET command by @git-hulk in #1917
- Support of JSON.TYPE command by @git-hulk in #1847
- Add type name of JSON in redis_metadata.h by @PragmaTwice in #1848
- Support for the JSON.CLEAR command by @2rueSid in #1850
- Add the support of the JSON.ARRAPPEND command by @lieck in #1837
- Support format options for
JSON.GET
by @PragmaTwice in #1840 - Add support of new command JSON.SET and JSON.GET by @PragmaTwice in #1803
Bug Fixes
- Fix should listen on 0.0.0.0 in docker image by @git-hulk in #1784
- Fix server crash when receiving the empty inline command by @git-hulk in #1909
- Fix unescaped characters in configuration rewriting by @PragmaTwice in #1880
- Fix server cannot start without the configuration file by @git-hulk in #1804
- Fix name of rocksdb's write delay and stop stats in INFO command by @git-hulk in #1916
- Fix potentially overflow msg_namelen value in SupervisedSystemd by @PragmaTwice in #1891
- Fix no binary directory error of xxhash in CMake by @PragmaTwice in #1779
- Fix Endian handling in rdb_intset by @mapleFU in #1830
- Fix TBB compile failure due to
-Werror
and#warning
by @PragmaTwice in #1887 - Fix output when key is not found in JSON.GET by @PragmaTwice in #1845
- Fix status mis-return in JSON.CLEAR and polish code style by @PragmaTwice in #1853
- Fix arity of JSON.SET by @mapleFU in #1849
- Fix JSON.DEL should return 0 if the key was not found by @git-hulk in #1918
- Fix code style of Json::ArrAppend by @PragmaTwice in #1846
Improvements
- Add column family parameter to Compact methon by @raffertyyu in #1878
- Allow create-cluster to be run from other dirs, not just its own dir by @enjoy-binbin in #1773
- Enable rocksdb read option
avoid_unnecessary_blocking_io
to avoid unexpected long latency by @wanghenshui in #1903 - Make a compile error while facing unused variables by @PragmaTwice in #1854
- Add more sanity checks for docker image by @jyf111 in #1877
- Change the default value of cmake option DEPS_FETCH_PROXY by @git-hulk in #1900
- Catch up for json-set with multiple values by @mapleFU in #1827
- Bump rocksdb to 8.5.4 by @aleksraiden in #1786
- Bump rocksdb to version 8.6.7 by @aleksraiden in #1794
- Bump rocksdb to 8.7.3 by @aleksraiden in #1902
- Bump rocksdb to 8.8.1 by @aleksraiden in #1904
- Bump jsoncons to 0.172.0 by @aleksraiden in #1911
- Bump jsoncons to 0.171.1 by @aleksraiden in #183
- Bump oneTBB to 2011.11.0 by @aleksraiden in #1895
- Bump speedb to 2.7.0 by @aleksraiden in #1857
Misc
- Skip TLS replica test until fixed by @PragmaTwice in #1780
- Restore the GCC TSAN test in CI by @PragmaTwice in #1782
- Update controller URL in README.md by @PragmaTwice in #1785
- Split functions in main.cc to multiple headers by @PragmaTwice in #1787
- Style enhancement for rdb load by @mapleFU in #1839
- Refactor command utilities to class methods by @PragmaTwice in #1858
- Unify server's shorten form, change svr to srv by @git-hulk in #1861
- Polish wording and code block style in README by @PragmaTwice in #1862
- Only run publish-nightly action on the main repo by @jihuayu in #1868
- Don't rewrite unchanged items into the configuration file by @git-hulk in #1882
- Fix go test
JSON.TOGGLE basics
parameters order by @jihuayu in #1892 - Graceful shutdown the workers when reducing worker threads by @git-hulk in #1863
- Add the bind argument to the docker quickstart section by @git-hulk in #1906
- Clear unused vector by @kay011 in #1915
- Improve the command JSON.MERGE via jsonpath::remove by @2rueSid in #1919
- Minor refactor the return value of JSON methods by @git-hulk in #1920
New Contributors
- @lieck made their first contribution in #1837
- @2rueSid made their first contribution in #1850
- @Ziy1-Tan made their first contribution in #1856
- @jyf111 made their first contribution in #1874
- @raffertyyu made their first contribution in #1878
- @MaheshMadushan made their first contribution in #1875
- @chrisxu333 made their first contribution in #1888
- @kay011 made their first contribution in #1915
- @julic20s made t...
2.6.0
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
- Add the BloomFilter data structure and commands by @zncleon and @mapleFU in #1696
- Add the support of the RESTORE command by @git-hulk in #1684
- Support TLS for replication by @PragmaTwice in #1630
- Add the support of BLMOVE by @Yangsx-1 in #1592
- Add the support of the HRANDFIELD command by @zevin02 in #1565
- Add support for GEOSEARCH and GEOSEARCHSTORE by @uds5501 in #1533
- Add new MPUBLISH command by @torwig in #1657
- Add the support of the LPOS command by @JoverZhang in #1681
- Add LASTSAVE command by @xq2010 in #1702
- Add the support of LMPOP command by @HolyLow in #1737
Improvements
- Add dynamic key range generator with multiple range output by @infdahai in #1541
- Reduce the block cache configurations into a single one by @Yangsx-1 in #1549
- Make INFO command reject cases with arguments greater than 2 by @enjoy-binbin in #1570
- Avoid Write calls when SIADD added_cnt is 0 by @enjoy-binbin in #1577
- Storage: Extract an MultiGet Options for rocksdb::MultiGet by @mapleFU in #1582
- Return an error when Stream::Range fails and remove some debug server logs by @enjoy-binbin in #1556
- Use LMOVE logic to handle RPOPLPUSH by @enjoy-binbin in #1596
- Enable the jemalloc option --disable-cache-oblivious by @aleksraiden in #1575
- Update error message and add the ERR error code by @enjoy-binbin in #1597
- Support change log-level in runtime by @enjoy-binbin in #1611
- Skip WATCH if connection is already dirty by @enjoy-binbin in #1612
- ZRANGE / ZREVRANK add withscore option support by @enjoy-binbin in #1607
- Make lock guard movable & accept generalized arguments by @PragmaTwice in #1636
- Remove useless memory allocation & string field in lock manager & guard by @PragmaTwice in #1637
- Make special exclusive command check a function by @PragmaTwice in #1638
- Make config enum error more clear for users by @PragmaTwice in #1639
- Use EqualICase instead of strcasecmp in cluster by @PragmaTwice in #1640
- Add EvconnlistenerBase to avoid void* casts by @PragmaTwice in #1641
- MSET change it to batch write instead of batch per key by @enjoy-binbin in #1634
- Print version as kvrocks in kvrocks2redis by @PragmaTwice in #1649
- CAS command supports EXAT and PXAT options by @enjoy-binbin in #1650
- Refactor replication callbacks via templates by @PragmaTwice in #1646
- Add dynamic flag generator to replace adhoc logic in ExecuteCommands by @PragmaTwice in #1655
- GEOSEARCH* from is not optional, FROMLONLAT or FROMMEMBER must require by @enjoy-binbin in #1656
- Fix several mismatching default option values and their comments by @aleksraiden in #1664
- Return string instead of output pointer in metadata by @PragmaTwice in #1671
- Rename cluster-enable in kvrocks2redis to cluster-enabled by @enjoy-binbin in #1673
- Try to recover automatically from the background error about sst corrupt by @caipengbo in #1667
- Define variables more close to its use place in types by @PragmaTwice in #1675
- Bind to localhost by default for security by @PragmaTwice in #1676
- Refactor encoding via templates by @PragmaTwice in #1683
- Add returned next pointer for EncodeFixed by @PragmaTwice in #1685
- Use StatusOr in util::GetPeerAddr by @PragmaTwice in #1688
- Improve the cleanup order in the main function by @PragmaTwice in #1698
- Use MultiLockGuard to guarantee atomicity for multiple keys commands by @enjoy-binbin in #1700
- Remove the no-script flag in the LASTSAVE command by @enjoy-binbin in #1708
- Change the default value of max-io-mb to 0 (unlimited) by @enjoy-binbin in #1713
- Use
emplace
instead ofinsert
for map by @PragmaTwice in #1718 - Use resp functions instead of manual concatenation by @PragmaTwice in #1717
- Replace the random char seed to global rand to avoid collision by @git-hulk in #1729
- Split Inter in ZSet::InterStore into a separate function by @enjoy-binbin in #1726
- Introduce MDel do the batch delete and use MultiLockGuard guarantee atomicity by @enjoy-binbin in #1712
- Make output slice of Metadata::Decode available by @PragmaTwice in #1738
- Fix error messages in parsing of bit commands by @gogim1 in #1739
- Add the client name and ipport to the slowlog output by @LiuYuHui in #1740
- Add missing const specifiers to methods by @PragmaTwice in #1744
- Remove redundant string contruction from Slice by @PragmaTwice in #1745
- Allow runing RANDOMKEY in lua script by @enjoy-binbin in #1746
- Add nodiscard attribute to methods of Storage by @PragmaTwice in #1750
- Add nodiscard to Metadata::Decode by @PragmaTwice in #1751
- Add nodiscard to methods of redis::Database by @PragmaTwice in #1752
- Add BlockingCommander to refactor all blocking commands by @PragmaTwice in #1757
- Fix pointer-bool-conversion warning in
GeoHashHelper::BoundingBox
by @gogim1 in #1760 - Use SSL_sendfile in SockSendFile while available by @PragmaTwice in #1762
Bug Fixes
- Fix EVAL crashing server when numkeys is -1 by @enjoy-binbin in #1568
- Fix SCRIPT EXISTS arity by @enjoy-binbin in #1567
- Fix EXEC / DISCARD without MULTI wrongly reset watch by @enjoy-binbin in #1562
- Fix GEOHASH / GEOPOS should return nil array instead of error for non-existing key by @enjoy-binbin in #1573
- Fix DECRBY LLONG_MIN caused an overflow by @enjoy-binbin in #1581
- ZUNION arity should be -3 instread of -4 by @enjoy-binbin in #1589
- Fix ZRANGESTORE arity -4 crash the server by @enjoy-binbin in #1593
- Fix config set compression type didn't take effect by @xiaobiaozhao in #1576
- Fix INFO used_memory_rss_human field name by @enjoy-binbin in #1595
- Fix: Enable portable flag for Docker container builds by @ovaistariq in #1602
- Fix ZREMRANGEBYSCORE arity, should be 4 instead of -4 by @enjoy-binbin in #1604
- Fix ZRANGESTORE not overwrite the dst key by @enjoy-binbin in #1609
- Fix data race when updating the slots_info string by @git-hulk in #1615
- Fix GEOSEARCH/GEOSEARCHSTORE FROMMEMBER against non existing src key reply by @enjoy-binbin in #1625
- Fix missing pop in ScriptExists by @PragmaTwice in https://...
2.5.1
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
- Fix a data race when updating the slots_info string by @git-hulk in #1615
- Fix make warning on GCC by @Yangsx-1 in #1605
- Fix ZRANGESTORE not overwrite the dst key by @enjoy-binbin in #1609
- Fix ZREMRANGEBYSCORE arity, should be 4 instead of -4 by @enjoy-binbin in #1604
- Fix Docker image may crash if running on the AMD platform by @ovaistariq in #1602
- Fix INFO used_memory_rss_human field name by @enjoy-binbin in #1595
- Return an error when Stream::Range fails and remove some debug server logs by @enjoy-binbin in #1556
- Fix config set compression type didn't take effect by @xiaobiaozhao in #1576
- Fix ZRANGESTORE arity -4 that crashes the server by @enjoy-binbin in #1593
- Fix version typo in a variable name by @enjoy-binbin in #1591
- ZUNION arity should be -3 instead of -4 by @enjoy-binbin in #1589
- Fix DECRBY LLONG_MIN caused an overflow by @enjoy-binbin in #1581
- Fix GEOHASH / GEOPOS should return nil array instead of error for non-existing key by @enjoy-binbin in #1573
- Fix EXEC / DISCARD without MULTI wrongly reset watch by @enjoy-binbin in #1562
- Fix SCRIPT EXISTS arity by @enjoy-binbin in #1567
- Fix EVAL crashing server when numkeys is -1 by @enjoy-binbin in #1568
2.5.0
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
- Add Redis-compatible cursors for
SCAN
commands by @jihuayu in #1489 - Add support of the ZMPOP command by @MizukiCry in #1468
- Add support of the ZRANGESTORE command by @jihuayu in #1482
- Add support of the SINTERCARD command by @infdahai in #1444
- Add support of the BZMPOP command by @Yangsx-1 in #1490
- Add support of the new command ZUNION by @uds5501 in #1502
- Support slot batch for CLUSTERX SETSLOT by @infdahai in #1414
- Support blocking migration for the cluster migrate command by @ellutionist in #1418
- Support RocksDB auto-tune rate limiter for the background IO by @wanghenshui in #1424
Improvements
- Add separate mutex that protects blocked stream consumers by @torwig in #1471
- Add test case for the HMGET command by @zevin02 in #1467
- Escape the special chars in the monitor command output by @wy-ei in #1476
- Add a particular test case for HGETALL with async_io=true by @torwig in #1401
- Relax the lower bound of the expiration test case to make tests more stable by @git-hulk in #1437
- Add the ability to use the '*-123' pattern to specify stream entry ID via XADD by @torwig in #1405
- Allow default username and fix case-sensitive check in HELLO by @rueian in #1406
- Introduce UniqueEvent and CallbackBase for a more intuitive event handle by @PragmaTwice in #1420
- Add redis-cli to the nightly image by @ColinChamber in #1415
- Docker image based on Alpine Linux by @aleksraiden in #1434
- Use constexpr to simplify the getXXX method in EvbufCallbackBase by @ellutionist in #1443
- Migrate go-redis/redis to redis/go-redis by @infdahai in #1446
- Don't use auto-retry in unit/type/list_test.go by @git-hulk in #1463
- Use the rocksdb mget to improve the performance by @zevin02 in #1453
- Parse the timeout parameter as double in the blocking command by @Yangsx-1 in #1518
- Warning message for invalid key in the configuration file by @gloof11 in #1498
- Bump rocksdb v8.3.2 by @aleksraiden in #1516
- Add TakeFloat to Command Parser by @PragmaTwice in #1505
- Don't allow the instance replication of itself and its own replicas by @uds5501 in #1488
- Bump fmtlib to 10.0.0 by @aleksraiden in #1435
- Bump jsoncons to v170.0.2 by @aleksraiden in #1438
- Bump luaJIT to c0a8e68 by @xiaobiaozhao in #1399
- Bump jsoncons to v0.170.1 by @aleksraiden in #1426
- Bump oneTBB to v2021.9.0 by @aleksraiden in #1432
Bug Fixes
- Fix backtrace lib for musl building support by @aleksraiden in #1431
- Return error from CommandZRangeGeneric in case of unexpected range_type by @torwig in #1430
- Fix flaky test case in Go unit/type/list.go by @git-hulk in #1449
- Fix flaky test in migration timeout by @git-hulk in #1464
- Fix all weird out parameters
int *ret
in the codebase by @jihuayu in #1479 - Fix crash when hitting the perflog command rule by @git-hulk in #1481
- Fix SCRIPT misleading error message by @enjoy-binbin in #1561
- Fix ZUNION hang in syntax error by @enjoy-binbin in #1559
- Avoid printing the invalid configuration key when loading namespaces by @git-hulk in #1558
- Fix GETEX not checking wrong type error causing key overwriting by @enjoy-binbin in #1546
- LSET return no suck key instead of NotFound when the key does not exist by @enjoy-binbin in #1557
- Fix plain GETEX wrongly removing expiration time by @enjoy-binbin in #1548
- Fix compile error after upgrading the rocksdb by @git-hulk in #1542
- Fix ZMPOP/BZMPOP duplicate parameters by @enjoy-binbin in #1543
- Fix stdin usage text in PrintUsage by @enjoy-binbin in #1537
- Fix the inconsistent response behavior with Redis in memory usage command by @git-hulk in #1539
- Fix incorrect mount data in docker volume by @aleksraiden in #1507
- Fix data race when joining the task runner by @git-hulk in #1493
- Fix a few typos in CMakeLists.txt by @torwig in #1496
- Fix ZRANGE command should return an empty array when count = 0 by @infdahai in #1492
Build & CI related
- Suppress error in TBB to make build failure for GCC 12 and above by @torwig in #1440
- Add path-filter by @tisonkun in #1422
- Fix needs param by @tisonkun in #1427
- Tidy dockerfile by @tisonkun in #1477
- Disable
-static-libgcc
on MacOS building by @mapleFU in #1555 - Automatically download the golangci-lint if not exists by @infdahai in #1491
Misc
- Remove global server ptr getter used in scripting by @PragmaTwice in #1486
- Replace header <sys/poll.h> to <poll.h> in io_util.cc by @aleksraiden in #1433
- Support specify release candidate number by @ZENOTME in #1419
- Remove useless type cast in redis_slot.cc by @PragmaTwice in #1409
- Rename internal macro ENABLE_NEW_ENCODING to METADATA_ENCODING_VERSION by @PragmaTwice in #1408
- Print error when occurring the flaky test in TestBitmap by @infdahai in #1473
- Refine functions and add parsing test to set and zset by @zncleon in #1475
- Avoid manually releasing DB pointer via unique_ptr by @PragmaTwice in #1487
- Show CI badge for unstable branch exactly by @tisonkun in #1547
- List each command on a separate line in list type by @infdahai in #1531
- Drop
incubator-
prefix from Go test files, as well as yaml files and comment lines by @git-hulk in #1519 - Remove incubator/incubating from README by @PragmaTwice in #1514
- Remove user and group from Docker by @aleksraiden in #1513
- Remove incubating from the x.py and DISCLAIMER file by @git-hulk in #1515
- Remove ConnContext pointers to prevent manual allocation by @PragmaTwice in #1499
- Rename KvrocksLabs to RocksLabs in cmake by @PragmaTwice in #1436
New Contributors
- @rueian made their first contribution in #1406
- @ZENOTME made their first contribution in #1419
- @MizukiCry made their first contribution in #1468
- @zncleon made their first contribution in #1475
- @wy-ei made their first contribution in #1476
- @jihuayu made their first contribution in #1479
- @uds5501 made their first contribution in #1488
- @gloof11 made their first contribution in #1498
Full Changelog: v2.4.0...v2.5.0-rc2
2.4.0
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
- Use the RocksDB WriteBatchWithIndex to implement the read-your-own-writes in transaction by @git-hulk in #1287
- Support watch/unwatch commands by @PragmaTwice in #1279
- Support replica-announce-ip and replica-announce-port by @paragor in #1303
- Implement the new encoding with 64bit size and expire time in milliseconds by @PragmaTwice in #1342
- Allow to configure the compaction checker policy by @ellutionist in #1325
- Add max background jobs to configuration by @bruceqiwang in #1374
- Add TIME command as Redis by @enjoy-binbin in #1394
Improvements
- Add optional args to XLEN to specify start ID and direction by @torwig in #1251
- Add more version detail in server info by @PragmaTwice in #1253
- Show version and commit hash in a more pretty way by @PragmaTwice in #1252
- Remove some new-delete patterns and refine LockManager hash function by @PragmaTwice in #1268
- Add explicit fallthrough in the replication state transmission by @guoxiangCN in #1293
- Add move assign and reset for ObserverOrUnique by @PragmaTwice in #1299
- Add CreateThread to avoid manual try-catch by @PragmaTwice in #1302
- Allow HSETNX to receive multiple field-value pairs like HSET by @torwig in #1310
- Use std::shared_mutex instead of our own ReadWriteLock implementation by @PragmaTwice in #1314
- Refactor task runner for more robust runtime state by @PragmaTwice in #1318
- Minor refactoring of src/common, src/server by @torwig in #1280
- Improve code style and do some minor fix in scripting by @PragmaTwice in #1312
- Refactor eval commands by @PragmaTwice in #1313
- Use inline to replace extern global constants by @PragmaTwice in #1316
- Minor refactoring of stc/storage/storage.cc by @torwig in #1321
- Remove useless buf and prealloc in InternalKey by @PragmaTwice in #1245
- Replace list with other cache-friendly containers by @PragmaTwice in #1322
- Introduce TBB to refactor task runners by @PragmaTwice in #1323
- Check if the checkpoint seq is in the WAL boundary before using by @git-hulk in #1320
- Round expire time for seconds to improve precision for 32bit-common-field encoding by @PragmaTwice in #1352
- Unify time retrieving and remove srand call in metadata construction by @PragmaTwice in #1351
- Add CLIENT INFO command as Redis by @enjoy-binbin in #1354
- Make the create-cluster script robustness by @xiaobiaozhao in #1356
- Rewrite encoding functions by @PragmaTwice in #1358
- Rewrite popcount and bitpos in redis bitmap by @PragmaTwice in #1359
- Remove manual code concat in scripting by @PragmaTwice in #1362
- Systemd service file update by @aleksraiden in #1360
- Use more efficient popcount in Redis::Bitmap by @PragmaTwice in #1363
- Introduce JSONCONS for RedisJSON and rewrite Server::GetRocksDBStatsJson by @PragmaTwice in #1366
- Refactor Status to avoid large stack size in happy path by @PragmaTwice in #1368
- Minor refactoring of slot migration source code by @torwig in #1373
- Add MEMORY USAGE command as an alias to existing DISK USAGE command by @torwig in #1375
- Add SUBSTR command as redis by @enjoy-binbin in #1347
- Add cluster section into the info command by @enjoy-binbin in #1379
- Convert 0.0.0.0 to local ip addresses when matching the cluster node by @zevin02 in #1392
Bug Fixes
- Use append action instead of nargs for cmake defs in x.py by @PragmaTwice in #1256
- Fix inconsistent response format with Redis by @git-hulk in #1269
- Force disable the IPO option in macOS by @git-hulk in #1271
- Fix outdated result in type command for expired keys by @jjz921024 in #1286
- Fix for execution timing of commands from lua by @DenizPiri in #1297
- Return empty string instead of nil in HGETALL, HVALS, HRANGEBYLEX responses by @torwig in #1315
- Relax race condition between subkey compaction thread by @dongdongwcpp in #1335
- Fix missing stream increment batch in cluster migration by @git-hulk in #1345
- Fix redundant newline in eval error compiling message by @git-hulk in #1361
- Add handling LMOVE in BatchExtractor by @torwig in #1364
- Fix disordered stack pop in replyToRedisReply by @PragmaTwice in #1380
- Fix CONFIG REWRITE append duplicate newlines by @enjoy-binbin in #1397
- Fix missing to set the cluster node id when loading by @git-hulk in #1384
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...
2.3.0
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
- Update RocksDB to 7.9.2 & Google test to 1.13.0 by @aleksraiden in #1229
- Unify write-like syscall wrappers in util.cc by @PragmaTwice in #1086
- Add LTO/IPO compile support by @wanghenshui in #764
- Introduce fmt dependency to simplify string formatting by @PragmaTwice in #1139
- Add the compatible Redis version to the info command by @xiaobiaozhao in #1158
- Make IO functions return StatusOr by @PragmaTwice in #1192
HrangebyLex
supports specify intervals by @tanruixiang in #1120- Remove old string parsing util and replace them by ParseInt by @PragmaTwice in #1191
- Add nodiscard attribute to Status and StatusOr by @PragmaTwice in #1193
- Add new lines after every section in Server::GetInfo by @kukey in #1199
- Add support of stream migration during slot migration process by @torwig in #1197
- Add timeout when replica connect master by @caipengbo in #1172
- Refactor slot migrate Go-tests by @torwig in #1208
- Refactoring: check function return Status marked as [[nodiscard]] by @torwig in #1214
- Make config load errors more friendly by @torwig in #1217
- Inplace construct error message in StatusOr while data type is large enough by @PragmaTwice in #1198
- Refine Status::Prefixed and add more test cases by @PragmaTwice in #1200
- Refactor return value of functions that related to a slot migration by @torwig in #1205
- Add integer parsing with unit support by @PragmaTwice in #1218
- Kvrocks2Redis: decode slot ID in cluster mode by @torwig in #1222
- Refactor config parsing in kvrocks2redis by @PragmaTwice in #1221
- Introduce command register mechanism to allow splitting command definition to multiple TUs by @PragmaTwice in #1140
- Add ParseFloat and replace stod with it by @PragmaTwice in #1227
- Make docker image more portable by @PragmaTwice in #1233
- Allow to enable the async_io option to improve the performance by @xiaobiaozhao in #1215
- Add TRYAGAIN prefix to error message for writing forbidden slot by @PragmaTwice in #1240
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
- Clean code in redis_reply.cc by @PragmaTwice in #1085
- Fix
modernize-use-emplace
andperformance-unnecessary-copy-initialization
reported by clang-tidy by @PragmaTwice in #1084 - Fix performance-unnecessary-value-param warning reported by clang-tidy by @tanruixiang in #1106
- Fix modernize-use-bool-literals warning reported by clang-tidy by @MaximSmolskiy in #1107
- Fix modernize-make-unique warning reported by clang-tidy by @dl239 in #1113
- Fix performance-for-range-copy warning reported by clang-tidy by @MaximSmolskiy in #1108
- Fix performance-faster-string-find warning reported by clang-tidy by @MaximSmolskiy in #1109
- Fix modernize-redundant-void-arg warning reported by clang-tidy by @MaximSmolskiy in #1110
- Fix
modernize-avoid-bind
warning reported by clang-tidy by @Phoeniwx in #1121 - Fix modernize-use-auto warning reported by clang-tidy by @MaximSmolskiy in #1111
- Fix modernize-use-using warning reported by clang-tidy by @tanruixiang in #1114
- Fix performance-inefficient-vector-operation warning reported by clang-tidy by @tanruixiang in #1115
- Fix cppcoreguidelines-special-member-functions warning reported by cl… by @maochongxin in #1124
- Fix modernize-loop-convert warning reported by clang-tidy by @MaximSmolskiy in #1112
- Improve files structure by @tisonkun in #1134
- Tidy files inside src/commands by @torwig in #1137
- Replace c-style typedef with direct definition or using by @PragmaTwice in #1143
- Fix wrong include in redis_cmd.cc by @PragmaTwice in #1145
- Move VERSION to src/folder #1148 by @CNLHC in #1149
- Fix inconsistency between Set and ToString in OctalField by @PragmaTwice in #1151
- Fix cppcoreguidelines-init-variables warning reported by clang-tidy by @MaximSmolskiy in #1153
- Fix modernize-use-nullptr warning reported by clang-tidy by @MaximSmolskiy in #1156
- Fix cppcoreguidelines-macro-usage warning reported by clang-tidy by @PragmaTwice in #1155
- Fix StatusOr copy assignment by @SGZW in #1173
- Fix cppcoreguidelines-narrowing-conversions warning reported by clang-tidy by @MaximSmolskiy in #1159
- XREAD returns dedicated status if it blocks by @torwig in #1232
New Contributors
- @MaximSmolskiy made their first contribution in #1107
- @dl239 made their first contribution in #1113
- @Phoeniwx made their first contribution in #1121
- @wanghenshui made their first contribution in #764
- @CNLHC made their first contribution in #1149
- @SGZW made their first contribution in #1173
- @kukey made their first contribution in #1199