Dragonfly v1.28.0 - Spring Edition 🌵
This marks our second release for the year, with lots of bugs closed and probably some new bugs introduced.
Important fixes and changes:
- Deadlocked transaction bugs #4590 #4647 #4685
- Sharded pubsub (API-7) : #4702 #4518 #4529
- Fix Streams replication #4591 #4737
- Numerous cluster improvements #4727 #4786 #4767
What's Changed
- fix(search_family): Add options test for the FT.AGGREGATE command by @BagritsevichStepan in #4479
- fix(stream_family): Fix replication for the XADD and XTRIM commands by @BagritsevichStepan in #4591
- chore(search_family): Simplify FT.SEARCH reply code by @BagritsevichStepan in #4553
- feat(zset family): Implement ZDIFFSTORE by @mkaruza in #4582
- fix(seeder): Support stream types in the Seeder by @BagritsevichStepan in #4574
- fix: debian path in dragonfly.service by @romange in #4594
- fix: tls replication without ca verification by @kostasrim in #4539
- fix(server): list move on single shard wake blocking transaction by @adiholden in #4590
- fix: race when bumping items while loading a snapshot by @kostasrim in #4564
- fix: multi/exec CROSSSLOT error processing by @BorysTheDev in #4598
- test: added test_keys_expiration_during_migration by @BorysTheDev in #4558
- chore: fix test_snapshot by @kostasrim in #4607
- chore: fix glob translation with \ at the end by @romange in #4608
- feat: support lz4 compression method by @romange in #4610
- fix: test_keys_expiration_during_migration by @BorysTheDev in #4613
- chore: add zstd_test by @romange in #4614
- chore: simplify transaction code by @romange in #4602
- fix: epoll reg tests running on iouring by @kostasrim in #4612
- chore: use macos-14 for the daily macos build by @kostasrim in #4609
- chore: introduce docker release pipeline by @romange in #4618
- chore: connection pipeline cache does not shrink by @kostasrim in #4491
- chore: implement sharded pub/sub by @kostasrim in #4518
- chore: introduce background deletions of DenseSet objects by @romange in #4496
- fix: revert reflex based matching due to performance problems by @romange in #4626
- chore: allow yielding in Scan command by @kostasrim in #4624
- refactor: simplify journal and restore streamer cancellation by @BorysTheDev in #4549
- server: rdb loader big string loading in chunks by @adiholden in #4623
- chore: remove redundant calls to GetSlice by @romange in #4635
- server: redis parser reject big bulk read by @adiholden in #4627
- chore: Improve loading of sorted sets by @romange in #4631
- fix: invalid BUSYKEY response by @romange in #4637
- chore: propagate reserve data upon restore by @romange in #4641
- chore: get rid of sds in SortedMap::AddElem by @romange in #4638
- fix: improve test_send_delay_metric test by @romange in #4642
- fix: do not flush replicaof if failed to connect by @kostasrim in #4636
- fix: performance degradation with Reflex matching by @romange in #4634
- chore: get rid of lispack stats by @romange in #4644
- chore: add listpack statistics to objhist by @romange in #4650
- chore: allow sampling of topk hottest keys. by @romange in #4649
- feat: implement unique keys counting using hll by @romange in #4652
- fix: pull latest helio by @romange in #4651
- chore: unsubscribe pub/sub connections after cluster migration by @kostasrim in #4529
- fix: bring back the helm step to docker release action by @romange in #4657
- fix: do not crash upon inconsistent expire iterator by @romange in #4658
- chore: replace try assert false with pytest.raises by @kostasrim in #4662
- server: disable single shard tx optimization on scheduling by @adiholden in #4647
- fix: race condition in ReplicaOfInternal by @kostasrim in #4653
- Support Cluster configuration for dfly_bench by @romange in #4664
- CI: add slow regression tests by @adiholden in #4646
- fix: replication error message and scan command yield by @kostasrim in #4665
- feat: add migration error statistic by @BorysTheDev in #4643
- chore: refactor ServerFamily::Info by @romange in #4671
- fix(search_family): Add option tests for the FT.CREATE command by @BagritsevichStepan in #4678
- chore: introduce DEBUG COMPRESSION by @romange in #4620
- chore: cluster related clean ups by @romange in #4683
- fix: SendInvalidationTrackingMessage should not block. by @romange in #4680
- fix: reduce stack usage on Fedora by @romange in #4690
- fix(server): deadlock with replicaof inside multi by @adiholden in #4685
- fix(metrics): add corresponding comments to command metrics by @Yomanz in #4674
- feat: Added a flag to ignore key expiry. by @H4R5H1T-007 in #4667
- feat(cluster_mgr): Add argument to set path to dragonfly binary by @mkaruza in #4695
- fix: possible preemption under FiberAtomicGuard by @romange in #4692
- chore: add debug printings to SetExisting by @romange in #4694
- chore: Add debug logs to help tracking transactional deadlocks by @romange in #4669
- chore: snapshot/tiering improvements by @romange in #4661
- chore: disable failing epoll tests by @kostasrim in #4699
- feat: client unpause and client help by @kostasrim in #4630
- fix: ZMSCORE return value if key does not exist by @vyavdoshenko in #4697
- fix: prevent tx_executor reading from sock if operation is canceled by @BorysTheDev in #4704
- feat(set_family): Update TTL for existing fields in SADDEX by @abhijat in #4700
- chore: update CONTRIBUTING.md by @kostasrim in #4703
- chore: minor clean ups before introducing ProvidedBuffers by @romange in #4709
- refactor: clean cluster code by @BorysTheDev in #4707
- fix: Remove the dfly logo print from pytest run #4682 by @vyavdoshenko in #4706
- fix(json_family): Fix JSON.SET handling for nested fields by @BagritsevichStepan in #4710
- fix(dfly_bench): support dns resolution for cluster hosts by @romange in #4715
- fix: buffer overrun in GetRandomHex by @romange in #4717
- feat(set_family): Add support for KEEPTTL to SAddEx by @abhijat in #4712
- fix: preemption in atomic section of heartbeat by @kostasrim in #4720
- Revert "chore: minor clean ups before introducing ProvidedBuffers (#4… by @adiholden in #4719
- feat(server): Add PUBSUB SHARDCHANNELS/SHARDNUMSUB by @mkaruza in #4702
- fix(dfly_bench): track hit rate for mget command by @romange in #4723
- refactor: move tl_cluster_config into cluster_config.cc by @BorysTheDev in #4714
- feat: allow cluster READONLY command by @BorysTheDev in #4727
- fix: improve stack margin for s3 related operations. by @romange in #4731
- chore: Add clion build path to gitignore by @abhijat in #4732
- server: control cluster migration speed with flag by @adiholden in #4734
- chore: improve debug compression by @romange in #4735
- feat: dfly acl select by @kostasrim in #4696
- feat: add an option to start using iouring provided buffers by @romange in #4736
- fix: enforce strong consistency in channel_store by @kostasrim in #4740
- fix(transaction): Fix auto journaling in transaction by @BagritsevichStepan in #4737
- feat(hset_family): Add KEEPTTL support to HSetEx by @abhijat in #4730
- chore: replace chrono with absl in PipelineCacheSizeTracker by @kostasrim in #4748
- feat: allow non-ascii values in dfly_bench by @romange in #4751
- feat(server): Support dynamic SAVE path by @mkaruza in #4729
- feat(server): extend populate command with expire by @lichuang in #4752
- chore: Handle hsetex options in any order by @abhijat in #4754
- fix test: test_replication_all increase key num by @adiholden in #4747
- fix(server): hmget non uniqe keys response by @adiholden in #4745
- feat(metrics): Add label for main and other listeners by @abhijat in #4739
- feat(server): extend populate command with expire, fix bug that expire the same key for multiple time by @lichuang in #4757
- feat: add node health status into config by @BorysTheDev in #4758
- fix(test): Execute SSUBSCRIBE command directly in client by @mkaruza in #4763
- fix: optional brackets were removed for ipv6 host by @vyavdoshenko in #4759
- chore: clean up dbslice by @kostasrim in #4769
- fix: proper memory accounting for objects loaded via streaming by @romange in #4774
- fix bug : moved error port number on migration finish by @adiholden in #4776
- feat: add node health status for CLUSTER SLOTS and SHARDS by @BorysTheDev in #4767
- fix: removal of Expiry bit when overriding external strings by @romange in #4785
- Fix extended node info comparison by @BorysTheDev in #4788
- feat(server): Cluster MOVED response Prometheus metric by @mkaruza in #4786
- fix: invalid reference inside GetQueueBackpressure by @romange in #4789
Huge thanks to all the contributors! ❤️
New Contributors
- @mkaruza made their first contribution in #4582
- @Yomanz made their first contribution in #4674
- @H4R5H1T-007 made their first contribution in #4667
- @abhijat made their first contribution in #4700
- @lichuang made their first contribution in #4752
Full Changelog: v1.27.0...v1.28.0