Skip to content

[8.4] [MOD-12417] Track maxprefixexpansions errors and warnings in info#7612

Merged
lerman25 merged 1 commit into8.4from
backport-7570-to-8.4
Dec 2, 2025
Merged

[8.4] [MOD-12417] Track maxprefixexpansions errors and warnings in info#7612
lerman25 merged 1 commit into8.4from
backport-7570-to-8.4

Conversation

@lerman25
Copy link
Collaborator

@lerman25 lerman25 commented Dec 2, 2025

backport #7570 to 8.4


Note

Adds global tracking and INFO exposure for "max prefix expansions" warnings across SEARCH, AGGREGATE, and HYBRID, with corresponding tests for standalone, cluster, and RESP3.

  • Stats/Tracking:
    • Add maxPrefixExpansion to QueryWarningGlobalStats and wire QUERY_WARNING_CODE_REACHED_MAX_PREFIX_EXPANSIONS handling in QueryWarningsGlobalStats_UpdateWarning.
    • Update AGGREGATE (src/aggregate/aggregate_exec.c) and HYBRID (src/hybrid/hybrid_exec.c) flows to record and reply QUERY_WMAXPREFIXEXPANSIONS when QueryError_HasReachedMaxPrefixExpansionsWarning is set.
  • INFO output:
    • Expose new metrics in INFO MODULES under shard and coordinator sections: shard_total_query_warnings_max_prefix_expansions and coord_total_query_warnings_max_prefix_expansions.
  • Tests:
    • Extend warnings/errors tests to cover max prefix expansions in standalone and cluster (RESP2/RESP3), including HYBRID where applicable.
    • Minor test setup tweaks (ensure index PREFIX usage, additional docs to trigger expansions).

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

)

track maxprefixexpanions

(cherry picked from commit dd37ef9)
@lerman25 lerman25 requested a review from meiravgri December 2, 2025 13:49
@github-actions github-actions bot added the size:M label Dec 2, 2025
// Non-fatal error
RedisModule_Reply_SimpleString(reply, QueryError_GetUserError(qctx->err));
} else if (QueryError_HasReachedMaxPrefixExpansionsWarning(qctx->err)) {
QueryWarningsGlobalStats_UpdateWarning(QUERY_WARNING_CODE_REACHED_MAX_PREFIX_EXPANSIONS, 1, !IsInternal(req));
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Max prefix warning not tracked when query times out

The QueryWarningsGlobalStats_UpdateWarning call for QUERY_WARNING_CODE_REACHED_MAX_PREFIX_EXPANSIONS is placed inside an else if chain after the timeout check. Since max prefix expansion warnings are set during query parsing while timeouts occur during execution, both conditions can be true simultaneously. When this happens, the max prefix expansion warning statistic won't be incremented because the timeout branch is taken first. This is inconsistent with OOM warning tracking (line 618-621) and the other code path (lines 484-486), which both use independent if statements to track all warnings regardless of other conditions.

Additional Locations (1)

Fix in Cursor Fix in Web

@lerman25 lerman25 enabled auto-merge December 2, 2025 14:20
@codecov
Copy link

codecov bot commented Dec 2, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 85.94%. Comparing base (4d9f181) to head (3ea5a03).
⚠️ Report is 1 commits behind head on 8.4.

Additional details and impacted files
@@            Coverage Diff             @@
##              8.4    #7612      +/-   ##
==========================================
+ Coverage   85.91%   85.94%   +0.02%     
==========================================
  Files         331      331              
  Lines       52792    52803      +11     
  Branches    12004    12004              
==========================================
+ Hits        45357    45379      +22     
+ Misses       7268     7257      -11     
  Partials      167      167              
Flag Coverage Δ
flow 84.50% <100.00%> (-0.35%) ⬇️
unit 52.58% <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.

@lerman25 lerman25 added this pull request to the merge queue Dec 2, 2025
Merged via the queue into 8.4 with commit 6af7bf2 Dec 2, 2025
26 checks passed
@lerman25 lerman25 deleted the backport-7570-to-8.4 branch December 2, 2025 16:07
lerman25 added a commit that referenced this pull request Dec 4, 2025
…fo (#7612)

[MOD-12417] Track maxprefixexpansions errors and warnings in info (#7570)

track maxprefixexpanions

(cherry picked from commit dd37ef9)
(cherry picked from commit 6af7bf2)
lerman25 added a commit that referenced this pull request Dec 4, 2025
…7612](#7612))

[MOD-12417] Track maxprefixexpansions errors and warnings in info ([#7570](#7570))

track maxprefixexpanions

(cherry picked from commit dd37ef9)
(cherry picked from commit 6af7bf2)
github-merge-queue bot pushed a commit that referenced this pull request Dec 4, 2025
…fo (#7646)

* [MOD-12417] Track maxprefixexpansions errors and warnings in info ([#7612](#7612))

[MOD-12417] Track maxprefixexpansions errors and warnings in info ([#7570](#7570))

track maxprefixexpanions

(cherry picked from commit dd37ef9)
(cherry picked from commit 6af7bf2)

* remove unused functions

* remove accidental hybrid

* remove more hybrid
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