Skip to content

ranger: enhance range extraction for complex OR filters#68446

Open
hawkingrei wants to merge 5 commits into
pingcap:masterfrom
hawkingrei:issue-68408-range-or-filter
Open

ranger: enhance range extraction for complex OR filters#68446
hawkingrei wants to merge 5 commits into
pingcap:masterfrom
hawkingrei:issue-68408-range-or-filter

Conversation

@hawkingrei
Copy link
Copy Markdown
Member

@hawkingrei hawkingrei commented May 17, 2026

What problem does this PR solve?

Issue Number: close #68408

Problem Summary:

For a complex OR filter on an index such as (c14, c25, c1), range extraction could keep a wide first-column range like [1748604343,1748604343] instead of intersecting it with the more selective composite DNF item ranges on c25 and c1.

What changed and how does it work?

This PR keeps the fix local to pkg/util/ranger:

  • Intersect the base first-column CNF range with the best composite CNF item range when that item uses later index columns.
  • Keep the original DNF item in remained conditions so exact filter semantics are preserved while the access range becomes narrower.
  • Add a focused ranger regression that asserts access conditions, remained conditions, and the final composite range shape.

Check List

Tests

  • Unit test
  • Integration test
  • Manual test (add detailed scripts or steps below)
  • No need to test
    • I checked and no code files have been changed.

Test commands:

go test ./pkg/util/ranger -run TestRangeExtractionForComplexORFilter -count=1 -tags=intest,deadlock
go test ./pkg/util/ranger -run 'TestIssue40997|TestMinAccessCondsForDNFCond|TestRangeExtractionForComplexORFilter' -count=1 -tags=intest,deadlock
make bazel_prepare
git diff --check
make lint

Side effects

  • Performance regression: Consumes more CPU
  • Performance regression: Consumes more Memory
  • Breaking backward compatibility

Documentation

  • Affects user behaviors
  • Contains syntax changes
  • Contains variable changes
  • Contains experimental features
  • Changes MySQL compatibility

Release note

Please refer to Release Notes Language Style Guide to write a quality release note.

Improve range extraction for complex OR filters.

Summary by CodeRabbit

  • Refactor

    • Index-range building now applies an earlier direct intersection of composite range conditions, producing narrower merged ranges and updated access/remained conditions; query plans may show broader interval ranges and simplified selection predicates.
  • Tests

    • Added a test for complex OR predicates with index bounds and updated expected plan snapshots.

Review Change Stack

@ti-chi-bot ti-chi-bot Bot added release-note Denotes a PR that will be considered when it comes time to generate release notes. size/M Denotes a PR that changes 30-99 lines, ignoring generated files. labels May 17, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 17, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds an intersection helper for CNF item ranges, invokes it early in DNF-aware detachment to return intersected DetachRangeResult (with ColumnValues), updates expected plan snapshots, and adds a test for complex OR filter range extraction.

Changes

Complex OR Filter Range Extraction

Layer / File(s) Summary
CNF range intersection helper and early integration
pkg/util/ranger/detacher.go
Introduces intersectCNFItemWithBaseRange to compute intersections between base ranges and composite CNF item ranges, merge/deduplicate AccessConds, recompute RemainedConds, and invokes it early in the DNF-capable detachment flow to return the intersected DetachRangeResult (copying ColumnValues) on success.
Complex OR filter range extraction test
pkg/util/ranger/ranger_test.go
Adds TestRangeExtractionForComplexORFilter validating DetachCondAndBuildRangeForIndex behavior on a query with nested OR predicates and index-aligned bounds; asserts AccessConds, RemainedConds, and rendered index Ranges.
Updated expected plan snapshots
pkg/planner/core/casetest/index/testdata/index_range_out.json, pkg/planner/core/casetest/index/testdata/index_range_xut.json
Adjusts expected IndexRangeScan ranges from discrete point ranges to interval tuple ranges and simplifies the Selection predicate to only lt(test.t1.b1, 5) for the TestRangeIntersection case.

Sequence Diagram

