Skip to content

[8.4] MOD-12984 Persist query warnings across cursor reads #7960

Merged
meiravgri merged 2 commits into8.4from
backport-7865-to-8.4
Jan 1, 2026
Merged

[8.4] MOD-12984 Persist query warnings across cursor reads #7960
meiravgri merged 2 commits into8.4from
backport-7865-to-8.4

Conversation

@meiravgri
Copy link
Collaborator

@meiravgri meiravgri commented Jan 1, 2026

backpoer #7865 to 8.4


Note

Improves profiling reliability by persisting warnings and cursor-read stats across the entire query lifecycle.

  • Introduces ProfilePrinterCtx on AREQ with a warnings bitset and cursor_reads; removes per-call profile context and deprecated has_timedout/cursor_reads fields
  • Records warnings (TIMEOUT, QUERY_OOM, MAX_PREFIX_EXPANSIONS, BG_SCAN_OOM) in aggregate_exec.c for normal and empty-result paths; added accessor AREQ_ProfilePrinterCtx
  • Updates Profile_Print to read from AREQ and print persisted warnings and internal cursor reads
  • Coordinator path (dist_aggregate.c, dist_utils.c) now passes AREQ to profile printers and scans all warnings in RESP3
  • Adds tests validating BG-scan OOM warning presence and warning persistence on timeouts and across multiple cursor reads (RESP2/RESP3)

Written by Cursor Bugbot for commit b06592c. This will update automatically on new commits. Configure here.

* bit map place holder

* save profilectx in AREQ

introduce ProfileWarnings

* return all warnings in coord reply

return all warnings in sendchunk resp3

return all warnings as an array in profil;e

* align tests to the new format

 add testProfileMultipleWarnings and testPersistProfileWarning_MaxPrefixExpansions

 and test_multiple_warnings

* more fixes

* test fixes

* revert multiple warnings code relted changes

* fixes

* remove tests relarted to #7892

* imp testPersistProfileWarning_MaxPrefixExpansions

* remove temporary test

* fix mising BG indexing OOM

* fix test

* move to header

* add oom test

* asserts

* detect timeout when there are multiple warnings in netCursorCallback

* fix assert

* enhance test_multiple_warnings to test we have exactly 1 cursor read

* fix assert

* test with oom (remove in the next commit)

* fix test - only test with timeout

* comment on ProfileWarningType

* fix test

* remove unused

(cherry picked from commit 2f47432)
@github-actions github-actions bot added the size:M label Jan 1, 2026
@meiravgri meiravgri requested a review from lerman25 January 1, 2026 05:06
@meiravgri meiravgri enabled auto-merge January 1, 2026 08:38
@codecov
Copy link

codecov bot commented Jan 1, 2026

Codecov Report

❌ Patch coverage is 97.95918% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 85.95%. Comparing base (0643a97) to head (b06592c).
⚠️ Report is 1 commits behind head on 8.4.

Files with missing lines Patch % Lines
src/aggregate/aggregate_exec.c 96.29% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##              8.4    #7960      +/-   ##
==========================================
- Coverage   85.96%   85.95%   -0.01%     
==========================================
  Files         331      332       +1     
  Lines       52447    52453       +6     
  Branches    10847    10847              
==========================================
  Hits        45084    45084              
- Misses       7220     7226       +6     
  Partials      143      143              
Flag Coverage Δ
flow 84.67% <97.95%> (-0.15%) ⬇️
unit 51.48% <0.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@meiravgri meiravgri added this pull request to the merge queue Jan 1, 2026
Merged via the queue into 8.4 with commit 2dc3845 Jan 1, 2026
32 checks passed
@meiravgri meiravgri deleted the backport-7865-to-8.4 branch January 1, 2026 12:21
alonre24 added a commit to alonre24/redis that referenced this pull request Jan 26, 2026
**Bug Fixes:**

