Highlights: This release adds JSON output for INFO, the TDIGEST.CDF command, and configurable client output-buffer limits. It also improves Stream trimming and HNSW random-number generation, fixes replication and command compatibility issues, and strengthens command permissions, Lua reply handling, and RDB loading.
Dependencies were refreshed, including RocksDB v11.8.1, jsoncons v1.9.0, libevent 2.1.13-stable, fmt v12.2.0, and GoogleTest v1.18.0.
Hash Field Expiration (HFE) commands and configuration remain disabled in 2.17.0, while the internal data structures and metadata are retained. Keyspace Notifications and CuckooFilter are also excluded from this release and should not be treated as available functionality.
Compatibility Notes
DEBUG,FLUSHMEMTABLE,FLUSHBLOCKCACHE, and_db_namenow require admin permission. Clients authenticated with namespace tokens can no longer run these commands. See #3570.- Non-admin
CLIENT LIST,CLIENT INFO, andCLIENT KILLoperations are restricted to the caller's namespace. See #3536. - Cluster slot migration now uses only
raw-key-value. Theredis-commandmigration path and fallback have been removed; the destination must supportAPPLYBATCH. Themigrate-type,migrate-speed, andmigrate-pipeline-sizesettings are deprecated. Usemigrate-batch-rate-limit-mbandmigrate-batch-size-kbto control migration throughput and batch size. See #3544. client-output-buffer-limitis disabled by default and applies to thenormalandpubsubclient classes. Theslaveclass is accepted for compatibility but has no effect on replication connections. See #3560.
New Features
- feat(info): support FORMAT (TXT | JSON) for the INFO command by @nhancdt2602 in #3549
- feat(server): support the client-output-buffer-limit configuration by @git-hulk in #3560
- feat(tdigest): implement
tdigest.cdfcommand by @LindaSummer in #3551
Bug Fixes
- fix(cluster): release forbidden slot range on CLUSTER RESET by @git-hulk in #3545
- fix(replication): prevent full-sync checkpoint race with cron purge by @advisedy in #3559
- fix(json): use bytes sink for CBOR encoding by @XYenon in #3580
- fix(stream): decrement pending_number when XAUTOCLAIM removes deleted PEL entries by @wengsht in #3578
- fix(comptaction): use int64_t for parsing total_keys and deleted_keys by @DanFaudemer in #3599
- fix(set): return scalar for SRANDMEMBER without count by @raghav2005 in #3601
- fix(server): add O_TRUNC when creating PID file to avoid stale content by @weim0000 in #3598
Security & Hardening
- fix(server): scope CLIENT LIST/INFO/KILL to caller's namespace by @git-hulk in #3536
- fix(scripting): guard against stack overflow on deeply nested Lua reply by @git-hulk in #3547
- fix(rdb): reject over-large declared lengths when loading RDB payloads by @git-hulk in #3550
- fix(command): require admin permission for privileged commands by @git-hulk in #3570
Improvements
- refactor(cluster): remove the redis-command migration type by @git-hulk in #3544
- perf(search): share a thread-local RNG for HNSW and drop seed (#2398) by @advisedy in #3562
- perf(stream): trim with a single DeleteRange instead of per-entry Delete by @bocharov in #3592
Build & CI
-
fix(test): extend the replication wait time to prevent the flaky test by @git-hulk in #3531
-
perf(test): parallelize bitmap subtests and optimize Set2SetBit with pipeline by @Tangruilin in #3507
-
fix(ci): update the sonarscan to v8.2.0 by @git-hulk in #3542
-
fix(ci): update docker/build-push-action to v7.3.0 by @git-hulk in #3548
-
perf(tests): shorten list blocking timeout cases by @Tangruilin in #3539
-
perf(test): poll is_compacting instead of a fixed sleep in replication test by @ishita-0301 in #3561
-
chore(devcontainer): update toolchain to project requirements by @maoyouaa in #3563
-
fix(test): treat ECONNRESET as graceful in SimpleTCPProxy by @nhancdt2602 in #3574
-
chore(ci): remind new contributors about AI-assisted guidelines by @jihuayu in #3566
-
chore(ci): bump typos action to v1.49.0 by @aleksraiden in #3586
-
chore(ci): bump docker/login CI actions to v4.6.0 by @aleksraiden in #3587
-
chore(ci): bump setup-go action from v6 to v7 by @aleksraiden in #3590
-
chore(ci): bump golangci-lint to 2.13.0 by @aleksraiden in #3597
-
chore(ci): bump skywalking-eyes actions to 0.9.0 by @aleksraiden in #3604
-
chore(ci): check license headers in Lua scripts by @git-hulk in #3616
-
fix(ci): use approved action revisions in nightly workflow by @git-hulk in 450d173
-
test(info): remove unstable version assertion by @git-hulk in 93ae824
-
test(info): remove orphaned version assertion comment by @git-hulk in bbb136f
Dependency Updates
- chore(deps): bump jsoncons to 1.8.1 by @aleksraiden in #3514
- chore(deps): bump fmtlib to 12.2.0 by @aleksraiden in #3532
- chore(deps): bump rocksdb to v11.1.2 by @aleksraiden in #3537
- chore(deps): bump libevent to 2.1.13-stable by @aleksraiden in #3540
- chore(deps): bump jsoncons to v1.9.0 by @aleksraiden in #3583
- chore(deps): bump rocksdb to v11.8.1 by @aleksraiden in #3585
- chore(deps): bump google test to v1.18.0 by @aleksraiden in #3582
Features Excluded from 2.17.0
The following upstream work is present in the development history but its user-facing functionality is disabled or removed in this release:
- HFE commands, including
HSETEXandHGETEX, and HFE configuration are disabled. Internal data structures and metadata are retained. Related work by @PragmaTwice: #3554. - Keyspace Notifications are excluded. Related work by @Aetherance: #3541.
- CuckooFilter commands are disabled. Related work by @nagisa-kunhah: #3481.
- chore(release): exclude incomplete 2.17.0 features by @git-hulk in c4802b0
Chores & Maintenance
- chore(.asf.yaml): add 2.16 into protected branches by @PragmaTwice in #3535
- release: prepare source release apache-kvrocks-2.17.0-rc2 by @git-hulk in 185d422
New Contributors
- @nhancdt2602 made their first contribution in #3549
- @advisedy made their first contribution in #3559
- @ishita-0301 made their first contribution in #3561
- @maoyouaa made their first contribution in #3563
- @wengsht made their first contribution in #3578
- @bocharov made their first contribution in #3592
- @DanFaudemer made their first contribution in #3599
- @Aetherance made their first contribution in #3541
- @raghav2005 made their first contribution in #3601
Full Changelog: v2.16.0...v2.17.0