sequenceDiagram
  participant Detacher as DetachCondAndBuildRangeForIndex
  participant Intersector as intersectCNFItemWithBaseRange
  participant Result as DetachRangeResult
  Detacher->>Intersector: attempt intersection(baseRes, bestCNFItemRes, newConditions, originalConditions)
  Intersector->>Result: return(updated Ranges, AccessConds, RemainedConds) or empty
  Detacher->>Result: copy ColumnValues and return (on success)
Loading

Estimated Code Review Effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Suggested labels

size/M

Suggested reviewers

  • winoros
  • guo-shaoge

🐰
I sniffed the ranges on the breeze,
Wove OR branches into tighter keys,
Merged bounds with nimble art,
Now index hops a braver start.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'ranger: enhance range extraction for complex OR filters' clearly describes the main change: improving range extraction logic for complex OR filters in the ranger package.
Description check ✅ Passed The description follows the template structure with Issue Number, Problem Summary, What Changed, test checklist, and release notes. All required sections are present and filled out.
Linked Issues check ✅ Passed The PR addresses Issue #68408 by implementing range intersection for composite CNF items, narrowing access ranges while preserving filter semantics through remained conditions [#68408].
Out of Scope Changes check ✅ Passed All changes are scoped to range extraction enhancement: the detacher helper function, test case validation, and expected output updates align with Issue #68408 objectives.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@hawkingrei hawkingrei added the AI-Correction Bugfix by AI label May 17, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
pkg/util/ranger/detacher.go (1)

282-283: ⚡ Quick win

Explain the RemainedConds invariant here.

