feat(container): update image docker.dragonflydb.io/dragonflydb/dragonfly ( v1.38.1 → v1.39.0 )#1793
Open
chaplain-grimaldus[bot] wants to merge 1 commit into
Conversation
…nfly ( v1.38.1 → v1.39.0 )
83d7f83 to
e9e7d91
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v1.38.1→v1.39.0Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
dragonflydb/dragonfly (docker.dragonflydb.io/dragonflydb/dragonfly)
v1.39.0Compare Source
Dragonfly v1.39.0
This release delivers a significant leap in full-text search capability —
FT.HYBRIDfuses vector similarity with text queries, exact phrase matching with slop arrives, Porter stemming is on by default for TEXT fields, and BM25STD/TFIDF scoring withWITHSCORESsupport rounds out a deeply improved search engine. Performance improves across the board: PubSub reply batching cuts syscalls by 24–70% and raises throughput up to +12% RPS, INFO REPLICATION becomes fully lock-free, and a new ShardedHashMap replaces the global RCU ChannelStore for pub/sub. Security is tightened with multiple Lua sandbox hardening patches, RESP injection prevention, and PII-safe error logging. Tiered hashes are now mutable. A significant sweep of zombie-key cleanup fixes closes a class of bugs where lazy field expiry across SORT, ZUNIONSTORE, ZINTERSTORE, SHRINK, and hash TTL commands left empty containers in the keyspace.Highlights
FT.HYBRIDcombining full-text and vector similarity search with LINEAR and RRF score fusion strategies, capping a major release cycle of search improvements (#7420)Search
FT.HYBRIDcombining full-text and VSIM search via LINEAR (ALPHA/BETA weighted sum of normalized scores) and RRF (Reciprocal Rank Fusion) strategies, with HNSW KNN and range-based vector queries,YIELD_SCORE_ASaliasing, LOAD projection, andFT.PROFILEsupport (#7420)"hello world") and approximate phrase matching with slop ("..."~N), backed by per-document token positions stored in compressed posting lists; BM25 scoring updated for phrase semantics (#7319)NOSTEM, index-levelLANGUAGE(defaultenglish), and per-documentLANGUAGE_FIELDare all supported;FT.INFOsurfaces the new flags (#7295)TFIDF(TF × ln(N/n)) andTFIDF.DOCNORM(additionally normalized by field length) as new scorer options forFT.SEARCH,FT.PROFILE, andFT.AGGREGATE; scorer dispatch refactored to a function-pointer table (#7200)FT.SEARCHnow supportsWITHSCORESandSCORERparameters;FT.AGGREGATEgainsADDSCORESto inject a__scorefield enabling downstream GROUPBY/SORTBY/REDUCE on relevance (#7181)search_usedmemory class and reported indragonfly_memory_used_bytesvia an atomic capacity-based footprint counter (#7205)Performance
sendmsgper message; single-message wakeups still flush immediately [+3% RPS at pipeline=1, +12% at pipeline=10, −24% to −70% syscalls at pipeline=1–500] (#7479)ShardedHashMap(16 independent shard locks), removing the pool-wide broadcast on every subscribe/unsubscribe (#7174)NotifyWatchQueueexits in O(1) when a watched key is absent (previously O(N) over all waiters), directly benefiting BLPOP, BZPOPMIN, and XREAD workloads (#7225)--container_iteration_yield_interval_usec(default 500 µs, 0 to disable) (#7391)--use_oah_set; threaded through RDB save/load, async deletion, defragmentation, and SHRINK (#7246)TryBorrow()returns an encoded view with Copy-on-Write semantics; a thread-local pin registry defers buffer deallocation until all readers finish (#7412)Replication
serialization_tagged_chunksflag enabling the RDB serializer to split large entries into tagged chunks with envelope IDs; compression is applied per-blob; a related list-decoding crash during chunked load is also fixed (#7416)/metrics:dragonfly_master_link_status,dragonfly_master_last_io_seconds_ago,dragonfly_sync_in_progress, anddragonfly_slave_repl_offset(#7069)Cluster
--cluster_coordinator_connect_timeout_msand--cluster_coordinator_response_timeout_msflags to control coordinator-to-shard timeouts (previously hard-coded at 3000 ms) (#7221)Commands
CLIENT LISTnow supportsTYPE <normal|master|replica|slave|pubsub>andID <id> [id …]filter arguments; outbound replication links are surfaced asTYPE masterentries;CLIENT KILL IDon a master-link ID returns a descriptive error directing users toREPLICAOF NO ONE(#7377)DEBUG TRAFFICnow supports per-listener recording (LISTENER <main|memcache|admin>), full Memcache protocol capture and replay (SET/GET/CAS/INCR/GAT/etc. with flags, expiry, and CAS tokens), and a v3 file format; v2 files remain readable (#7192)DEBUG TRAFFIC START <path> REPLICArecords the replication stream received by a replica from its master; fails with a clear error on standalone/master instances (#7217)BF.SCANDUMPiteratively exports a Scalable Bloom Filter in chunks of up to 16 MiB, returning(cursor, data)pairs untilcursor=0signals end-of-stream (#7092)BF.LOADCHUNKreconstructs an SBF from chunks produced byBF.SCANDUMP, completing the SCANDUMP/LOADCHUNK round-trip; guards prevent other BF commands from operating on a partially-loaded filter (#7169)BGSAVEnow accepts the optionalSCHEDULEsubcommand (case-insensitive) for Redis client compatibility; concurrent saves are still rejected rather than queued (#7286)dfly_benchgains--json_out_fileto write a memtier_benchmark-compatible latency JSON report including per-operation aggregate stats (count, ops/sec, average/min/max, p50/p99/p99.9) and a per-second time-series (#7269)Security
load()built-in is now wrapped to enforce text-only mode ("t"), closing a sandbox escape vector where a malicious script could supply binary Lua bytecode to bypass restrictions (#7376)rawset,setmetatable, andgetmetatableare overridden to block access to_Gand all global library tables; guard metatables are attached to prevent replacement or corruption across script executions (#7370)INFO ACLsection added, exposing aggregate registry metrics (acl_num_users, password/glob counts, estimatedacl_total_bytes) maintained incrementally without holding the registry write lock (#7149)Cloud & Storage
WITH_AWS+--s3_use_helio_client=false; builds withoutWITH_AWSno longer exit ons3://paths (#7180)az://URIs are correctly routed,OpenWriteFile/OpenReadFileuse thecloud::azureAPI, and cursor-based pagination fixes truncation for large buckets (#7131)AwsCredsProviderinstead of settingAWS_S3_ENDPOINTin the process environment, eliminating side effects for other processes (#7408)Bug Fixes
Replication & Persistence
slave_repl_offsetreporting zero inINFO REPLICATIONwhen replicating from a Redis/Valkey master; offset is now correctly populated fromrepl_offs_(#7517)ScheduleBatchInShard) allowing a journal DEL entry to execute before the RDB loader finished creating the key on a shard (#7507)SaveStringencoding was read back as raw bytes, crashing Dragonfly inRenamer::FinalizeRenameon COPY/DUMP (#7475)DFLY LOADnot propagating to replicas; the journal ring buffer is now cleared and reconnecting replicas are forced into full sync (#6740)REPLCONF CLIENT-IDsending the replica's internal ID instead of its cluster node ID (#7263)StartNewSlotMigrationswas called before stale slot data was flushed, causing incomingDFLYMIGRATE FLOWwrites to be wiped (#7333)Security & Lua
redis.error_reply()/redis.status_reply()strings containing\r\ncould inject arbitrary frames into the response stream (#7332)dragonfly.randstr()accepting unbounded arguments; input is now validated for count (1–32768), size (1–16 MiB), and type (#7368)EVAL/EVALSHAcrashing with a CHECK abort on negative or non-numericnumkeysarguments (e.g."-0") instead of returning an error reply (#7203)Search
\.,\-,\:) symmetrically at index time and query time, causing escaped-punctuation queries to fail to match (#7438)StringMapAccessor's destructor now deletes the key if the hash is empty after access (#7166)Commands & Data Structures
RESTOREnow performs deep (entry-by-entry) integrity validation on listpack, intset, quicklist, and stream payloads, preventing crafted payloads with malformed interior entries from causing OOB reads or crashes (#7502)DenseSet::SetExpiryTimenot settingexpiration_used_, causingRandomPairsUniqueto skip expiry filtering and return already-expired keys (#7392)ExpireIfNeededInternal,Find2) where deleting a node leftnode/currdangling for subsequent iterations (#7393)max_map_field_len; listpack encoding is now preserved for single-field hashes regardless of value size (#7257)BITCOUNTwithBITindex mode when the end index falls exactly on a byte boundary, and incorrect handling of both-negative inverted ranges on short strings (#7190)AutoUpdater::Run()processed a value whose object type changed (e.g., SORT STORE overwriting a SET with a LIST) (#7142)RecordJournalpreempted and triggered evictions before the stream size update;UpdateStreamSizeis now called beforeRecordJournal(#7235)MEMORY DEFRAGMENTsilently ignoring parse errors for the threshold float argument and proceeding with defaults (#7346)CancelBlocking()from being reached (#7273)Zombie Key / Empty Container Cleanup — Fixed a widespread class of bugs where lazy field or member expiry left empty containers as zombie keys, causing DFATAL crashes in subsequent SAVE or incorrect command behavior:
What's Changed
/metricsendpoint by @EricHayter in #7069SCHEDULEsubcommand in BGSAVE by @vyavdoshenko in #7286Configuration
📅 Schedule: (in timezone America/New_York)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR has been generated by Mend Renovate.