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 #1390
- Forbid goto statement and remove useless struct prefix by @PragmaTwice in #1391
Misc
- Split redis_cmd.cc to multiple files by category by @PragmaTwice in #1244
- Bump zstd to version 1.5.4 by @aleksraiden in #1255
- Fix license headers in third-party code by @tisonkun in #1259
- Move the kvrocks.conf into volume in Dockerfile by @git-hulk in #1264
- Fix license issues in rand.h, rocksdb_crc32c.h and batch_debugger.h by @PragmaTwice in #1274
- Bump rocksdb to 7.10.2 by @aleksraiden in #1296
- Move unit tests for redis types to a new directory by @PragmaTwice in #1324
- chore: Update README.md by @tisonkun in #1326
- Relax the condition in unit tests of TaskRunner by @PragmaTwice in #1329
- Remove testdb and compactdb dirs on exit by @tisonkun in #1327
- Avoid crash due to task runner start failed by @PragmaTwice in #1331
- Bump RocksDB 8.0.0 by @aleksraiden in #1333
- Remove the test db dir after deleting the storage in CPP unittest by @git-hulk in #1336
- Use waitForImportState instead of the sleep in Go test case by @git-hulk in #1339
- Keep feature descriptions consistent with documentation by @enjoy-binbin in #1340
- Make Status::Code::cOK private to avoid direct access by @PragmaTwice in #1341
- Tidy the NOTICE file by @tisonkun in #1370
- Update zstd version to 1.5.5 by @io55555 in #1369
- Bump RocksDB to version 8.1.1 by @aleksraiden in #1398
- Bump Snappy 1.1.10 with upstream compile fix by @aleksraiden in #1400
New Contributors
- @jjz921024 made their first contribution in #1286
- @DenizPiri made their first contribution in #1297
- @paragor made their first contribution in #1303
- @enjoy-binbin made their first contribution in #1340
- @dongdongwcpp made their first contribution in #1335
- @io55555 made their first contribution in #1369
- @bruceqiwang made their first contribution in #1374
- @zevin02 made their first contribution in #1392
Full Changelog: v2.3.0...v2.4.0