This recomputation is only obviously safe if the reader knows the original DNF is already preserved in baseRes.RemainedConds, so a brief comment here would make future refactors much less likely to break the exact-filter contract. As per coding guidelines "Comments SHOULD explain non-obvious intent, constraints, invariants, concurrency guarantees, SQL/compatibility contracts, or important performance trade-offs, and SHOULD NOT restate what the code already makes clear."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/util/ranger/detacher.go` around lines 282 - 283, Add a concise
explanatory comment above the recomputation of RemainedConds that states the
invariant: baseRes.RemainedConds is expected to already hold a DNF-equivalent
representation of the original filters (the exact-filter contract), so it's safe
to compute remainedConds := removeConditions(sctx.ExprCtx.GetEvalCtx(),
newConditions, baseRes.AccessConds) and merge with AppendConditionsIfNotExist
into baseRes.RemainedConds without altering DNF semantics; mention the role of
removeConditions, AppendConditionsIfNotExist, baseRes.AccessConds and that
future refactors must preserve this DNF invariant to avoid breaking exact-filter
behavior.
pkg/util/ranger/ranger_test.go (1)

2513-2546: 🏗️ Heavy lift

Add a planner-level regression for the scan shape too.

This locks the detacher output, but not the end-to-end contract from Issue #68408: the optimizer should keep using one ordered index-range scan instead of falling back to the fragmented lookup path. A small EXPLAIN assertion alongside this test would protect that cross-layer behavior if planner changes later stop consuming these narrower ranges.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/util/ranger/ranger_test.go` around lines 2513 - 2546, The test
TestRangeExtractionForComplexORFilter currently asserts only ranger detacher
outputs; add a planner-level regression by running an EXPLAIN on the same query
and asserting the plan uses a single IndexRangeScan (or equivalent ordered
index-range operator) rather than a IndexLookUp/IndexMerge/PointGet path; after
building selection and before or after the ranger assertions, execute
tk.MustQuery("explain "+sql).Rows() (or equivalent) and assert the returned plan
text contains the planner operator name you expect (e.g., "IndexRangeScan" or
the project’s exact planner phrase) to lock the scan-shape contract; reference
TestRangeExtractionForComplexORFilter, DetachCondAndBuildRangeForIndex, and the
sql variable when locating where to add this EXPLAIN assertion.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@pkg/util/ranger/detacher.go`:
- Around line 282-283: Add a concise explanatory comment above the recomputation
of RemainedConds that states the invariant: baseRes.RemainedConds is expected to
already hold a DNF-equivalent representation of the original filters (the
exact-filter contract), so it's safe to compute remainedConds :=
removeConditions(sctx.ExprCtx.GetEvalCtx(), newConditions, baseRes.AccessConds)
and merge with AppendConditionsIfNotExist into baseRes.RemainedConds without
altering DNF semantics; mention the role of removeConditions,
AppendConditionsIfNotExist, baseRes.AccessConds and that future refactors must
preserve this DNF invariant to avoid breaking exact-filter behavior.

In `@pkg/util/ranger/ranger_test.go`:
- Around line 2513-2546: The test TestRangeExtractionForComplexORFilter
currently asserts only ranger detacher outputs; add a planner-level regression
by running an EXPLAIN on the same query and asserting the plan uses a single
IndexRangeScan (or equivalent ordered index-range operator) rather than a
IndexLookUp/IndexMerge/PointGet path; after building selection and before or
after the ranger assertions, execute tk.MustQuery("explain "+sql).Rows() (or
equivalent) and assert the returned plan text contains the planner operator name
you expect (e.g., "IndexRangeScan" or the project’s exact planner phrase) to
lock the scan-shape contract; reference TestRangeExtractionForComplexORFilter,
DetachCondAndBuildRangeForIndex, and the sql variable when locating where to add
this EXPLAIN assertion.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: b7e58928-70fd-432d-a68b-912d0594b0ea

📥 Commits

Reviewing files that changed from the base of the PR and between 70ff16c and d0c1df7.

📒 Files selected for processing (2)
  • pkg/util/ranger/detacher.go
  • pkg/util/ranger/ranger_test.go

@hawkingrei hawkingrei force-pushed the issue-68408-range-or-filter branch 2 times, most recently from 63a6fe0 to 0365bd3 Compare May 17, 2026 21:17
@ti-chi-bot ti-chi-bot Bot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. and removed size/M Denotes a PR that changes 30-99 lines, ignoring generated files. labels May 17, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented May 17, 2026

Codecov Report

❌ Patch coverage is 80.85106% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 76.4846%. Comparing base (70ff16c) to head (b6f732e).
⚠️ Report is 4 commits behind head on master.

Additional details and impacted files
@@               Coverage Diff                @@
##             master     #68446        +/-   ##
================================================
- Coverage   77.2762%   76.4846%   -0.7917%     
================================================
  Files          2010       1992        -18     
  Lines        555477     557695      +2218     
================================================
- Hits         429252     426551      -2701     
- Misses       125305     131097      +5792     
+ Partials        920         47       -873     
Flag Coverage Δ
integration 41.5292% <80.8510%> (+1.7352%) ⬆️

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

Components Coverage Δ
dumpling 60.4888% <ø> (ø)
parser ∅ <ø> (∅)
br 49.9725% <ø> (-13.0354%) ⬇️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@hawkingrei hawkingrei force-pushed the issue-68408-range-or-filter branch from 0365bd3 to 5a9e414 Compare May 17, 2026 21:59
@ti-chi-bot ti-chi-bot Bot added the sig/planner SIG: Planner label May 17, 2026
@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented May 17, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign qw4990 for approval. For more information see the Code Review Process.
Please ensure that each of them provides their approval before proceeding.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@hawkingrei
Copy link
Copy Markdown
Member Author

/test check-dev2

@tiprow
Copy link
Copy Markdown

tiprow Bot commented May 17, 2026

@hawkingrei: The specified target(s) for /test were not found.
The following commands are available to trigger required jobs:

/test fast_test_tiprow
/test tidb_parser_test

Use /test all to run all jobs.

Details

In response to this:

/test check-dev2

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@hawkingrei
Copy link
Copy Markdown
Member Author

/retest

@hawkingrei
Copy link
Copy Markdown
Member Author

/test check-dev2

@tiprow
Copy link
Copy Markdown

tiprow Bot commented May 18, 2026

@hawkingrei: The specified target(s) for /test were not found.
The following commands are available to trigger required jobs:

/test fast_test_tiprow
/test tidb_parser_test

Use /test all to run all jobs.

Details

In response to this:

/test check-dev2

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@hawkingrei hawkingrei changed the title util/ranger: enhance range extraction for complex OR filters ranger: enhance range extraction for complex OR filters May 18, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pkg/util/ranger/detacher.go`:
- Around line 292-314: The code unconditionally removes both
bestCNFItemRes.rangeResult.AccessConds and
originalConditions[bestCNFItemRes.offset] from baseRes.RemainedConds which drops
required residual predicates when bestCNFItemRes.RemainedConds is non-empty;
change the logic to only remove the original DNF condition
(originalConditions[offset]) from baseRes.RemainedConds when
bestCNFItemRes.RemainedConds is empty, otherwise preserve that original
condition (but you may still remove the rangeResult.AccessConds if they are
represented by the access range). Concretely, update the block that computes
coveredConds and mutates baseRes.RemainedConds to check
bestCNFItemRes.RemainedConds (the detach result) and only call removeConditions
to remove the DNF original condition when that slice is empty; keep using
removeConditions, AppendConditionsIfNotExist, newConditions, and
baseRes.AccessConds as before for computing and appending remainedConds.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a2ada7a9-1806-4532-9f7f-6a68d7bedc15

