Skip to content

Releases: dragonflydb/dragonfly

v1.38.0

14 Apr 07:04
31a8fd3

Choose a tag to compare

Dragonfly v1.38.0

This release is a major one with lots of significant improvements and stability fixes.
It may behave differently due to changes in its core data structures.
We worked hard to avoid any regressions so please let us know if you observe degradation around item expiry behavior, replication or backups.

Important stability fixes and changes:

Top-K command family (TOPK.*): RedisBloom-compatible heavy-hitter sketch with
RDB persistence. (#6920, #6931, #6932, #6950)

Count-Min Sketch family (CMS.*): Full CMS with INITBYDIM, INITBYPROB,
INCRBY, QUERY, MERGE, INFO. RDB persistence. (#6867, #6888, #6896, #6897)

~26% memory reduction for TTL workloads: Expire table eliminated, expiry embedded
in CompactKey via SDS_TTL_TAG. 10M keys: 900 MB -> 665 MB. (#6923, #6925, #6933)

HTTL command: Returns remaining TTL for specific hash fields. (#6879)

VECTOR_RANGE search: Radius-based vector similarity queries in FT.SEARCH and
FT.AGGREGATE for both FLAT and HNSW indexes, with optional YIELD_DISTANCE_AS.
(#6880, #6898, #6938)

FT.AGGREGATE: FILTER, APPLY, DIALECT, KNN: Full expression-based filtering,
computed fields, dialect selection, and KNN steps in the aggregation pipeline.
(#6968, #6982, #7066)

Smarter KNN prefilter: Falls back to brute-force scan when prefilter result set
is small. (#6730)

Replica expired-key deletion: Replicas proactively delete expired keys on reads.
--replica_delete_expired (default true). (#6985)

New Prometheus metrics: Pipeline latency histogram (dragonfly_pipeline_latency_seconds),
TLS handshake counter (tls_handshakes_total), stream access patterns
(stream_accesses_total), pipeline blocking counter. (#6688, #7015, #6767, #6685)

EKS Pod Identity for S3: AWS credential chain supports EKS Pod Identity and ECS
task roles. (#6917)

Early TLS filter and TCP_DEFER_ACCEPT: Drops zombie connections at OS level before
allocating fiber/OpenSSL state. (#6857)

Memcached io_loop_v2 enabled by default*: Async I/O with deferred replies. (#6700)

Incremental SBF replication: Scalable Bloom Filter chunks flushed incrementally,
bounding peak memory. (#7034)

What's Changed

  • chore(server): Extend script slowlog stats by @dranikpg in #6656
  • test(ci): exclude flaky BullMQ tests by @vyavdoshenko in #6673
  • feat(fuzz): Add LLM-guided PR fuzzing with targeted seed generation by @vyavdoshenko in #6666
  • refactor(journal): replace Journal class with free functions by @romange in #6672
  • fix(search): Fix HNSW index creation failure, logs, drop by @dranikpg in #6662
  • refactor: clean includes by @BorysTheDev in #6679
  • chore: remove facade/acl_commands.h by @kostasrim in #6682
  • fix: improve fuzz-pr crash detection and artifact packaging by @vyavdoshenko in #6686
  • feat(tiering): Use Future::IsResolved to check if delayed entry is resolved by @mkaruza in #6665
  • test: mark heavy skipped tests as large instead of skip by @vyavdoshenko in #6675
  • feat: add pipeline latency histogram and Prometheus SUMMARY export by @romange in #6688
  • refactor: move methods from OAHEntry to OAHSet by @BorysTheDev in #6692
  • chore: remove duplicate info reported by "memory stats" by @romange in #6696
  • server: Collect stats for why defragmentation was skipped by @abhijat in #6680
  • fix: shrink memory usage for journaling items by @romange in #6695
  • ci: exclude flaky BullMQ getWorkers shared connection test by @vyavdoshenko in #6697
  • fix(tiering): Track all keys mutation callback for cluster migration by @mkaruza in #6691
  • refactor: remove static fields from rdb_load by @BorysTheDev in #6684
  • fix(tiering): Increase write depth by @dranikpg in #6705
  • refactor(mc): async MGET/GAT by @glevkovich in #6674
  • chore(ci): Replace direct push with PR for helm chart updates by @vyavdoshenko in #6717
  • fix: validate stream command arguments to prevent crashes by @vyavdoshenko in #6718
  • fix(fuzz): skip missing RECORD files in replay_crash.py by @vyavdoshenko in #6719
  • chore: Skip KNN search if prefilter is empty by @mkaruza in #6720
  • perf(seeder): batch STRING hashing with MGET to reduce tiering latency by @romange in #6721
  • test: add test for replication HNSW index by @BorysTheDev in #6722
  • skip tiering tests by @dranikpg in #6723
  • ci: migrate ioloop-v2-regtests to OIDC for AWS auth by @AdiCloudbit-DevOps in #6725
  • test: skip test_hnsw_search_replication_with_network_disruptions by @BorysTheDev in #6729
  • feat: add RM command skeleton (phase 1) by @romange in #6731
  • chore: add pipeline_blocking_commands_total counter by @kostasrim in #6685
  • feat(set_family): Reserve vector on OpInter in advance by @abhijat in #6736
  • ci: add memcache fuzzing to regular campaign by @vyavdoshenko in #6735
  • test: consolidate slow marker into large by @vyavdoshenko in #6734
  • feat(dash): segment merging by @kostasrim in #6676
  • server: move blob loading logic into respective family classes by @romange in #6713
  • feat(facade): enable experimental_io_loop_v2 by default and clean CI by @glevkovich in #6700
  • core: Fix page usage accounting by @abhijat in #6737
  • chore: do not reconcile slots after dfly takeover if cluster config updated by @kostasrim in #6728
  • fix: orphan streams on error in OpCreate and OpAdd by @kostasrim in #6744
  • fix: crash in SetFullJson when overwriting string key with JSON by @vyavdoshenko in #6750
  • fix(server): flush replies on encountering blocking command in pipeline by @abhijat in #6743
  • server: Add summary view to memory arena by @abhijat in #6677
  • chore: stream family boilerplate to a function by @kostasrim in #6748
  • fix: prevent SIGFPE in DEBUG POPULATE when val_size is 0 by @vyavdoshenko in #6754
  • feat: implement RM scan-and-delete logic (phase 2) by @romange in #6732
  • refactor: move stream functions from t_stream.c to their call sites by @romange in #6703
  • ci: add optional memcache smoke fuzzing to PR workflow by @vyavdoshenko in #6758
  • feat(server): Get and set byte at index position in string object by @mkaruza in #6752
  • refactor: move stream alloc/free into compact_object and fix rdb_load cleanup by @romange in #6759
  • fix: return WOULD_BLOCK for STATS/VERSION in MC pipeline by @vyavdoshenko in #6762
  • ci: extract BullMQ skipped tests into a documented file by @vyavdoshenko in #6756
  • chore: Retrieve single byte for GETBIT command by @mkaruza in #6757
  • fix(bitops): Fetch only single byte for SETBIT operation by @mkaruza in #6745
  • fix: prevent empty hash on HINCRBYFLOAT with NaN/Inf by @vyavdoshenko in #6772
  • chore: revert our custom check-fails in mimalloc by @romange in #6774
  • json: Add stats for interned string pool by @abhijat in #6701
  • feat(server): add stream access pattern metrics by @romange in #6767
  • feat: add deffered queue for hnsw write ops by @BorysTheDev in #6746
  • feat(search): Use filtered search when prefilter result size is small by @mkaruza in #6730
  • chore: upload coverage by @kostasrim in #6747
  • tests: Protect connections with mutex by @abhijat in #6777
  • fix(search): use 2D vectors in HnswSubsetKnnTest/CompareWithFilteredKnn f or COS...
Read more

v1.37.2

26 Mar 07:49
9eee1e1

Choose a tag to compare

This is a patch release

What's Changed

  • fix(json): JSON.NUMINCRBY negative result overflow (#6981)
  • fix(streams): crash for XREAD BLOCK with replication (#6980)
  • fix(bitops): Improve performance of SETBIT operation (#6745)

Full Changelog: v1.37.0...v1.37.2

v1.37.0

23 Feb 10:50
aa35ea8

Choose a tag to compare

Dragonfly v1.37.0

Important stability fixes and changes:

  • Significant memory reduction around json documents #6511
  • Vector search memory usage is 40% less with hash map documents: #6436 #6437
  • Support of SORT command - including BY and GET options.
  • Several bug fixes around streams: #6506 #6492 #6532
  • Added support for DIGEST and DELEX commands: #6328

What's Changed

Read more

v1.36.0

07 Jan 11:23
65c71bd

Choose a tag to compare

Dragonfly v1.36.0

Important stability fixes and changes:

  1. Support Global Vector index #6103
  2. Support unicode tags in #6127
  3. django-cacheops compatibility fixes: #6123 #6129
  4. better memory defragmentation for json objects: #6240 #6276

What's Changed

Read more

v1.35.1

25 Nov 16:20
a8c096c

Choose a tag to compare

This is a patch release

What's Changed

  • fix(tiering): improvements around tiering stability #6040 #6086 #6067
  • fix(server): replica rejects replicating from itself #6097

Full Changelog: v1.35.0...v1.35.1

v1.34.2

14 Oct 16:04
00f52dc

Choose a tag to compare

This is a patch release

It is strongly advised to update to this version if you use 1.34.0 / 1.34.1 due to regression when Dragonfly runs in cache mode

What's Changed

  • fix(evicition): Don't accumulate deleted bytes if there is no RSS evi… by @BorysTheDev in #5908

Full Changelog: v1.34.1...v1.34.2

v1.34.1 (Use with caution - see known issues in description)

18 Sep 19:50
cae4e15

Choose a tag to compare

This is a patch release

Known issues

#5899
#5891

What's Changed

  • fix: prometheus is unable to scrape the /metrics endpoint #5829

Full Changelog: v1.34.0...v1.34.1

v1.34.0 (Use with caution - see known issues in description)

17 Sep 23:33
65acd60

Choose a tag to compare

Dragonfly v1.34.0

Known issues

#5899
#5891

Important stability fixes and changes:

What's Changed

Huge thanks to all the contributors! ❤️

New Contributors

Full Changelog: v1.33.0...v1.34.0

v1.33.1

21 Aug 10:21
bba344b

Choose a tag to compare

This is a patch release.

It is strongly advised to update to this version if you use 1.33 due to regression below.

What's Changed

  • fix : stack corruption in MultiCommandSquasher #5697
    It also fixed the io_uring compatibility issue with older kernels (#5693)

v1.33.0

19 Aug 07:10
91a23c8

Choose a tag to compare

Dragonfly v1.33.0

Important stability fixes and changes:

What's Changed

Full Changelog: v1.32.0...v1.33.0