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 #1626
- Fix MSETNX not allow overriding the same key by @enjoy-binbin in #1631
- Fix miscreating column families when opening with the readonly mode by @git-hulk in #1645
- Fix missing exclusive flag in the namespace command by @git-hulk in #1653
- Fix SISMEMBER should return 0 when key does not exist by @enjoy-binbin in #1661
- Fix data dace when closing the server close in Go tests by @git-hulk in #1669
- Fix add/delete repeated members error in zset/set/hash types by @ChrisZMF in #1652
- Fix migrator and importer thread didn't start if
persist-cluster-nodes-enabled
was disabled by @git-hulk in #1674 - Fix GEOSEARCHSTORE not overwrite the dst key by @enjoy-binbin in #1677
- Fix LPOS rank passing LLONG_MIN overflow issue by @enjoy-binbin in #1687
- Fix GEORADIUSBYMEMBER against non existing key reply by @enjoy-binbin in #1691
- Fix ZINTERSTORE command key range by @enjoy-binbin in #1697
- Fix wrong metadata parsing in CompactOnExpiredCollector by @PragmaTwice in #1703
- Fix RESTORE to create a key without expire under the same ms by @enjoy-binbin in #1705
- Fix RESTORE check for zset2 object type by @enjoy-binbin in #1709
- Fix RESTORE TTL is 0 with ASBTTL does not restore the key by @enjoy-binbin in #1724
- Fix boundary check in Bitmap::BitOp by @mapleFU in #1727
- Fix
GETEX
not working correctly onRedis::Bitmap
by @gogim1 in #1743 - Fix
TYPE
command with bloom filter by @gogim1 in #1747 - Fix GEORADIUSBYMEMBER STORE should return the elements number by @enjoy-binbin in #1749
- Fix GEO store commands not removing dst key when result set is empty by @enjoy-binbin in #1755
- GEO FROMMEMBER returns error when member does not exist by @enjoy-binbin in #1766
- Fix TLS connection for sendAuth in replication by @PragmaTwice in #1769
- Fix missing return value receiver when using Go's slices.Compact by @git-hulk in #1771
- Fix wrong replica's port number(=0) if the listening port is not set by @xiaofan8421 in #1763
Misc
- (deps) Bump jsoncons to 0.171.0 by @aleksraiden in #1563
- Add used-after-move checking to clang-tidy by @mapleFU in #1566
- Add container environment for building and testing in CI by @PragmaTwice in #1569
- Style: Change Storage::SetReadOptions to DefaultScanOptions by @mapleFU in #1574
- ci: typos and needs by @tisonkun in #1584
- Fix prerequisite install commands in README by @PragmaTwice in #1590
- Fix version typo in variable name by @enjoy-binbin in #1591
- Add an archlinux environment for building and testing in CI by @Yangsx-1 in #1601
- (deps) Bump oneTBB 2021.10.0 by @aleksraiden in #1606
- Remove deprecated golangci linters: structcheck, deadcode and varcheck by @enjoy-binbin in #1608
- Fix make warning on GCC by @Yangsx-1 in #1605
- Remove .git in dockerignore by @PragmaTwice in #1616
- Simply test the built docker image in CI by @PragmaTwice in #1617
- Add kvrocks controller to README by @PragmaTwice in #1623
- Enable rebase merge in enabled_merge_buttons by @enjoy-binbin in #1624
- Fix PORTABLE variable in CMake by @PragmaTwice in #1627
- Bump GoogleTest to v1.14.0 by @aleksraiden in #1629
- Fix GLIBC link issue in archlinux CI by @PragmaTwice in #1633
- Add SUSE environment to CI for building and testing kvrocks by @PragmaTwice in #1642
- Tentatively comment out GCC TSAN in CI to avoid blocking PRs by @git-hulk in #1668
- ci: add typos check by @tisonkun in #1663
- Bump fmtlib to version 10.1.0 by @aleksraiden in #1672
- Fix flaky test failure in TestSlotMigrateSync by @git-hulk in #1680
- Fix flaky test TestZset ZRANGEBYSCORE_fuzzy_test by @enjoy-binbin in #1583
- Bump zlib to version 1.3 by @aleksraiden in #1682
- Move sha1 and redis rand sources to vendor directory by @PragmaTwice in #1689
- Remove valgrind config file by @PragmaTwice in #1690
- Introduce dependency xxhash for bloomfilter by @PragmaTwice in #1694
- Disable building of the unused shared library for jemalloc by @jonahgao in #1695
- Update the Redis migration tool to RedisShake due to redis-migrate-tool is inactive for a long time by @git-hulk in #1706
- Bump fmtlib to version 10.1.1 by @aleksraiden in #1707
- Replace sha512sum with shasum by @tisonkun in #1716
- Bump rocksdb from v8.3.2 to v8.3.3 and change the default value of rocksdb.level_compaction_dynamic_level_bytes from no to yes by @aleksraiden in #1725
New Contributors
- @ovaistariq made their first contribution in #1602
- @JoverZhang made their first contribution in #1681
- @jonahgao made their first contribution in #1695
- @xq2010 made their first contribution in #1702
- @LiuYuHui made their first contribution in #1740
- @xiaofan8421 made their first contribution in #1763
Full Changelog: v2.5.1...v2.6.0