📥 Commits

Reviewing files that changed from the base of the PR and between a697bb1 and 5de6e74.

📒 Files selected for processing (1)
  • pkg/util/ranger/detacher.go

Comment on lines +292 to +314
coveredConds := bestCNFItemRes.rangeResult.AccessConds
if bestCNFItemRes.offset >= 0 && bestCNFItemRes.offset < len(originalConditions) {
coveredConds = AppendConditionsIfNotExist(
sctx.ExprCtx.GetEvalCtx(),
coveredConds,
[]expression.Expression{originalConditions[bestCNFItemRes.offset]},
)
}
// The composite CNF item is now represented by the intersected range. Remove
// both its access conditions and original DNF condition from RemainedConds to
// avoid redundant filters while keeping exact semantics.
baseRes.RemainedConds = removeConditions(
sctx.ExprCtx.GetEvalCtx(),
baseRes.RemainedConds,
coveredConds,
)
// baseRes.RemainedConds must keep a DNF-equivalent exact-filter contract
// for conditions not covered by baseRes.AccessConds. After removing the
// covered composite item, append only the new conditions that are neither
// covered by that item nor already represented by the final access range.
remainedConds := removeConditions(sctx.ExprCtx.GetEvalCtx(), newConditions, coveredConds)
remainedConds = removeConditions(sctx.ExprCtx.GetEvalCtx(), remainedConds, baseRes.AccessConds)
baseRes.RemainedConds = AppendConditionsIfNotExist(sctx.ExprCtx.GetEvalCtx(), baseRes.RemainedConds, remainedConds)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Keep residual filters when the selected CNF item still has RemainedConds.

extractBestCNFItemRanges can pick a DNF/CNF item whose own detach result still needs exact filtering. This helper unconditionally removes both bestCNFItemRes.rangeResult.AccessConds and originalConditions[offset] from baseRes.RemainedConds, so the early return can drop a required residual predicate and admit rows outside the original condition.