* [redis#7385](RediSearch/RediSearch#7385) Fix high temporary memory consumption when loading multiple search indexes from RDB
* [redis#7430](RediSearch/RediSearch#7430) Fix a potential deadlock in `FT.HYBRID` in cluster mode during updates.
* [redis#7454](RediSearch/RediSearch#7454) Fix a garbage collection performence regression
* [redis#7460](RediSearch/RediSearch#7460) Fix potential double-free in Fork GC error paths
* [redis#7455](RediSearch/RediSearch#7455) Fix internal cursors not being deleted promptly in cluster mode
* [redis#7667](RediSearch/RediSearch#7667) Fix a cursor logical leak upon dropping the index
* [redis#7796](RediSearch/RediSearch#7796) Fix a potential use-after-free when removing connections
* [redis#7792](RediSearch/RediSearch#7792) Fix string comparison for binary data with embedded NULLs in TOLIST reducer in FT.AGGREGATE
* [redis#7823](RediSearch/RediSearch#7823) Update `FT.HYBRID` to accept vector blobs only via parameters
* [redis#7903](RediSearch/RediSearch#7903) Fix a memory leak in Hybrid ASM
* [redis#8052](RediSearch/RediSearch#8052) Fix `FT.HYBRID` behavior when used with `LOAD *`
* [redis#8082](RediSearch/RediSearch#8082) Fix incorrect FULLTEXT field metric counts
* [redis#8089](RediSearch/RediSearch#8089) Fix an edge case in `CLUSTERSET` handling
* [redis#8152](RediSearch/RediSearch#8152) Fix configuration registration issues

**Improvements:**

* [redis#7427](RediSearch/RediSearch#7427) Enhance `FT.PROFILE` with vector search execution details
* [redis#7431](RediSearch/RediSearch#7431) Ensure full `FT.PROFILE` output is returned on timeout with RETURN policy
* [redis#7507](RediSearch/RediSearch#7507) Track timeout warnings and errors in INFO
* [redis#7576](RediSearch/RediSearch#7576) Track OOM warnings and errors in INFO
* [redis#7612](RediSearch/RediSearch#7612) Track `maxprefixexpansions` warnings and errors in INFO
* [redis#7960](RediSearch/RediSearch#7960) Persist query warnings across cursor reads
* [redis#7551](RediSearch/RediSearch#7551), [redis#7616](RediSearch/RediSearch#7616), [redis#7622](RediSearch/RediSearch#7622), [redis#7625](RediSearch/RediSearch#7625) Add runtime thread and pending-jobs metrics
* [redis#7589](RediSearch/RediSearch#7589) Support multiple slot ranges in `search.CLUSTERSET`
* [redis#7707](RediSearch/RediSearch#7707) Add `WITHCOUNT` support to `FT.AGGREGATE`
* [redis#7862](RediSearch/RediSearch#7862) Add support for subquery `COUNT` in `FT.HYBRID`
* [redis#8087](RediSearch/RediSearch#8087) Add warnings when cursor results may be affected by ASM and expose ASM warnings in `FT.PROFILE`
* [redis#8049](RediSearch/RediSearch#8049) Add logging for index-related commands
* [redis#8150](RediSearch/RediSearch#8150) Fix shard total profile time reporting in `FT.PROFILE`
YaacovHazan pushed a commit to redis/redis that referenced this pull request Jan 26, 2026
**Bug Fixes:**

* [#7385](RediSearch/RediSearch#7385) Fix high
temporary memory consumption when loading multiple search indexes from
RDB
* [#7430](RediSearch/RediSearch#7430) Fix a
potential deadlock in `FT.HYBRID` in cluster mode during updates.
* [#7454](RediSearch/RediSearch#7454) Fix a
garbage collection performence regression
* [#7460](RediSearch/RediSearch#7460) Fix
potential double-free in Fork GC error paths
* [#7455](RediSearch/RediSearch#7455) Fix
internal cursors not being deleted promptly in cluster mode
* [#7667](RediSearch/RediSearch#7667) Fix a
cursor logical leak upon dropping the index
* [#7796](RediSearch/RediSearch#7796) Fix a
potential use-after-free when removing connections
* [#7792](RediSearch/RediSearch#7792) Fix string
comparison for binary data with embedded NULLs in TOLIST reducer in
FT.AGGREGATE
* [#7704](RediSearch/RediSearch#7704) Use
asynchronous jobs for GC in SVS to accelerate execution
* [#7823](RediSearch/RediSearch#7823) Update
`FT.HYBRID` to accept vector blobs only via parameters
* [#7903](RediSearch/RediSearch#7903) Fix a
memory leak in Hybrid ASM
* [#8052](RediSearch/RediSearch#8052) Fix
`FT.HYBRID` behavior when used with `LOAD *`
* [#8082](RediSearch/RediSearch#8082) Fix
incorrect FULLTEXT field metric counts
* [#8089](RediSearch/RediSearch#8089) Fix an
edge case in `CLUSTERSET` handling
* [#8152](RediSearch/RediSearch#8152) Fix
configuration registration issues

**Improvements:**

* [#7427](RediSearch/RediSearch#7427) Enhance
`FT.PROFILE` with vector search execution details
* [#7431](RediSearch/RediSearch#7431) Ensure
full `FT.PROFILE` output is returned on timeout with RETURN policy
* [#7507](RediSearch/RediSearch#7507) Track
timeout warnings and errors in INFO
* [#7576](RediSearch/RediSearch#7576) Track OOM
warnings and errors in INFO
* [#7612](RediSearch/RediSearch#7612) Track
`maxprefixexpansions` warnings and errors in INFO
* [#7960](RediSearch/RediSearch#7960) Persist
query warnings across cursor reads
* [#7551](RediSearch/RediSearch#7551),
[#7616](RediSearch/RediSearch#7616),
[#7622](RediSearch/RediSearch#7622),
[#7625](RediSearch/RediSearch#7625) Add runtime
thread and pending-jobs metrics
* [#7589](RediSearch/RediSearch#7589) Support
multiple slot ranges in `search.CLUSTERSET`
* [#7707](RediSearch/RediSearch#7707) Add
`WITHCOUNT` support to `FT.AGGREGATE`
* [#7862](RediSearch/RediSearch#7862) Add
support for subquery `COUNT` in `FT.HYBRID`
* [#8087](RediSearch/RediSearch#8087) Add
warnings when cursor results may be affected by ASM and expose ASM
warnings in `FT.PROFILE`
* [#8049](RediSearch/RediSearch#8049) Add
logging for index-related commands
* [#8150](RediSearch/RediSearch#8150) Fix shard
total profile time reporting in `FT.PROFILE`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants