v3.5.0
Major features
1. Removal of Rsync
- In v3.5.0, we removed Rsync and replaced it with a self-developed full synchronization scheme, which has the features of breakpoint continuation, rate limit, file inspection and so on
2. Compatibility with More Redis Commands
- More Redis commands are compatible and supported in v3.5.0.
3. RocksDB Version Upgrade and Tiered Compression
- In v3.5.0, we upgraded RocksDB to version v8.1.1 and implemented tiered compression.
4. Support for BlobDB:
- In v3.5.0, we added support for BlobDB KV separation.
5. Cluster Mode based on Codis
- In v3.5.0, we introduced the Codis Cluster Mode and added support for the command to migrate Codis slots.
6.Observability
- In v3.5.0, we introduced the
pika_exporter
tool to monitor the observability metrics of Pika. Subsequently, we added several new metrics to enhance Pika's observability.
7.Cloud-Native Deployment
- In v3.5.0, we introduced an MVP version of pika-operator, which focuses on enabling the quick deployment of a single-instance Pika service on Kubernetes.
8.Cross-platform compilation
- In v3.5.0, Pika supports cross-platform compilation and can be compiled and used on MacOS, CentOS, and Ubuntu platforms.
Features
- Added automatic rate limiting for "compact" operation to reduce its impact on the latency of upper-layer data read and write operations. #1374 @wanghenshui
- Introduced the "aof_to_pika" toolset for data conversion. #1340 @Axlgrep
- Implemented the printing of the Pika logo. #1787 @Mixficsol
- Optimized certain code portions using clang-tidy. #1701 #1730 @longfar-ncy
- Refactored C++98-style code to C++11-style following C++ coding guidelines. #1684 @chejinge
- Introduced support for the "snappy" library. #1216 @kernelai
- Added CLA (Contributor License Agreement) file. #1260 @kernelai
- Extended memory-related configuration options to support units in K, M, or G. #1307 @lqxhub
- Added libunwind as a dependency library. #1316 @kernelai
- Included a compilation script for Pika. #1356 @lqxhub
- Added "rate-limiter-bandwidth" option to pika.conf for rate limiting. #1272 @wanghenshui
- Enhanced the "info" command by adding "redis_version" information. #1403 @wanghenshui
- Provided CMake support for aof_to_pika tool. #1436 @A2ureStone
- Introduced clang-formatted shell scripts. #1448 @lqxhub
- Added a configuration option to disable the compilation of command docs. #1642 @tedli
- Provided CMake support for benchmark_client, binlog_sender, manifest_generator, rdb_to_pika, txt_to_pika, pika_to_txt, and pika_port. #1451 @A2ureStone
Bugfixes
- Fixed coredump caused by incompatible CPU instruction sets. #1812 @chejinge
- Fixed abnormal exit issue in the Monitor command. #1804 @Mixficsol
- Fixed incomplete configuration overwrite. #1800 @yaoyinnan
- Fixed CTest tests on MacOS. #1789 #1721 #1782 @tedli @Mixficsol
- Fixed loading master-run-id from the configuration file during process startup, which caused the need for re-syncing historical data on slave nodes. #1778 @luky116
- Fixed format error in overrides option during Pika single test. #1768 @A2ureStone
- Fixed command to retrieve INFO xxx (INFO data, INFO stats) by index instead of using INFO ALL. #1762 @yaoyinnan
- Improved instantaneous_metric to collect network metrics every 5 seconds. #1757 @yaoyinnan
- Improved config get to return complete parameters. #1593 @luky116
- Fixed possible empty slot issue. #1712 @Mixficsol
- Fixed some bugs related to version selection in the makefile. #1714 @luky116
- Fixed bug in executing HSET for the first time. #1710 @Mixficsol
- Fixed the issue of binlog offset on slave nodes being greater than master nodes, causing TrySync failure. #1681 @luky116
- Fixed a NOAUTH error test, where any command would give an error when AUTH is required. #1680 @hqh-cell
- Fixed the issue of binlog files not being automatically cleaned up when exceeding the limit. #1679 @luky116
- Fixed issues with LPUSHX and RPUSHX multi-element insertion. #1525 @ForestLH
- Fixed error in executing the BGSAVE command. #1523 @Brokenice0415
- Fixed the use of io_uring when closing RocksDB to prevent errors during linking. #1489 @lqxhub
- Fixed MacOS environment Pika compilation warnings. #1740 @Mixficsol
- Fixed error message for unsupported commands, adapted for go-redis. #1244 @wgqi1126
- Fixed a protobuf3 compilation warning. #1267 @wanghenshui
- Fixed bugs in EXISTS and DEL commands in sharding mode. #1277 @wanghenshui
- Fixed rsync auth bug. #1278 @wanghenshui
- Fixed rewrite result format to comply with Redis standards. #1339 @lqxhub
- Fixed SET NX/XX return values to match Redis behavior. #1343 @gtygo
- Fixed missing pika_master_link_status and pika_slave_priority indicators in exporter. #1726 @Mixficsol
- Fixed potential coredump when Pika uses too many file descriptors, preventing it from exceeding the ulimit. #1346 @kernelai
- Fixed initialization of group members in classes to prevent unexpected closure of the connection between redis-cli and Pika. #1390 @AlexStocks
- Fixed delete_dir snprintf bug. #1400 @wanghenshui
- Fixed thread num limitation. #1401 @wanghenshui
- Fixed redis-benchmark to get config from Pika. #1402 @wanghenshui
- Fixed initialization of class members. #1406 @AlexStocks
- Fixed issues in Pika's master-slave synchronization tests on MacOS. #1776 @Mixficsol
- Fixed NULL to nullptr. #1408 @AlexStocks
- Fixed size boundary of ttl to set the expiration timestamp. #1413 @ForestLH
- Fixed access to nullptr. #1414 #1426 @fly1ngpengu1ns @Pikachu1412
- Fixed Monitor command. #1424 @loveyacper
- Fixed partitionInfo::operator to return a boolean value. #1427 @4kangjc
- Fixed access to nullptr in src/net. #1453 @gitveg
- Fixed c++17 build failure in aof_reader. #1454 @lqxhub
- Fixed compilation warnings. #1455 @wangchuande
- Fixed occasional build failure in operator. #1464 @machinly
- Fixed CondVar to allow exiting. #1475 @lqxhub
- Fixed libfmt debug build name error. #1476 @lqxhub
- Fixed abnormal exit issue in the Monitor command. #1804 @Mixficsol
- Fixed abnormal binlog offset issue on slave nodes. #1681 @luky116
- Fixed "no auth" error in unit tests. #1680 @hqh-cell
- Fixed issue where binlog files exceeding the limit were not being deleted. #1679 @luky116
- Fixed string-related unit tests. #1675 @Mixficsol
- Fixed issue where tmp files were not deleted during abnormal exit in Codis. #1661 @yaoyinnan
- Fixed inconsistency in data replication between master and slave. #1638 @cheniujh
- Fixed failure to retrieve Metrics indicators in the INFO command. #1646 @chejinge
- Fixed a type error in basic type on one side. #1625 @chenbt-hz
- Fixed incorrect parameter prompts for LPOP and RPOP interfaces. #1520 @luky116
- Fixed the issue where Pika remained in an erroneous state after clearing data due to the instance's disk being full, requiring a restart to recover. #1765 #1822 #1843 @Yangsx-1 @Mixficsol
Notice
- Removed the Proxy feature introduced in version 3.4. #1274 @wanghenshui
- Removed the submodule. #1312 @wanghenshui
- Removed the sharding command. #1469 @chejinge
- Removed tcmalloc. #1472 @Mixficsol
- Added protect mode for the leader. #1276 @wanghenshui
- Synchronized the latest code from Codis to the Pika repository. #1279 @WyattJia
- Added external dependency libraries in CMake files. #1281 @kernelai
- Added a list of external dependency libraries in CMake files. #1285 @kernelai
- Created a static link library for Pika, allowing it to be directly linked with dependent libraries to form Pika's binary package. #1310 @Tangruilin
- Made protobuf generation independent of the local environment, enabled multi-core compilation, and fixed the pthread error on Debian. #1314 @lqxhub
- Renamed "slash" to "pstd". #1348 @AlexStocks
- Renamed the "src/pink" directory to "src/net". #1350 @AlexStocks
- Renamed the words "bw" and "blackwidow" to "storage". #1352 #1353 @AlexStocks
- Updated the compiler requirement documentation. #1420 @4kangjc
- Replaced invalid links. #1430 #1441 #1471 @gitveg @1321034767 @chiehwarm
- Upgraded Redis from 4.3.3 to 4.4.4 in /tools/codis2pika/test. #1536 @dependabot
- Upgraded golang.org/x/sys from 0.0.0-20210927094055-39ccf1dd6fa6 to 0.1.0 in /tools/codis2pika. #1535 @dependabot
- Replaced new/delete with smart pointers. #1503 #1502 #1493 @cheniujh @A2ureStone @iiiuwioajdks
- Replaced fprintf with glog. #1421 @Mixficsol
Improvement
- Removed sharding mode from Pika for uniformity. #1481 @chejinge
- Added slot numbers to the configuration (config) settings. #1664 @luky116
- Unified the naming of partitions as slots. #1571 #1655 @chejinge
- Replaced Monitor thread with the Monitor command. #1551 @loveyacper
- Added checks for empty and incorrect passwords during server startup. #1645 @hqh-cell
- Refactored pstd_mutex. #1440 @4kangjc
- Modified the command information key-space response data. #1450 @lqxhub
- Merged common code between pstd and storage. #1419 @4kangjc
- Added "spop" command by count. #1434 @ChanphongGu
- Provided documentation for Pika Docker images. #1557 @machinly
- Replaced the old GetEnv interface with RocksDB's GetFileSystem interface. #1213 @kernelai
- Added scattered Pika documentation. #1193 @fengpeiyuan
- Upgraded CMake to version 3.18. #1366 @AlexStocks
- Added a format tool to Pika. #1512 @liuqian1990
- Added clang-tidy support to Pika. #1515 #1730 @ForestLH @longfar-ncy
- Launched Pika and pika-operator in MiniKube. #1330 @machinly
- Applied Google coding style to clang-format. #1479 @Mixficsol
- Refactored pstd/env using std::filesystem. #1470 @4kangjc
- Added Slice to pstd::GetFixed. #1425 @4kangjc
- Used inline variables in header files. #1407 @4kangjc
- Formatted code using clang-formats. #1378 @AlexStocks
- Moved pika-operator to the pika-tools directory. #1468 @luky116
- Added Codis to Pika migration tool. #1514 @chenbt-hz