chore(facade): Track async_op_start_cycle_ in the V2 dispatch loop - #7902
Conversation
ProcessControlMessages (the V2 dispatch_q_ loop) ran AsyncOperations without setting async_op_start_cycle_, so check in IsAsyncOpTimedOut was always false. Set/clear it around the visit, matching the existing pattern in V1 ProcessControlMessage loop. Closes #7897 Signed-off-by: mkaruza <mario@dragonflydb.io>
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
PR Summary by Qodofix(facade): Track async_op_start_cycle_ in V2 dispatch loop
AI Description
Diagram
High-Level Assessment
Files changed (1)
|
Code Review by Qodo
Context used✅ Tickets:
🎫 bug(eval) SIGILL when execute EVAL command 🎫 Failing test: test_pubsub_slow_subscriber_closed✅ Cross-repo context Not relevant to this PR:
romange/helio🔴 Action Required 1. Timeout misses deferred flush
|
| async_op_start_cycle_ = base::CycleClock::Now(); | ||
| std::visit(AsyncOperations{reply_builder_.get(), this}, msg.handle); | ||
| async_op_start_cycle_ = 0; |
There was a problem hiding this comment.
🔴 Action Required
1. Timeout misses deferred flush 🐞 Bug ≡ Correctness
ProcessControlMessages clears async_op_start_cycle_ immediately after std::visit, but IoLoopV2 can later FlushReplies() outside that scope while async_op_start_cycle_ is 0. If the flush parks on a slow socket, SendPubMessageAsync’s IsAsyncOpOverdue() gate will stay false during the blocked send and may fail to trigger RequestPubsubClose/forced_disconnect.
Agent Prompt
## Issue description
`async_op_start_cycle_` is used to decide when a Pub/Sub send is overdue, but in IoLoopV2 the actual socket write can happen in `FlushReplies()` (idle park / error / migrate paths), after `ProcessControlMessages()` has already reset `async_op_start_cycle_` to 0. This makes `IsAsyncOpOverdue()` return false during a blocked `FlushReplies()` send.
## Issue Context
- `ProcessControlMessages()` batches and does not necessarily flush; it sets `async_op_start_cycle_` only around `std::visit` and then resets it.
- IoLoopV2 later calls `FlushReplies()` (which calls `SinkReplyBuilder::Flush()` -> `Send()` -> `sink_->Write(...)`) while `async_op_start_cycle_` is 0.
- `SendPubMessageAsync()` uses `IsAsyncOpOverdue()` as the timeout gate for slow-subscriber close.
## Fix Focus Areas
- src/facade/dragonfly_connection.cc[1724-1762]
- src/facade/dragonfly_connection.cc[2380-2446]
- src/facade/dragonfly_connection.cc[3680-3705]
- src/facade/reply_builder.h[104-115]
- src/facade/reply_builder.cc[171-222]
## Suggested direction
Prefer timing the *actual* blocked send rather than the visitor scope:
- Option A (localized): Change `Connection::IsAsyncOpOverdue()` to return true when `reply_builder_->IsSendActive()` and `Now() - reply_builder_->GetLastSendTimeCycles() >= timeout_cycles` (optionally keep the existing `async_op_start_cycle_` check as a fallback).
- Option B: Set/clear `async_op_start_cycle_` around `FlushReplies()` calls in IoLoopV2 paths that can flush Pub/Sub pushes (idle park, io_ec_, migrate), so the timeout window spans the real parked write.
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
🤖 Augment PR SummarySummary: V2 🤖 Was this summary useful? React with 👍 or 👎 |
glevkovich
left a comment
There was a problem hiding this comment.
LGTM, consider openning a follow up on https://github.com/dragonflydb/dragonfly/pull/7902/changes#r3622273930 for V2
…➔ v1.40.0) (#528) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/dragonflydb/dragonfly](https://github.com/dragonflydb/dragonfly) | minor | `v1.39.0` → `v1.40.0` | --- ### Release Notes <details> <summary>dragonflydb/dragonfly (ghcr.io/dragonflydb/dragonfly)</summary> ### [`v1.40.0`](https://github.com/dragonflydb/dragonfly/releases/tag/v1.40.0) [Compare Source](https://github.com/dragonflydb/dragonfly/compare/v1.39.0...v1.40.0) ##### Dragonfly v1.40.0 This is one of our biggest releases yet—both in terms of feature quality, total contributions, and the highest number of external contributors in the last two years. This release delivers major new functionality alongside a large body of correctness and stability fixes for tiered storage, replication, pub/sub, and the experimental V2 I/O loop. We added a new data type: Cuckoo Filters (CF.RESERVE, CF.ADD/ADDNX, CF.EXISTS/MEXISTS, CF.INSERT/INSERTNX, CF.INFO/COUNT/DEL/COMPACT, and RDB persistence). This brings Dragonfly to parity with RedisBloom's probabilistic structures alongside expanded Bloom filter (BF.INFO) and HyperLogLog support. Vector search gains native-width storage across all vector dtypes, EPSILON-tuned HNSW range queries, and EF\_RUNTIME control. Meanwhile, a long list of fixes hardens tiered-storage interactions with strings, hashes, lists, bitops, and HLL commands, in addition to several replication-consistency fixes around lazy TTL expiry. Performance work includes lazy lock-table registration, zero-copy GET, and replica-side command batching. - New Cuckoo Filter data type with full command set and RDB support. - Vector search now stores/computes at native declared width, plus EPSILON and EF\_RUNTIME tuning for HNSW. - Numerous tiered-storage and replication consistency fixes (HLL, hashes, lists, bitops, hash-field TTL expiry). ##### Highlights - Added a full Cuckoo Filter data type with RDB persistence, bringing RedisBloom parity for probabilistic structures ([#​7646](https://github.com/dragonflydb/dragonfly/issues/7646), [#​7700](https://github.com/dragonflydb/dragonfly/issues/7700)). - Vector search now stores/computes vectors at native declared width instead of always widening to FLOAT32, reducing memory usage ([#​7849](https://github.com/dragonflydb/dragonfly/issues/7849)). - Re-synced hyperloglog.c with upstream Valkey, fixing CVE-2025-32023 and adding AVX2/NEON kernels \[up to \~29x speedup on dense HLL merges] ([#​7961](https://github.com/dragonflydb/dragonfly/issues/7961)). ##### Commands - INFO now includes TLS certificate metadata (subject, issuer, validity dates) when TLS is enabled ([#​7844](https://github.com/dragonflydb/dragonfly/issues/7844)). - SAVE and BGSAVE now support a HELP subcommand ([#​7865](https://github.com/dragonflydb/dragonfly/issues/7865)). - JSON.STRAPPEND now supports an optional path argument, defaulting to root ([#​7868](https://github.com/dragonflydb/dragonfly/issues/7868)). - Implemented the RESET command, resetting a connection to a fresh-connection baseline ([#​7760](https://github.com/dragonflydb/dragonfly/issues/7760)). - Added Redis-compatible WAIT command, blocking until replicas acknowledge writes ([#​7454](https://github.com/dragonflydb/dragonfly/issues/7454)). - Added HGETEX and HPEXPIRETIME hash commands ([#​7717](https://github.com/dragonflydb/dragonfly/issues/7717)). - Added BF.INFO for Bloom filter metadata ([#​7761](https://github.com/dragonflydb/dragonfly/issues/7761)). - Added BM25STD.NORM and BM25STD.TANH scorers for FT.SEARCH/AGGREGATE/HYBRID ([#​7692](https://github.com/dragonflydb/dragonfly/issues/7692)). ##### Vector Search - Vector search (FLAT and HNSW) now stores and computes distances at native declared width (INT8, UINT8, FLOAT16, BFLOAT16, FLOAT32, FLOAT64) ([#​7849](https://github.com/dragonflydb/dragonfly/issues/7849)). - Added EPSILON parameter for HNSW-backed VECTOR\_RANGE queries to control overscan/recall near the radius boundary ([#​7718](https://github.com/dragonflydb/dragonfly/issues/7718)). - Added support for KNN query attribute block syntax (`=>{$EF_RUNTIME: ...; $YIELD_DISTANCE_AS: ...}`) ([#​7708](https://github.com/dragonflydb/dragonfly/issues/7708)). - Fixed filtered KNN vector search to serialize only actual winners instead of every pre-filter match, cutting CPU/memory overhead ([#​7670](https://github.com/dragonflydb/dragonfly/issues/7670)). ##### Cuckoo Filter - Added CF.INSERT and CF.INSERTNX for bulk insertion, with optional CAPACITY and NOCREATE ([#​7719](https://github.com/dragonflydb/dragonfly/issues/7719)). - Added compaction: CF.DEL auto-compacts past 10% deletions, plus a manual CF.COMPACT command ([#​7702](https://github.com/dragonflydb/dragonfly/issues/7702)). - Added CF.EXISTS and CF.MEXISTS for single/multi-item membership checks ([#​7682](https://github.com/dragonflydb/dragonfly/issues/7682)). - Added CF.ADD and CF.ADDNX, auto-creating filters with a default capacity of 1024 ([#​7681](https://github.com/dragonflydb/dragonfly/issues/7681)). ##### Probabilistic Data Structures - Added RDB serialization support for Cuckoo filters, enabling DUMP/RESTORE and persistence ([#​7700](https://github.com/dragonflydb/dragonfly/issues/7700)). - Added CF.INFO, CF.COUNT, and CF.DEL for filter metadata, occurrence counts, and item removal ([#​7691](https://github.com/dragonflydb/dragonfly/issues/7691)). - Added the base Cuckoo Filter data type via CF.RESERVE, with a new CUCKOO\_FILTER ACL category ([#​7646](https://github.com/dragonflydb/dragonfly/issues/7646)). ##### Performance - Extended parse-in-proactor pipelining optimization to more fiber park spots (shard hops, suspended replies on tiered I/O) ([#​7916](https://github.com/dragonflydb/dragonfly/issues/7916)). - Added `snapshot_egress_limit_bytes` to throttle per-shard socket egress during RDB/snapshot saves ([#​7774](https://github.com/dragonflydb/dragonfly/issues/7774)). - Reworked open-addressing hash container (OAHPair/OAHEntry) with compact variable-width size encoding, reducing fragmentation ([#​7853](https://github.com/dragonflydb/dragonfly/issues/7853)). - Enabled event-driven V2 IO loop for TLS connections ([#​7890](https://github.com/dragonflydb/dragonfly/issues/7890)). - Lists loaded from RDB/replication now benefit from ZSTD dictionary compression on load, not just push ([#​7734](https://github.com/dragonflydb/dragonfly/issues/7734)). - Replica-side Redis replication stream processing now batches commands via DispatchSquashedBatch ([#​7501](https://github.com/dragonflydb/dragonfly/issues/7501)). - Added `write_connection_throttling_sleep_usec` to throttle pipelined write batches, plus new batch I/O metrics ([#​7750](https://github.com/dragonflydb/dragonfly/issues/7750)). - \[Total sampled CPU cycles dropped from 64.34B to 59.31B (-7.8%)] Prefetches command contexts before executing squashed pipelined commands ([#​7796](https://github.com/dragonflydb/dragonfly/issues/7796)). - Optimistic single-shard inline transactions now skip lock-table registration in the common case ([#​7788](https://github.com/dragonflydb/dragonfly/issues/7788)). - \[+9.2% ops/s at pipeline=1, +5.0% at pipeline=10] V2 connection I/O loop drains pending socket data directly from RegisterOnRecv while suspended ([#​7608](https://github.com/dragonflydb/dragonfly/issues/7608)). - GET now returns large raw strings (≥16KB) via zero-copy borrowed view instead of copying ([#​7426](https://github.com/dragonflydb/dragonfly/issues/7426)). - Added connection\_memory\_bytes Prometheus metric tracking active client connection memory ([#​7550](https://github.com/dragonflydb/dragonfly/issues/7550)). - Wired pipeline squashing into the V2 event-driven dispatch loop via --enable\_pipeline\_squashing\_v2 ([#​7631](https://github.com/dragonflydb/dragonfly/issues/7631)). ##### Replication - Fixed cascading replication correctness when an intermediate replica switches upstream masters under experimental cascaded partial sync ([#​7913](https://github.com/dragonflydb/dragonfly/issues/7913)). - Enabled tagged chunk serialization by default during snapshotting and replication ([#​7823](https://github.com/dragonflydb/dragonfly/issues/7823)). - RDB loader no longer aborts on EOF with a partially received tagged chunk; now logs a warning and continues ([#​7660](https://github.com/dragonflydb/dragonfly/issues/7660)). - Fixed a crash where an older replica reconnecting to a promoted master could crash the master due to a stale partial-sync index ([#​7491](https://github.com/dragonflydb/dragonfly/issues/7491)). - Added a Prometheus metric for replication backlog buffer memory usage ([#​7644](https://github.com/dragonflydb/dragonfly/issues/7644)). ##### Search - Applied TEXT field schema weights and query-time $weight attributes to BM25/TF-IDF scoring ([#​7752](https://github.com/dragonflydb/dragonfly/issues/7752)). - Added parsing support for query-time `=>{$WEIGHT}` attributes on terms, tag filters, and vector range queries ([#​7749](https://github.com/dragonflydb/dragonfly/issues/7749)). - Added EF\_RUNTIME support for HNSW vector search, actually applying it instead of just parsing it ([#​7696](https://github.com/dragonflydb/dragonfly/issues/7696)). - Fixed FT.SEARCH quoted TAG values not matching stored values containing backslashes or quotes ([#​7907](https://github.com/dragonflydb/dragonfly/issues/7907)). - Fixed a race in RestoreStreamer where concurrent Cancel()/Start() could double-unregister a change listener ([#​7707](https://github.com/dragonflydb/dragonfly/issues/7707)). - Fixed KNN vector search score aliases to properly generate/return implicit score fields ([#​7604](https://github.com/dragonflydb/dragonfly/issues/7604)). - Fixed FT.SEARCH to return VECTOR fields as raw stored binary buffer instead of textual representation for HASH-stored fields ([#​7586](https://github.com/dragonflydb/dragonfly/issues/7586)). ##### Cluster - DFLYCLUSTER SLOT-MIGRATION-STATUS now includes covered slot ranges in its reply ([#​7911](https://github.com/dragonflydb/dragonfly/issues/7911)). - Fixed a race between Finish() teardown and SyncFb retry loop in slot migration ([#​7869](https://github.com/dragonflydb/dragonfly/issues/7869)). - Fixed OOM during incoming slot migration not propagating rollback deletion to the target's replica ([#​7533](https://github.com/dragonflydb/dragonfly/issues/7533)). - Added predefined Helm chart values for enabling Redis-compatible cluster mode ([#​7123](https://github.com/dragonflydb/dragonfly/issues/7123)). ##### Security - Fixed ACL DRYRUN gaps: multi-word commands, pub/sub channel checks, and content-dependent key positions ([#​7919](https://github.com/dragonflydb/dragonfly/issues/7919)). - Fixed ACL DRYRUN to support command arguments for accurate key-pattern permission validation ([#​7871](https://github.com/dragonflydb/dragonfly/issues/7871)). ##### Cloud & Storage - Fixed Azure snapshot storage to accept standard Azure Blob HTTPS URLs instead of custom az:// scheme ([#​7878](https://github.com/dragonflydb/dragonfly/issues/7878)). - Added `list_tiering_prefetch_depth` to asynchronously prefetch neighboring offloaded list nodes ([#​7834](https://github.com/dragonflydb/dragonfly/issues/7834)). - Made tiered storage initial backing file size configurable via `tiering_disk_storage_initial_size`, with 5%-of-capacity growth policy ([#​7715](https://github.com/dragonflydb/dragonfly/issues/7715)). - Tiered storage now skips offloading keys with remaining TTL below a configurable minimum (`tiered_min_ttl_to_offload_ms`) ([#​7624](https://github.com/dragonflydb/dragonfly/issues/7624)). ##### Bug fixes - Fixed per-slot memory\_bytes accounting in cluster mode to correctly track resident RAM across tiered storage operations ([#​7966](https://github.com/dragonflydb/dragonfly/issues/7966)). - Fixed a read-buffer capacity accounting bug causing client\_read\_buffer\_bytes to leak or double-count ([#​7951](https://github.com/dragonflydb/dragonfly/issues/7951)). - Fixed two crash/corruption bugs in cluster mode slot operations (FlushSlots and GetSlotStats) and enforced strict db0-only usage ([#​7960](https://github.com/dragonflydb/dragonfly/issues/7960)). - Fixed blocked XREAD/XREADGROUP being incorrectly woken by lower XADD ids, and a null-pointer crash on plain XREAD ([#​7959](https://github.com/dragonflydb/dragonfly/issues/7959)). - Fixed blocking XREAD/XREADGROUP on emptied streams returning immediately instead of waiting ([#​7958](https://github.com/dragonflydb/dragonfly/issues/7958)). - Fixed memory usage reporting for small string keys with TTL to report actual mimalloc block size ([#​7947](https://github.com/dragonflydb/dragonfly/issues/7947)). - Fixed replication divergence with HEXPIRE, HGETEX, HSETEX, and FIELDEXPIRE on lazily expired fields ([#​7948](https://github.com/dragonflydb/dragonfly/issues/7948)). - Fixed a crash when Lua scripts call GET on large string values via borrowed replies ([#​7934](https://github.com/dragonflydb/dragonfly/issues/7934)). - Fixed a replication bug where SHRINK's bucket compaction could leave a deleted key alive forever on a replica ([#​7938](https://github.com/dragonflydb/dragonfly/issues/7938)). - Fixed a cross-thread data race in command squashing accessing a shared reply builder concurrently ([#​7927](https://github.com/dragonflydb/dragonfly/issues/7927)). - Fixed EPERM handling in the io\_uring support check, falling back to epoll ([#​7810](https://github.com/dragonflydb/dragonfly/issues/7810)). - Fixed slow Pub/Sub subscribers not being evicted based on per-connection queued-data threshold ([#​7917](https://github.com/dragonflydb/dragonfly/issues/7917)). - Fixed a regression where UNSUBSCRIBE could jump ahead of queued pub/sub messages ([#​7909](https://github.com/dragonflydb/dragonfly/issues/7909)). - Fixed the V2 dispatch queue loop not setting async\_op\_start\_cycle\_, hiding timed-out async operations ([#​7902](https://github.com/dragonflydb/dragonfly/issues/7902)). - Dragonfly now force-closes blocked Pub/Sub subscribers exceeding a configurable soft memory limit ([#​7889](https://github.com/dragonflydb/dragonfly/issues/7889)). - Fixed a bug where a dropped checkpoint message leaked the DispatchTracker counter, hanging REPLTAKEOVER/CLIENT PAUSE/shutdown ([#​7862](https://github.com/dragonflydb/dragonfly/issues/7862)). - Fixed a race condition in REPLTAKEOVER where master-check and replica pointer check weren't atomic ([#​7870](https://github.com/dragonflydb/dragonfly/issues/7870)). - Fixed a use-after-free bug garbling long strings (stream IDs, sortkeys, scan cursors) sent by reference ([#​7874](https://github.com/dragonflydb/dragonfly/issues/7874)). - Fixed a bug where a blocked XREAD/XREADGROUP with COUNT ignored the COUNT limit on wake-up ([#​7872](https://github.com/dragonflydb/dragonfly/issues/7872)). - RDB loading now skips keys with unsupported module types instead of aborting the whole load ([#​7912](https://github.com/dragonflydb/dragonfly/issues/7912)). - Fixed a bug causing Dragonfly to SIGABRT on invalid startup flags instead of exiting cleanly ([#​7843](https://github.com/dragonflydb/dragonfly/issues/7843)). - Fixed crashes/incorrect behavior when commands accessed offloaded string values (DEBUG OBJECT, INCRBYFLOAT, memcached APPEND/PREPEND, JSON.GET) ([#​7836](https://github.com/dragonflydb/dragonfly/issues/7836)). - Fixed a race where heartbeat expiry/eviction could run while an optimistic transaction was suspended ([#​7826](https://github.com/dragonflydb/dragonfly/issues/7826)). - Fixed crashes in HLL commands when values were offloaded to tiered storage, plus a pipeline-squashing race corrupting results ([#​7820](https://github.com/dragonflydb/dragonfly/issues/7820)). - Fixed a race in the V2 (io\_uring) connection loop allowing CLIENT PAUSE/takeover/migration/shutdown to proceed early ([#​7805](https://github.com/dragonflydb/dragonfly/issues/7805)). - Fixed bitops commands (GETBIT, SETBIT, BITCOUNT, BITPOS, BITOP, BITFIELD) crashing on tiered string values ([#​7806](https://github.com/dragonflydb/dragonfly/issues/7806)). - Fixed a bug where stopping MONITOR mode didn't decrement the subscriptions counter ([#​7777](https://github.com/dragonflydb/dragonfly/issues/7777)). - Fixed the V2 IoLoopV2 path not tracking in-flight command dispatches, breaking CLIENT PAUSE/takeover/migration ([#​7764](https://github.com/dragonflydb/dragonfly/issues/7764)). - Fixed buffered replies remaining undelivered when a subsequent pipelined command blocked in the V2 path ([#​7733](https://github.com/dragonflydb/dragonfly/issues/7733)). - Fixed missing bookkeeping (command counters, idle timestamp) in the V2 connection batch dispatch path ([#​7726](https://github.com/dragonflydb/dragonfly/issues/7726)). - Fixed a bug where a bare GETEX (no expiry options) was incorrectly replicated ([#​7701](https://github.com/dragonflydb/dragonfly/issues/7701)). - Fixed a stats bug where io\_uring multishot recv failed to update read counters ([#​7680](https://github.com/dragonflydb/dragonfly/issues/7680)). - Fixed dragonfly\_commands\_processed\_total always reporting 0 ([#​7667](https://github.com/dragonflydb/dragonfly/issues/7667)). - Fixed a crash in Lua scripting when redis.call() received a non-string/number command name ([#​7655](https://github.com/dragonflydb/dragonfly/issues/7655)). - Fixed a QList bug where inserting before the first element of a full head node misplaced the element ([#​7640](https://github.com/dragonflydb/dragonfly/issues/7640)). - Fixed tiered list bugs: node deletion promoting offloaded nodes without materializing ([#​7638](https://github.com/dragonflydb/dragonfly/issues/7638)), stale entry pointers after restore ([#​7636](https://github.com/dragonflydb/dragonfly/issues/7636)). - Fixed a bug where MOVEing a key between databases left stale search index and memory-usage entries ([#​7637](https://github.com/dragonflydb/dragonfly/issues/7637)). - Fixed a replication bug where an older replica reconnecting to a promoted master could crash it ([#​7491](https://github.com/dragonflydb/dragonfly/issues/7491)). - Fixed a crash when admin control commands appeared inside a squashed pipeline ([#​7621](https://github.com/dragonflydb/dragonfly/issues/7621)). - Fixed a parsing bug where malformed RESP was silently treated as needing more input instead of a protocol error ([#​7615](https://github.com/dragonflydb/dragonfly/issues/7615)). - Restored the experimental\_io\_loop\_v2 flag after accidental removal ([#​7607](https://github.com/dragonflydb/dragonfly/issues/7607)). - Fixed keyspace-notification delivery running inside a fiber-atomic section during heartbeat expiry ([#​7540](https://github.com/dragonflydb/dragonfly/issues/7540)). - Re-enabled fiber yielding during long-running container iteration commands ([#​7449](https://github.com/dragonflydb/dragonfly/issues/7449)). - Fixed BITFIELD, BITOP, and SETBIT accepting out-of-range bit offsets, risking overflow/crashes ([#​7513](https://github.com/dragonflydb/dragonfly/issues/7513)). ##### Huge thanks to all the contributors! ❤️ ##### New Contributors - [@​VedantMadane](https://github.com/VedantMadane) made their first contribution in [#​7123](https://github.com/dragonflydb/dragonfly/pull/7123) - [@​github-actions](https://github.com/github-actions)\[bot] made their first contribution in [#​7553](https://github.com/dragonflydb/dragonfly/pull/7553) - [@​FarmerChillax](https://github.com/FarmerChillax) made their first contribution in [#​7614](https://github.com/dragonflydb/dragonfly/pull/7614) - [@​VincentNguyenDuc](https://github.com/VincentNguyenDuc) made their first contribution in [#​7777](https://github.com/dragonflydb/dragonfly/pull/7777) - [@​kant2002](https://github.com/kant2002) made their first contribution in [#​7809](https://github.com/dragonflydb/dragonfly/pull/7809) - [@​magic-peach](https://github.com/magic-peach) made their first contribution in [#​7830](https://github.com/dragonflydb/dragonfly/pull/7830) - [@​jacovdbergh](https://github.com/jacovdbergh) made their first contribution in [#​7872](https://github.com/dragonflydb/dragonfly/pull/7872) - [@​danfeideliaoji](https://github.com/danfeideliaoji) made their first contribution in [#​7868](https://github.com/dragonflydb/dragonfly/pull/7868) - [@​abhiramkaushik](https://github.com/abhiramkaushik) made their first contribution in [#​7870](https://github.com/dragonflydb/dragonfly/pull/7870) - [@​alexluong](https://github.com/alexluong) made their first contribution in [#​7907](https://github.com/dragonflydb/dragonfly/pull/7907) - [@​akhilp19](https://github.com/akhilp19) made their first contribution in [#​7844](https://github.com/dragonflydb/dragonfly/pull/7844) ##### What's Changed - chore: reproduce inline schedule during replication and save by [@​kostasrim](https://github.com/kostasrim) in [#​7508](https://github.com/dragonflydb/dragonfly/pull/7508) - chore(server): Collapse BucketSet variant, cleanups by [@​dranikpg](https://github.com/dranikpg) in [#​7487](https://github.com/dragonflydb/dragonfly/pull/7487) - bump: update helio submodule by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7532](https://github.com/dragonflydb/dragonfly/pull/7532) - chore: disable failing tests by [@​kostasrim](https://github.com/kostasrim) in [#​7541](https://github.com/dragonflydb/dragonfly/pull/7541) - feat: use more SIMD ops in OAHSet by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7537](https://github.com/dragonflydb/dragonfly/pull/7537) - fix: build with WITH\_COLLECTION\_CMDS=OFF by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7539](https://github.com/dragonflydb/dragonfly/pull/7539) - fix: oom on incoming slot migration does not clean the replica by [@​kostasrim](https://github.com/kostasrim) in [#​7533](https://github.com/dragonflydb/dragonfly/pull/7533) - perf: zero-copy GET for large strings with CoW by [@​romange](https://github.com/romange) in [#​7426](https://github.com/dragonflydb/dragonfly/pull/7426) - fix: bound bitmap bit offsets and deny BITFIELD/BITOP under memory pressure by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7513](https://github.com/dragonflydb/dragonfly/pull/7513) - fix(regtets): Increase test\_big\_huge\_streaming\_restart timeout by [@​dranikpg](https://github.com/dranikpg) in [#​7547](https://github.com/dragonflydb/dragonfly/pull/7547) - feat(helm): add cluster mode values for Dragonfly chart by [@​VedantMadane](https://github.com/VedantMadane) in [#​7123](https://github.com/dragonflydb/dragonfly/pull/7123) - chore(deps): bump codecov/codecov-action from 6 to 7 in the actions group by [@​dependabot](https://github.com/dependabot)\[bot] in [#​7544](https://github.com/dragonflydb/dragonfly/pull/7544) - chore: retire v1 and experimental\_replicaof\_v2 flag by [@​kostasrim](https://github.com/kostasrim) in [#​7542](https://github.com/dragonflydb/dragonfly/pull/7542) - chore(server): Unify SerializeEntry calls in SerializerBase by [@​dranikpg](https://github.com/dranikpg) in [#​7468](https://github.com/dragonflydb/dragonfly/pull/7468) - chore: update pubsub stress test and release notes generator by [@​romange](https://github.com/romange) in [#​7527](https://github.com/dragonflydb/dragonfly/pull/7527) - fix(tiering): Don't overstaturate when Offloading not requried by [@​dranikpg](https://github.com/dranikpg) in [#​7531](https://github.com/dragonflydb/dragonfly/pull/7531) - CI: align release\_helm\_and\_notify Go toolchain with go.work by [@​romange](https://github.com/romange) with [@​Copilot](https://github.com/Copilot) in [#​7552](https://github.com/dragonflydb/dragonfly/pull/7552) - chore: remove DispatchMC by inlining MC logic into DispatchCommand by [@​romange](https://github.com/romange) in [#​7551](https://github.com/dragonflydb/dragonfly/pull/7551) - perf(tx): track running transactions per-shard and enable inline scheduling during replication by [@​romange](https://github.com/romange) in [#​7459](https://github.com/dragonflydb/dragonfly/pull/7459) - test: re-enable test\_reply\_count for V1 by [@​glevkovich](https://github.com/glevkovich) in [#​7561](https://github.com/dragonflydb/dragonfly/pull/7561) - fix(search): accept FT.AGGREGATE LOAD after SCORER/ADDSCORES by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7557](https://github.com/dragonflydb/dragonfly/pull/7557) - fix(search): drop stopwords from query terms in FT.SEARCH by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7558](https://github.com/dragonflydb/dragonfly/pull/7558) - chore(helm-chart): update to v1.39.0 by [@​github-actions](https://github.com/github-actions)\[bot] in [#​7553](https://github.com/dragonflydb/dragonfly/pull/7553) - chore: add check-ast and pyflakes pre-commit hooks by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7554](https://github.com/dragonflydb/dragonfly/pull/7554) - fix(search): support parenthesized and filtered VECTOR\_RANGE queries by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7534](https://github.com/dragonflydb/dragonfly/pull/7534) - fix: prevent integer overflow in max\_busy\_read\_cycles\_cached by [@​romange](https://github.com/romange) in [#​7562](https://github.com/dragonflydb/dragonfly/pull/7562) - chore: make CmdArgParser work directly with BackedArguments by [@​romange](https://github.com/romange) in [#​7565](https://github.com/dragonflydb/dragonfly/pull/7565) - feat(facade): extend ok\_main with sharded SET/GET and async dispatch by [@​romange](https://github.com/romange) in [#​7545](https://github.com/dragonflydb/dragonfly/pull/7545) - server: Simplify Flush - PrepareFlush interaction by [@​abhijat](https://github.com/abhijat) in [#​7548](https://github.com/dragonflydb/dragonfly/pull/7548) - chore: debug help for compact-table by [@​kostasrim](https://github.com/kostasrim) in [#​7568](https://github.com/dragonflydb/dragonfly/pull/7568) - tests: Add a test which fails if RSS goes beyond used\_mem by [@​abhijat](https://github.com/abhijat) in [#​7535](https://github.com/dragonflydb/dragonfly/pull/7535) - chore(core): Re-enable container iterations yielding by [@​mkaruza](https://github.com/mkaruza) in [#​7449](https://github.com/dragonflydb/dragonfly/pull/7449) - chore: pass CmdArgParser to async command handlers via SetAsyncHandler by [@​romange](https://github.com/romange) in [#​7567](https://github.com/dragonflydb/dragonfly/pull/7567) - fix: keyspace notifcations suspend heartbeat in atomic section by [@​kostasrim](https://github.com/kostasrim) in [#​7540](https://github.com/dragonflydb/dragonfly/pull/7540) - chore: retire --rename\_command and --oom\_deny\_commands flags by [@​romange](https://github.com/romange) in [#​7569](https://github.com/dragonflydb/dragonfly/pull/7569) - chore: Add python tests for concurrent QList node materialization by [@​mkaruza](https://github.com/mkaruza) in [#​7417](https://github.com/dragonflydb/dragonfly/pull/7417) - fix(search): reply to FT.INFO with a flat array under RESP3 by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7576](https://github.com/dragonflydb/dragonfly/pull/7576) - chore: use BackedArguments in DEBUG POPULATE by [@​romange](https://github.com/romange) in [#​7571](https://github.com/dragonflydb/dragonfly/pull/7571) - chore: Enable test\_cluster\_migration\_with\_tiering and relax parameters by [@​mkaruza](https://github.com/mkaruza) in [#​7573](https://github.com/dragonflydb/dragonfly/pull/7573) - chore(server): use CycleClock for latency and move OOM check into ServerState by [@​romange](https://github.com/romange) in [#​7577](https://github.com/dragonflydb/dragonfly/pull/7577) - fix: eliminate false sharing in RecordLatency and fix data race in ok\_main by [@​romange](https://github.com/romange) in [#​7581](https://github.com/dragonflydb/dragonfly/pull/7581) - chore: introduce CmdRef and generator-based MultiCommandSquasher by [@​romange](https://github.com/romange) in [#​7564](https://github.com/dragonflydb/dragonfly/pull/7564) - chore: reduce log level by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7583](https://github.com/dragonflydb/dragonfly/pull/7583) - Add pipeline-reply plumbing to MultiCommandSquasher by [@​romange](https://github.com/romange) in [#​7587](https://github.com/dragonflydb/dragonfly/pull/7587) - fix(tiering): Avoid defrag spikes + fix negative memory budget bug by [@​dranikpg](https://github.com/dranikpg) in [#​7543](https://github.com/dragonflydb/dragonfly/pull/7543) - chore: retire squash\_stats\_latency\_lower\_limit and simplify dispatch stats by [@​romange](https://github.com/romange) in [#​7592](https://github.com/dragonflydb/dragonfly/pull/7592) - Squash V1 pipelines via DispatchSquashedBatch by [@​romange](https://github.com/romange) in [#​7588](https://github.com/dragonflydb/dragonfly/pull/7588) - feat(facade): route ok\_backend SET/GET through per-shard FiberQueue by [@​romange](https://github.com/romange) in [#​7594](https://github.com/dragonflydb/dragonfly/pull/7594) - Remove dead DispatchManyCommands by [@​romange](https://github.com/romange) in [#​7589](https://github.com/dragonflydb/dragonfly/pull/7589) - refactor: reduce threads contention for INFO cmd by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7523](https://github.com/dragonflydb/dragonfly/pull/7523) - fix(search): return stored VECTOR fields verbatim in FT.SEARCH by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7586](https://github.com/dragonflydb/dragonfly/pull/7586) - feat(server): No-op mutex when tagged chunks are enabled by [@​dranikpg](https://github.com/dranikpg) in [#​7463](https://github.com/dragonflydb/dragonfly/pull/7463) - doc(serialization): sync shard-serialization.md with current code by [@​romange](https://github.com/romange) in [#​7600](https://github.com/dragonflydb/dragonfly/pull/7600) - fix(facade): retire experimental\_io\_loop\_v2 flag by [@​glevkovich](https://github.com/glevkovich) in [#​7607](https://github.com/dragonflydb/dragonfly/pull/7607) - fix(tests): tiering tests fixes by [@​dranikpg](https://github.com/dranikpg) in [#​7574](https://github.com/dragonflydb/dragonfly/pull/7574) - refactor(server): record last-command stats at top-level dispatch by [@​romange](https://github.com/romange) in [#​7599](https://github.com/dragonflydb/dragonfly/pull/7599) - dfly\_bench: Resolve MOVED response with DNS names by [@​abhijat](https://github.com/abhijat) in [#​7613](https://github.com/dragonflydb/dragonfly/pull/7613) - docs: update Grafana dashboard links by [@​FarmerChillax](https://github.com/FarmerChillax) in [#​7614](https://github.com/dragonflydb/dragonfly/pull/7614) - fix(facade): propagate parse status from batch parsers by [@​romange](https://github.com/romange) in [#​7615](https://github.com/dragonflydb/dragonfly/pull/7615) - Consolidate CommandId derived attributes into a kind\_mask bitmask by [@​romange](https://github.com/romange) in [#​7591](https://github.com/dragonflydb/dragonfly/pull/7591) - refactor(facade): extract IoLoopV2 helpers to cut duplication by [@​romange](https://github.com/romange) in [#​7617](https://github.com/dragonflydb/dragonfly/pull/7617) - feat(facade): squash V1 pipelines and support io\_uring provided buffers in ok\_backend demo by [@​romange](https://github.com/romange) in [#​7610](https://github.com/dragonflydb/dragonfly/pull/7610) - fix(server): exclude admin commands from pipeline squashing by [@​romange](https://github.com/romange) in [#​7621](https://github.com/dragonflydb/dragonfly/pull/7621) - refactor(facade): extract IoLoopV2 phases into per-concern methods by [@​romange](https://github.com/romange) in [#​7623](https://github.com/dragonflydb/dragonfly/pull/7623) - fix: Persist search index options across restore and full sync by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7620](https://github.com/dragonflydb/dragonfly/pull/7620) - stop test\_big\_huge\_streaming\_restart test by [@​dranikpg](https://github.com/dranikpg) in [#​7627](https://github.com/dragonflydb/dragonfly/pull/7627) - perf(facade): Drain socket in recv callback by [@​glevkovich](https://github.com/glevkovich) in [#​7608](https://github.com/dragonflydb/dragonfly/pull/7608) - feat(server): Concurrent squashing by [@​dranikpg](https://github.com/dranikpg) in [#​7597](https://github.com/dragonflydb/dragonfly/pull/7597) - fix(test): Make container yield check atomic in ConcurrentWritesDuringContainerYield by [@​mkaruza](https://github.com/mkaruza) in [#​7609](https://github.com/dragonflydb/dragonfly/pull/7609) - fix: KNN score aliases in FT.SEARCH and FT.AGGREGATE by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7604](https://github.com/dragonflydb/dragonfly/pull/7604) - feat(ok\_backend): accept bind and dbfilename flags by [@​glevkovich](https://github.com/glevkovich) in [#​7629](https://github.com/dragonflydb/dragonfly/pull/7629) - Track dispatch\_waiting\_count\_ and rename ok\_backend metrics by [@​romange](https://github.com/romange) in [#​7625](https://github.com/dragonflydb/dragonfly/pull/7625) - fix(replication): reset partial sync index if dfly flow is received by [@​kostasrim](https://github.com/kostasrim) in [#​7491](https://github.com/dragonflydb/dragonfly/pull/7491) - server: Adds metric for connection memory bytes by [@​abhijat](https://github.com/abhijat) in [#​7550](https://github.com/dragonflydb/dragonfly/pull/7550) - refactor(facade): extract ok\_main squasher into EmitBlockingBatch by [@​romange](https://github.com/romange) in [#​7633](https://github.com/dragonflydb/dragonfly/pull/7633) - test(fuzz): Add experimental persistent AFL++ nightly fuzzing by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7593](https://github.com/dragonflydb/dragonfly/pull/7593) - fix: stale search index entries after MOVE by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7637](https://github.com/dragonflydb/dragonfly/pull/7637) - fix(tiering): Fix QList node cleanup after clearing offloaded state by [@​mkaruza](https://github.com/mkaruza) in [#​7636](https://github.com/dragonflydb/dragonfly/pull/7636) - fix(tiering): Keep tiered list endpoints materialized by [@​mkaruza](https://github.com/mkaruza) in [#​7638](https://github.com/dragonflydb/dragonfly/pull/7638) - fix(list\_family): Fix QList insert-before at head by [@​mkaruza](https://github.com/mkaruza) in [#​7640](https://github.com/dragonflydb/dragonfly/pull/7640) - fix: experimental fuzz workflow validation and run title by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7641](https://github.com/dragonflydb/dragonfly/pull/7641) - Extend dfly\_bench JSON output by [@​romange](https://github.com/romange) in [#​7643](https://github.com/dragonflydb/dragonfly/pull/7643) - Add repl backlog memory metric by [@​romange](https://github.com/romange) in [#​7644](https://github.com/dragonflydb/dragonfly/pull/7644) - feat: add /benchmark Claude Code skill by [@​romange](https://github.com/romange) in [#​7642](https://github.com/dragonflydb/dragonfly/pull/7642) - feat: cuckoo filter data structutre by [@​kostasrim](https://github.com/kostasrim) in [#​7619](https://github.com/dragonflydb/dragonfly/pull/7619) - build: Make the release artifacts use GLOG instead of absl by [@​abhijat](https://github.com/abhijat) in [#​7596](https://github.com/dragonflydb/dragonfly/pull/7596) - chore(facade): remove no-op io\_event\_ notifies in ioloop v2 by [@​glevkovich](https://github.com/glevkovich) in [#​7635](https://github.com/dragonflydb/dragonfly/pull/7635) - feat(server): Omittable DEL operation by [@​dranikpg](https://github.com/dranikpg) in [#​7496](https://github.com/dragonflydb/dragonfly/pull/7496) - Coroutine batch squasher for ok\_main V2 dispatch by [@​romange](https://github.com/romange) in [#​7602](https://github.com/dragonflydb/dragonfly/pull/7602) - fix: bound CMS dimensions to prevent heap overflow on INITBYDIM/INITBYPROB by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7647](https://github.com/dragonflydb/dragonfly/pull/7647) - chore: pass BackedArguments through Lua redis.call path by [@​romange](https://github.com/romange) in [#​7572](https://github.com/dragonflydb/dragonfly/pull/7572) - fix: validate Lua redis.call command name argument by [@​romange](https://github.com/romange) in [#​7655](https://github.com/dragonflydb/dragonfly/pull/7655) - chore: migrate generic functions to use ParsedArgs by [@​romange](https://github.com/romange) in [#​7654](https://github.com/dragonflydb/dragonfly/pull/7654) - Back Transaction::full\_args\_ with facade::ParsedArgs by [@​romange](https://github.com/romange) in [#​7656](https://github.com/dragonflydb/dragonfly/pull/7656) - feat(facade): wire V2 dispatch loop into pipeline squashing by [@​romange](https://github.com/romange) in [#​7631](https://github.com/dragonflydb/dragonfly/pull/7631) - refactor(facade): extract IoLoopV2 data-path into drain/parse helpers by [@​romange](https://github.com/romange) in [#​7618](https://github.com/dragonflydb/dragonfly/pull/7618) - chore: migrate more families to tail\_args() by [@​romange](https://github.com/romange) in [#​7657](https://github.com/dragonflydb/dragonfly/pull/7657) - chore: add cuckoo to compact object by [@​kostasrim](https://github.com/kostasrim) in [#​7645](https://github.com/dragonflydb/dragonfly/pull/7645) - Migrate command init and dispatch paths to facade::ParsedArgs by [@​romange](https://github.com/romange) in [#​7664](https://github.com/dragonflydb/dragonfly/pull/7664) - refactor(server): move VerifyCommandState out of squasher, migrate dispatch path to ParsedArgs by [@​romange](https://github.com/romange) in [#​7663](https://github.com/dragonflydb/dragonfly/pull/7663) - chore(server): pass CmdArgParser to bitops/json handlers by [@​romange](https://github.com/romange) in [#​7662](https://github.com/dragonflydb/dragonfly/pull/7662) - fix(ok\_backend): track command\_cnt\_main in dispatch by [@​glevkovich](https://github.com/glevkovich) in [#​7667](https://github.com/dragonflydb/dragonfly/pull/7667) - Migrate more command handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7665](https://github.com/dragonflydb/dragonfly/pull/7665) - Migrate command handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7659](https://github.com/dragonflydb/dragonfly/pull/7659) - chore(server): migrate geo\_family handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7673](https://github.com/dragonflydb/dragonfly/pull/7673) - fix(facade): count multishot recv in io read stats by [@​glevkovich](https://github.com/glevkovich) in [#​7680](https://github.com/dragonflydb/dragonfly/pull/7680) - chore(server): migrate DflyCmd/ScriptMgr/MemoryCmd handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7669](https://github.com/dragonflydb/dragonfly/pull/7669) - fix(search): serialize only KNN winners for filtered vector search by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7670](https://github.com/dragonflydb/dragonfly/pull/7670) - chore(server): migrate cms/bloom families and remaining string handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7672](https://github.com/dragonflydb/dragonfly/pull/7672) - feat(tiering): Skip offloading keys with TTL below minimum threshold by [@​mkaruza](https://github.com/mkaruza) in [#​7624](https://github.com/dragonflydb/dragonfly/pull/7624) - fix(fuzz): enforce real pass/fail gates in experimental persistent workflow by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7687](https://github.com/dragonflydb/dragonfly/pull/7687) - feat: add cuckoo\_family.cc and cf.reserve by [@​kostasrim](https://github.com/kostasrim) in [#​7646](https://github.com/dragonflydb/dragonfly/pull/7646) - Migrate list family handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7685](https://github.com/dragonflydb/dragonfly/pull/7685) - refactor(facade): extract V2 OnRecv hook method by [@​glevkovich](https://github.com/glevkovich) in [#​7689](https://github.com/dragonflydb/dragonfly/pull/7689) - chore: add cf.add and cf.addnx by [@​kostasrim](https://github.com/kostasrim) in [#​7681](https://github.com/dragonflydb/dragonfly/pull/7681) - CI: generate and upload junit artifacts by [@​abhijat](https://github.com/abhijat) in [#​7683](https://github.com/dragonflydb/dragonfly/pull/7683) - CI: package experimental AFL++ artifacts as tarballs to fix uploads by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7697](https://github.com/dragonflydb/dragonfly/pull/7697) - chore: add cf.exists and cf.mexists by [@​kostasrim](https://github.com/kostasrim) in [#​7682](https://github.com/dragonflydb/dragonfly/pull/7682) - Migrate hset family handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7686](https://github.com/dragonflydb/dragonfly/pull/7686) - chore: Bring in rapidhash by [@​romange](https://github.com/romange) in [#​7694](https://github.com/dragonflydb/dragonfly/pull/7694) - chore: add cf.info, cf.count and cf.del by [@​kostasrim](https://github.com/kostasrim) in [#​7691](https://github.com/dragonflydb/dragonfly/pull/7691) - fix: GETEX command replication by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7701](https://github.com/dragonflydb/dragonfly/pull/7701) - refactor(server): factor out metrics code into metrics.{h,cc} by [@​romange](https://github.com/romange) in [#​7695](https://github.com/dragonflydb/dragonfly/pull/7695) - Add benchmark-report skill by [@​romange](https://github.com/romange) in [#​7706](https://github.com/dragonflydb/dragonfly/pull/7706) - feat(search): support EF\_RUNTIME for HNSW vector search by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7696](https://github.com/dragonflydb/dragonfly/pull/7696) - Fix memtier latency plot for zero-count operations by [@​romange](https://github.com/romange) in [#​7704](https://github.com/dragonflydb/dragonfly/pull/7704) - feat: Add BM25STD.NORM and BM25STD.TANH scorers by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7692](https://github.com/dragonflydb/dragonfly/pull/7692) - feat(search): support KNN query attributes by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7708](https://github.com/dragonflydb/dragonfly/pull/7708) - tests: Stop seeder before checking replica finished by [@​abhijat](https://github.com/abhijat) in [#​7714](https://github.com/dragonflydb/dragonfly/pull/7714) - tests: ensure that proxy chooses random port and closes on teardown by [@​abhijat](https://github.com/abhijat) in [#​7699](https://github.com/dragonflydb/dragonfly/pull/7699) - chore(tiering): Make disk storage initial size configurable and add grow policy by [@​mkaruza](https://github.com/mkaruza) in [#​7715](https://github.com/dragonflydb/dragonfly/pull/7715) - chore(server): migrate zset\_family handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7712](https://github.com/dragonflydb/dragonfly/pull/7712) - fix: XREADGROUP key extraction for STREAMS consumer name by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7721](https://github.com/dragonflydb/dragonfly/pull/7721) - Migrate set family handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7684](https://github.com/dragonflydb/dragonfly/pull/7684) - fix: stale AFL crash warnings in persistent fuzz health report by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7723](https://github.com/dragonflydb/dragonfly/pull/7723) - fix(facade): bookkeeping in V2 connection. by [@​glevkovich](https://github.com/glevkovich) in [#​7726](https://github.com/dragonflydb/dragonfly/pull/7726) - Link memtier latency time axes by [@​romange](https://github.com/romange) in [#​7727](https://github.com/dragonflydb/dragonfly/pull/7727) - chore: cuckoo rdb support by [@​kostasrim](https://github.com/kostasrim) in [#​7700](https://github.com/dragonflydb/dragonfly/pull/7700) - chore(server): migrate zset\_family handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7709](https://github.com/dragonflydb/dragonfly/pull/7709) - feat: add HGETEX and HPEXPIRETIME by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7717](https://github.com/dragonflydb/dragonfly/pull/7717) - chore(server): migrate main\_service handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7724](https://github.com/dragonflydb/dragonfly/pull/7724) - chore(server): migrate server\_family handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7711](https://github.com/dragonflydb/dragonfly/pull/7711) - chore: add compaction on cf.del and add cf.compact cmd by [@​kostasrim](https://github.com/kostasrim) in [#​7702](https://github.com/dragonflydb/dragonfly/pull/7702) - chore(server): migrate stream\_family handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7710](https://github.com/dragonflydb/dragonfly/pull/7710) - feat: add range processing to CmdArgParser by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7732](https://github.com/dragonflydb/dragonfly/pull/7732) - fix: SINTERCARD crash with zero keys by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7736](https://github.com/dragonflydb/dragonfly/pull/7736) - feat(rdb): learn zstd dict and compress lists during load by [@​romange](https://github.com/romange) in [#​7734](https://github.com/dragonflydb/dragonfly/pull/7734) - feat(facade): add parse-ahead and parse-in-proactor for IoLoopV2 by [@​glevkovich](https://github.com/glevkovich) in [#​7722](https://github.com/dragonflydb/dragonfly/pull/7722) - chore: add cf.insert and cf.insertnx by [@​kostasrim](https://github.com/kostasrim) in [#​7719](https://github.com/dragonflydb/dragonfly/pull/7719) - chore(server): migrate Eval/EvalSha handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7725](https://github.com/dragonflydb/dragonfly/pull/7725) - facade: add connection id to all connection logs by [@​glevkovich](https://github.com/glevkovich) in [#​7742](https://github.com/dragonflydb/dragonfly/pull/7742) - feat(search): support EPSILON for HNSW vector range search by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7718](https://github.com/dragonflydb/dragonfly/pull/7718) - chore(server): migrate search\_family handlers to CmdArgParser by [@​romange](https://github.com/romange) in [#​7741](https://github.com/dragonflydb/dragonfly/pull/7741) - fix: Instantiate SendLongArr for long long by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7745](https://github.com/dragonflydb/dragonfly/pull/7745) - feat(search): parse query-time =>{$weight} attributes by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7749](https://github.com/dragonflydb/dragonfly/pull/7749) - fix: race condition in restore streamer by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7707](https://github.com/dragonflydb/dragonfly/pull/7707) - chore: CF and sbf/cms/topk dict entries for fuzzer by [@​kostasrim](https://github.com/kostasrim) in [#​7731](https://github.com/dragonflydb/dragonfly/pull/7731) - refactor: improve INFO performance by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7746](https://github.com/dragonflydb/dragonfly/pull/7746) - refactor: extract QList move helper and ZSTD dict predicates by [@​romange](https://github.com/romange) in [#​7755](https://github.com/dragonflydb/dragonfly/pull/7755) - test: enable V2 in test\_reply\_count, tighten pipe\_limit by [@​glevkovich](https://github.com/glevkovich) in [#​7744](https://github.com/dragonflydb/dragonfly/pull/7744) - fix(cms): avoid vector allocation in ParseMergeArgs and update helio by [@​kostasrim](https://github.com/kostasrim) in [#​7743](https://github.com/dragonflydb/dragonfly/pull/7743) - chore: cf chunked serialization and seeder support by [@​kostasrim](https://github.com/kostasrim) in [#​7729](https://github.com/dragonflydb/dragonfly/pull/7729) - feat: Add ReplyScope to SquashPipeline by [@​dranikpg](https://github.com/dranikpg) in [#​7630](https://github.com/dragonflydb/dragonfly/pull/7630) - Fix quadratic zstd list load compression by [@​romange](https://github.com/romange) in [#​7753](https://github.com/dragonflydb/dragonfly/pull/7753) - feat(search): apply schema and query-time text weights to scoring by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7752](https://github.com/dragonflydb/dragonfly/pull/7752) - fix: flaky FT.PROFILE timing assertion by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7757](https://github.com/dragonflydb/dragonfly/pull/7757) - refactor: better CmdArgParserUsage by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7758](https://github.com/dragonflydb/dragonfly/pull/7758) - fix(facade): flush buffered replies before blocking in V2 pipeline by [@​glevkovich](https://github.com/glevkovich) in [#​7733](https://github.com/dragonflydb/dragonfly/pull/7733) - server: Tagged chunk single buffer design, reduce copies by [@​abhijat](https://github.com/abhijat) in [#​7658](https://github.com/dragonflydb/dragonfly/pull/7658) - chore(server): bridge acl/cluster handlers to CmdArgParser dispatch by [@​romange](https://github.com/romange) in [#​7751](https://github.com/dragonflydb/dragonfly/pull/7751) - Add list compression tuning flags by [@​romange](https://github.com/romange) in [#​7762](https://github.com/dragonflydb/dragonfly/pull/7762) - fix(facade): revert [`07850ce`](https://github.com/dragonflydb/dragonfly/commit/07850ce92), track in-flight dispatches in IoLoopV2 by [@​glevkovich](https://github.com/glevkovich) in [#​7764](https://github.com/dragonflydb/dragonfly/pull/7764) - refactor(server): pass ParsedArgs through command dispatch by [@​romange](https://github.com/romange) in [#​7763](https://github.com/dragonflydb/dragonfly/pull/7763) - Add pipeline latency panel to Grafana dashboard by [@​romange](https://github.com/romange) in [#​7765](https://github.com/dragonflydb/dragonfly/pull/7765) - Adds `enable_resp_io_loop_v2` as a matrix dimension to the regression tests by [@​glevkovich](https://github.com/glevkovich) in [#​7748](https://github.com/dragonflydb/dragonfly/pull/7748) - change test\_squashed\_reply\_count limit by [@​dranikpg](https://github.com/dranikpg) in [#​7770](https://github.com/dragonflydb/dragonfly/pull/7770) - fix(facede): Include VerbatimString in reply capture by [@​dranikpg](https://github.com/dranikpg) in [#​7772](https://github.com/dragonflydb/dragonfly/pull/7772) - fix(transaction): Fix polling after running\_tx conflict by [@​dranikpg](https://github.com/dranikpg) in [#​7754](https://github.com/dragonflydb/dragonfly/pull/7754) - chore(fuzz): default PR seed generation to OpenAI gpt-4.1 by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7775](https://github.com/dragonflydb/dragonfly/pull/7775) - feat: add more rules for parsing by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7767](https://github.com/dragonflydb/dragonfly/pull/7767) - refactor: OAHSet - split OAHEntry on 3 classes by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7716](https://github.com/dragonflydb/dragonfly/pull/7716) - fix(facade): Fix reply builder batching by [@​dranikpg](https://github.com/dranikpg) in [#​7778](https://github.com/dragonflydb/dragonfly/pull/7778) - fix(facade): Use ReplyScope in loop2 by [@​dranikpg](https://github.com/dranikpg) in [#​7779](https://github.com/dragonflydb/dragonfly/pull/7779) - fix(server): decrement subscriptions on MONITOR teardown by [@​VincentNguyenDuc](https://github.com/VincentNguyenDuc) in [#​7777](https://github.com/dragonflydb/dragonfly/pull/7777) - refactor: improve CmdArgParser usage by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7785](https://github.com/dragonflydb/dragonfly/pull/7785) - Optimize pipelined single-key command hot path by [@​romange](https://github.com/romange) in [#​7783](https://github.com/dragonflydb/dragonfly/pull/7783) - chore(server): Write chunked tag header in place by [@​abhijat](https://github.com/abhijat) in [#​7661](https://github.com/dragonflydb/dragonfly/pull/7661) - chore: add bf.info by [@​kostasrim](https://github.com/kostasrim) in [#​7761](https://github.com/dragonflydb/dragonfly/pull/7761) - fix(server): add squasher-local transaction role by [@​romange](https://github.com/romange) in [#​7784](https://github.com/dragonflydb/dragonfly/pull/7784) - chore: missing v2 seeder data types by [@​kostasrim](https://github.com/kostasrim) in [#​7730](https://github.com/dragonflydb/dragonfly/pull/7730) - feat: Inline buffer for captured replies by [@​dranikpg](https://github.com/dranikpg) in [#​7648](https://github.com/dragonflydb/dragonfly/pull/7648) - perf(server): Lazy locking for optimistic single-shard transactions by [@​romange](https://github.com/romange) in [#​7788](https://github.com/dragonflydb/dragonfly/pull/7788) - perf: prefetch squashed command contexts by [@​romange](https://github.com/romange) in [#​7796](https://github.com/dragonflydb/dragonfly/pull/7796) - test: more benchmarks for Set by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7798](https://github.com/dragonflydb/dragonfly/pull/7798) - feat:extend CmdArgParser functionality by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7799](https://github.com/dragonflydb/dragonfly/pull/7799) - fix: bitops on tiered string values by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7806](https://github.com/dragonflydb/dragonfly/pull/7806) - Default DEBUG TRAFFIC START to main listener by [@​romange](https://github.com/romange) in [#​7808](https://github.com/dragonflydb/dragonfly/pull/7808) - feat: Write connection throttling and metrics exposed by [@​mkaruza](https://github.com/mkaruza) in [#​7750](https://github.com/dragonflydb/dragonfly/pull/7750) - Include Windows setup instructions in README by [@​kant2002](https://github.com/kant2002) in [#​7809](https://github.com/dragonflydb/dragonfly/pull/7809) - fix: macOS build by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7811](https://github.com/dragonflydb/dragonfly/pull/7811) - feat(replica): Batch Redis stream commands by [@​mkaruza](https://github.com/mkaruza) in [#​7501](https://github.com/dragonflydb/dragonfly/pull/7501) - fix(server): MGET don't acess tx after running by [@​dranikpg](https://github.com/dranikpg) in [#​7819](https://github.com/dragonflydb/dragonfly/pull/7819) - server: Skip error on load EOF with pending tagged chunk state by [@​abhijat](https://github.com/abhijat) in [#​7660](https://github.com/dragonflydb/dragonfly/pull/7660) - refactor: use ADL for CmdArgParser by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7813](https://github.com/dragonflydb/dragonfly/pull/7813) - feat: do more SIMD in OAHSet by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7804](https://github.com/dragonflydb/dragonfly/pull/7804) - test(replication): disable noisy test\_bug\_5221 by [@​glevkovich](https://github.com/glevkovich) in [#​7821](https://github.com/dragonflydb/dragonfly/pull/7821) - fix(facade): track in-flight V2 async commands by [@​glevkovich](https://github.com/glevkovich) in [#​7805](https://github.com/dragonflydb/dragonfly/pull/7805) - test: skip V2-only pause tests under V1 by [@​glevkovich](https://github.com/glevkovich) in [#​7822](https://github.com/dragonflydb/dragonfly/pull/7822) - server: Enable tagged chunk serialization by [@​abhijat](https://github.com/abhijat) in [#​7823](https://github.com/dragonflydb/dragonfly/pull/7823) - Revert "refactor: use ADL for CmdArgParser ([#​7813](https://github.com/dragonflydb/dragonfly/issues/7813))" by [@​romange](https://github.com/romange) in [#​7825](https://github.com/dragonflydb/dragonfly/pull/7825) - fix: tiered-storage crashes in HLL commands under pipeline squashing by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7820](https://github.com/dragonflydb/dragonfly/pull/7820) - perf: shrink squash callback and avoid regex stack overflow by [@​romange](https://github.com/romange) in [#​7807](https://github.com/dragonflydb/dragonfly/pull/7807) - fix: skip heartbeat expiry/eviction while optimistic tx is suspended by [@​kostasrim](https://github.com/kostasrim) in [#​7826](https://github.com/dragonflydb/dragonfly/pull/7826) - chore: add WAIT command by [@​kostasrim](https://github.com/kostasrim) in [#​7454](https://github.com/dragonflydb/dragonfly/pull/7454) - fix: fix mgetparallel flaky test by [@​dranikpg](https://github.com/dranikpg) in [#​7824](https://github.com/dragonflydb/dragonfly/pull/7824) - test: Disable flaky tiered storage MGETParallel test by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7837](https://github.com/dragonflydb/dragonfly/pull/7837) - fix: correct typos in code comments by [@​magic-peach](https://github.com/magic-peach) in [#​7830](https://github.com/dragonflydb/dragonfly/pull/7830) - docs: fix typo and formatting in docs by [@​magic-peach](https://github.com/magic-peach) in [#​7829](https://github.com/dragonflydb/dragonfly/pull/7829) - fix: fix typo 'Fore more' -> 'For more' in docker README by [@​magic-peach](https://github.com/magic-peach) in [#​7831](https://github.com/dragonflydb/dragonfly/pull/7831) - fix: fix typo 'recieved' -> 'received' in replica comment by [@​magic-peach](https://github.com/magic-peach) in [#​7832](https://github.com/dragonflydb/dragonfly/pull/7832) - feat: add OAHMap by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7828](https://github.com/dragonflydb/dragonfly/pull/7828) - test(snapshot): temporarily disable test\_s3\_snapshot by [@​glevkovich](https://github.com/glevkovich) in [#​7841](https://github.com/dragonflydb/dragonfly/pull/7841) - fix: tiered-storage crash when commands read an offloaded string value by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7836](https://github.com/dragonflydb/dragonfly/pull/7836) - feat(search): add vector data-type foundation (types, kernels, validation) by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7839](https://github.com/dragonflydb/dragonfly/pull/7839) - fix(server): validate startup flags in main() by [@​glevkovich](https://github.com/glevkovich) in [#​7843](https://github.com/dragonflydb/dragonfly/pull/7843) - feat: new format for OAHEntry size by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7847](https://github.com/dragonflydb/dragonfly/pull/7847) - feat: compile-time grammar for CmdArgParser by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7845](https://github.com/dragonflydb/dragonfly/pull/7845) - chore: pull helio to fix epoll livelock issue by [@​romange](https://github.com/romange) in [#​7850](https://github.com/dragonflydb/dragonfly/pull/7850) - chore: enable test\_bug\_5221 by [@​kostasrim](https://github.com/kostasrim) in [#​7852](https://github.com/dragonflydb/dragonfly/pull/7852) - ci: bump test-fakeredis image to ubuntu-dev:24 by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7856](https://github.com/dragonflydb/dragonfly/pull/7856) - feat(search): store & search vectors at native width (FLAT + HNSW, all dtypes) by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7849](https://github.com/dragonflydb/dragonfly/pull/7849) - chore: enforce fuzzer coverage for newly registered commands by [@​kostasrim](https://github.com/kostasrim) in [#​7827](https://github.com/dragonflydb/dragonfly/pull/7827) - fix(core): Fix segment dangle by [@​dranikpg](https://github.com/dranikpg) in [#​7851](https://github.com/dragonflydb/dragonfly/pull/7851) - feat(tiering): Prefetch neighboring tiered list nodes on load by [@​mkaruza](https://github.com/mkaruza) in [#​7834](https://github.com/dragonflydb/dragonfly/pull/7834) - build: add memory tracking flag to release makefile by [@​romange](https://github.com/romange) in [#​7861](https://github.com/dragonflydb/dragonfly/pull/7861) - Make cluster announce flags mutable by [@​romange](https://github.com/romange) in [#​7860](https://github.com/dragonflydb/dragonfly/pull/7860) - build(cmake): add retry to third-party tarball downloads, bump helio by [@​glevkovich](https://github.com/glevkovich) in [#​7855](https://github.com/dragonflydb/dragonfly/pull/7855) - test(search): cover non-float32 vector dtypes (reload, replication, e2e, FT.INFO) by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7858](https://github.com/dragonflydb/dragonfly/pull/7858) - feat(search): support per-term inside field groups by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7859](https://github.com/dragonflydb/dragonfly/pull/7859) - refactor(facade): rename ClearPipelinedMessages by [@​glevkovich](https://github.com/glevkovich) in [#​7864](https://github.com/dragonflydb/dragonfly/pull/7864) - feat: add new size format for OAHPair by [@​BorysTheDev](https://github.com/BorysTheDev) in [#​7853](https://github.com/dragonflydb/dragonfly/pull/7853) - feat(server): Egress throttling for snapshot by [@​dranikpg](https://github.com/dranikpg) in [#​7774](https://github.com/dragonflydb/dragonfly/pull/7774) - fix(stream): honor COUNT when a blocked XREAD/XREADGROUP is woken by [@​jacovdbergh](https://github.com/jacovdbergh) in [#​7872](https://github.com/dragonflydb/dragonfly/pull/7872) - fix(server): emit db= once in CLIENT INFO by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7873](https://github.com/dragonflydb/dragonfly/pull/7873) - fix(migration): race between Finish and SyncFb by [@​kostasrim](https://github.com/kostasrim) in [#​7869](https://github.com/dragonflydb/dragonfly/pull/7869) - fix(stream): avoid use-after-free garbling long stream ids in replies by [@​vyavdoshenko](https://github.com/vyavdoshenko) in [#​7874](https://github.com/dragonflydb/dragonfly/pull/7874) - feat(server): …
ProcessControlMessages (the V2 dispatch_q_ loop) ran AsyncOperations without setting
async_op_start_cycle_, so check in IsAsyncOpTimedOut was always false. Set/clear it
around the visit, matching the existing pattern in V1 ProcessAdminMessage.
Closes #7897