🐛 Proposed fix
-	coveredConds := bestCNFItemRes.rangeResult.AccessConds
-	if bestCNFItemRes.offset >= 0 && bestCNFItemRes.offset < len(originalConditions) {
+	coveredConds := bestCNFItemRes.rangeResult.AccessConds
+	if len(bestCNFItemRes.rangeResult.RemainedConds) == 0 &&
+		bestCNFItemRes.offset >= 0 && bestCNFItemRes.offset < len(originalConditions) {
 		coveredConds = AppendConditionsIfNotExist(
 			sctx.ExprCtx.GetEvalCtx(),
 			coveredConds,
 			[]expression.Expression{originalConditions[bestCNFItemRes.offset]},
 		)
 	}
@@
-	remainedConds := removeConditions(sctx.ExprCtx.GetEvalCtx(), newConditions, coveredConds)
+	remainedConds := removeConditions(sctx.ExprCtx.GetEvalCtx(), newConditions, coveredConds)
+	remainedConds = AppendConditionsIfNotExist(
+		sctx.ExprCtx.GetEvalCtx(),
+		remainedConds,
+		bestCNFItemRes.rangeResult.RemainedConds,
+	)
 	remainedConds = removeConditions(sctx.ExprCtx.GetEvalCtx(), remainedConds, baseRes.AccessConds)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
coveredConds := bestCNFItemRes.rangeResult.AccessConds
if bestCNFItemRes.offset >= 0 && bestCNFItemRes.offset < len(originalConditions) {
coveredConds = AppendConditionsIfNotExist(
sctx.ExprCtx.GetEvalCtx(),
coveredConds,
[]expression.Expression{originalConditions[bestCNFItemRes.offset]},
)
}
// The composite CNF item is now represented by the intersected range. Remove
// both its access conditions and original DNF condition from RemainedConds to
// avoid redundant filters while keeping exact semantics.
baseRes.RemainedConds = removeConditions(
sctx.ExprCtx.GetEvalCtx(),
baseRes.RemainedConds,
coveredConds,
)
// baseRes.RemainedConds must keep a DNF-equivalent exact-filter contract
// for conditions not covered by baseRes.AccessConds. After removing the
// covered composite item, append only the new conditions that are neither
// covered by that item nor already represented by the final access range.
remainedConds := removeConditions(sctx.ExprCtx.GetEvalCtx(), newConditions, coveredConds)
remainedConds = removeConditions(sctx.ExprCtx.GetEvalCtx(), remainedConds, baseRes.AccessConds)
baseRes.RemainedConds = AppendConditionsIfNotExist(sctx.ExprCtx.GetEvalCtx(), baseRes.RemainedConds, remainedConds)
coveredConds := bestCNFItemRes.rangeResult.AccessConds
if len(bestCNFItemRes.rangeResult.RemainedConds) == 0 &&
bestCNFItemRes.offset >= 0 && bestCNFItemRes.offset < len(originalConditions) {
coveredConds = AppendConditionsIfNotExist(
sctx.ExprCtx.GetEvalCtx(),
coveredConds,
[]expression.Expression{originalConditions[bestCNFItemRes.offset]},
)
}
// The composite CNF item is now represented by the intersected range. Remove
// both its access conditions and original DNF condition from RemainedConds to
// avoid redundant filters while keeping exact semantics.
baseRes.RemainedConds = removeConditions(
sctx.ExprCtx.GetEvalCtx(),
baseRes.RemainedConds,
coveredConds,
)
// baseRes.RemainedConds must keep a DNF-equivalent exact-filter contract
// for conditions not covered by baseRes.AccessConds. After removing the
// covered composite item, append only the new conditions that are neither
// covered by that item nor already represented by the final access range.
remainedConds := removeConditions(sctx.ExprCtx.GetEvalCtx(), newConditions, coveredConds)
remainedConds = AppendConditionsIfNotExist(
sctx.ExprCtx.GetEvalCtx(),
remainedConds,
bestCNFItemRes.rangeResult.RemainedConds,
)
remainedConds = removeConditions(sctx.ExprCtx.GetEvalCtx(), remainedConds, baseRes.AccessConds)
baseRes.RemainedConds = AppendConditionsIfNotExist(sctx.ExprCtx.GetEvalCtx(), baseRes.RemainedConds, remainedConds)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/util/ranger/detacher.go` around lines 292 - 314, The code unconditionally
removes both bestCNFItemRes.rangeResult.AccessConds and
originalConditions[bestCNFItemRes.offset] from baseRes.RemainedConds which drops
required residual predicates when bestCNFItemRes.RemainedConds is non-empty;
change the logic to only remove the original DNF condition
(originalConditions[offset]) from baseRes.RemainedConds when
bestCNFItemRes.RemainedConds is empty, otherwise preserve that original
condition (but you may still remove the rangeResult.AccessConds if they are
represented by the access range). Concretely, update the block that computes
coveredConds and mutates baseRes.RemainedConds to check
bestCNFItemRes.RemainedConds (the detach result) and only call removeConditions
to remove the DNF original condition when that slice is empty; keep using
removeConditions, AppendConditionsIfNotExist, newConditions, and
baseRes.AccessConds as before for computing and appending remainedConds.

@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented May 18, 2026

@hawkingrei: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
pull-integration-realcluster-test-next-gen b6f732e link true /test pull-integration-realcluster-test-next-gen

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI-Correction Bugfix by AI release-note Denotes a PR that will be considered when it comes time to generate release notes. sig/planner SIG: Planner size/L Denotes a PR that changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Enhance range extraction for complicated OR filter

1 participant