Skip to content

planner: lateral join quality updates#67482

Merged
ti-chi-bot[bot] merged 5 commits into
pingcap:masterfrom
terry1purcell:lateralupdate
Apr 7, 2026
Merged

planner: lateral join quality updates#67482
ti-chi-bot[bot] merged 5 commits into
pingcap:masterfrom
terry1purcell:lateralupdate

Conversation

@terry1purcell
Copy link
Copy Markdown
Contributor

@terry1purcell terry1purcell commented Apr 1, 2026

What problem does this PR solve?

Issue Number: ref #40328

Problem Summary:

What changed and how does it work?

During a cherry pick of lateral join to a prior branch - new AI reviews found additional issues with the original implementation. These are addressed in this PR.

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.

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.

None

Summary by CodeRabbit

  • Bug Fixes
    • Better detection of nested LATERAL usage inside derived tables and set-operations, improving correctness of joins with lateral subqueries.
    • Corrected handling of schema propagation for lateral joins to avoid incorrect join planning.
    • Ensure session optimization settings for recursive CTEs are reliably restored on error.
    • More accurate decorrelation of expressions by using the appropriate outer schema only for lateral contexts.

@ti-chi-bot ti-chi-bot Bot added the release-note-none Denotes a PR that doesn't merit a release note. label Apr 1, 2026
@pantheon-ai
Copy link
Copy Markdown

pantheon-ai Bot commented Apr 1, 2026

Review Complete

Findings: 0 issues
Posted: 0
Duplicates/Skipped: 0

ℹ️ Learn more details on Pantheon AI.

@ti-chi-bot ti-chi-bot Bot added sig/planner SIG: Planner size/L Denotes a PR that changes 100-499 lines, ignoring generated files. labels Apr 1, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 1, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9e195d40-3f34-4e9f-bafc-252c69baeb7c

📥 Commits

Reviewing files that changed from the base of the PR and between cfd175a and abdbca3.

📒 Files selected for processing (1)
  • pkg/planner/core/logical_plan_builder.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • pkg/planner/core/logical_plan_builder.go

📝 Walkthrough

Walkthrough

Detect nested LATERAL occurrences in deeper table-source structures, adjust when CTE plans are marked "in apply" after full-schema propagation, defer restore of EnableParallelApply in CTE stats derivation, and use a computed outerSchema for decorrelation only when apply.IsLateral is true.

Changes

Cohort / File(s) Summary
LATERAL table-source & plan building
pkg/planner/core/logical_plan_builder.go
Expanded containsLateralTableSource to descend into TableSource.Source, SelectStmt.From, and SetOprStmt operands to find nested LATERAL. Moved setIsInApplyForCTE(rightPlan, ap.FullSchema) in buildLateralJoin to after ap.FullSchema/FullNames are set. Minor comments/clarifications in buildResultSetNode.
CTE stats / session var restore
pkg/planner/core/operator/logicalop/logical_cte.go
In LogicalCTE.DeriveStats, restore vars.EnableParallelApply via defer to guarantee reset even on early returns/errors.
Decorrelation outer schema selection
pkg/planner/core/rule_decorrelate.go
Apply findJoinFullSchema(outerPlan) override only when apply.IsLateral is true; use the computed outerSchema in cond.Decorrelate, expr.Decorrelate, and apply.Decorrelate calls instead of outerPlan.Schema().

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • hawkingrei
  • AilinKid
  • qw4990

Poem

🐰 I tunneled through ASTs, nimble and spry,

Found lateral nests where they used to hide,
I deferred a restore, so errors can't stay,
I matched outer-schemas only when lateral's the way,
Hop—planner aligned, now onward we glide ✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'planner: lateral join quality updates' accurately summarizes the main changes: quality/correctness improvements to the lateral join implementation across multiple planner files.
Description check ✅ Passed The description includes an issue reference (ref #40328), explains the context (cherry pick quality fixes), checks at least one test type (unit test), and provides a release note section. However, the 'Problem Summary' and 'What changed and how does it work?' sections lack detailed explanation of the specific issues fixed.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

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

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

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.11.4)

Command failed


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.

@tiprow
Copy link
Copy Markdown

tiprow Bot commented Apr 1, 2026

Hi @terry1purcell. Thanks for your PR.

PRs from untrusted users cannot be marked as trusted with /ok-to-test in this repo meaning untrusted PR authors can never trigger tests themselves. Collaborators can still trigger tests on the PR using /test all.

I understand the commands that are listed here.

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.

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

🧹 Nitpick comments (1)
pkg/planner/core/operator/logicalop/logical_apply.go (1)

217-223: Keep Semi/Anti ColNDVs aligned with the new lateral row-count scaling.

On Line 222, lateral Semi/Anti Apply now scales RowCount, but ColNDVs are still copied unscaled later (Line 229-Line 231). That diverges from LogicalJoin.DeriveStats behavior and can skew downstream selectivity/costing.

♻️ Suggested adjustment
-	} else if la.IsLateral && (la.JoinType == base.SemiJoin || la.JoinType == base.AntiSemiJoin) {
+	semiAntiLateral := la.IsLateral && (la.JoinType == base.SemiJoin || la.JoinType == base.AntiSemiJoin)
+	if semiAntiLateral {
 		// For LATERAL SemiJoin/AntiSemiJoin Apply operators, apply SelectionFactor
 		// to the row count estimate, consistent with LogicalJoin.DeriveStats.
 		// Non-lateral Apply (correlated subqueries) keeps the original left row count
 		// to avoid changing existing plan estimates.
 		rowCount *= cost.SelectionFactor
 	}
@@
-	for id, c := range leftProfile.ColNDVs {
-		la.StatsInfo().ColNDVs[id] = c
+	for id, c := range leftProfile.ColNDVs {
+		if semiAntiLateral {
+			c *= cost.SelectionFactor
+		}
+		la.StatsInfo().ColNDVs[id] = c
 	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/planner/core/operator/logicalop/logical_apply.go` around lines 217 - 223,
LogicalApply currently scales rowCount for lateral SemiJoin/AntiSemiJoin
(la.IsLateral && la.JoinType == base.SemiJoin/AntiSemiJoin) but does not scale
per-column NDV estimates (ColNDVs) when they are copied later, causing
divergence from LogicalJoin.DeriveStats; update the copy/assignment of ColNDVs
in the LogicalApply instance to scale NDV values by the same SelectionFactor
when la.IsLateral and JoinType is SemiJoin or AntiSemiJoin so ColNDVs remain
consistent with the adjusted RowCount (reference symbols: la, IsLateral,
JoinType, RowCount, ColNDVs, cost.SelectionFactor, LogicalJoin.DeriveStats).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@pkg/planner/core/logical_plan_builder.go`:
- Around line 688-696: The helper containsLateralTableSource currently only
recurses into n.Source when it's an ast.ResultSetNode but doesn't handle wrapper
nodes like *ast.SelectStmt and *ast.SetOprStmt, so LATERAL inside derived
SELECTs/set-ops isn't detected and buildJoin's isLateral logic is wrong; update
containsLateralTableSource to type-switch on wrapper types (e.g.,
*ast.SelectStmt and *ast.SetOprStmt) and descend into their inner
result-set/operands (recursing into the contained ResultSetNode(s)) so that
nested LATERALs are found and buildJoin's left-schema push / join-reordering
behavior is correct.

---

Nitpick comments:
In `@pkg/planner/core/operator/logicalop/logical_apply.go`:
- Around line 217-223: LogicalApply currently scales rowCount for lateral
SemiJoin/AntiSemiJoin (la.IsLateral && la.JoinType ==
base.SemiJoin/AntiSemiJoin) but does not scale per-column NDV estimates
(ColNDVs) when they are copied later, causing divergence from
LogicalJoin.DeriveStats; update the copy/assignment of ColNDVs in the
LogicalApply instance to scale NDV values by the same SelectionFactor when
la.IsLateral and JoinType is SemiJoin or AntiSemiJoin so ColNDVs remain
consistent with the adjusted RowCount (reference symbols: la, IsLateral,
JoinType, RowCount, ColNDVs, cost.SelectionFactor, LogicalJoin.DeriveStats).
🪄 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: 04607bb4-c3e4-4da5-8c33-4cbdf3f7e66d

📥 Commits

Reviewing files that changed from the base of the PR and between a5ad421 and 36790f8.

📒 Files selected for processing (4)
  • pkg/planner/core/logical_plan_builder.go
  • pkg/planner/core/operator/logicalop/logical_apply.go
  • pkg/planner/core/operator/logicalop/logical_cte.go
  • pkg/planner/core/rule_decorrelate.go

Comment thread pkg/planner/core/logical_plan_builder.go Outdated
Copy link
Copy Markdown

@pantheon-ai pantheon-ai Bot left a comment

Choose a reason for hiding this comment

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

✅ Code looks good. No issues found.

@hawkingrei
Copy link
Copy Markdown
Member

/ok-to-test

@ti-chi-bot ti-chi-bot Bot added the ok-to-test Indicates a PR is ready to be tested. label Apr 1, 2026
…rStmt

Remove redundant type assertion on n.Source (already ast.ResultSetNode)
and add cases for *ast.SelectStmt and *ast.SetOprStmt so
containsLateralTableSource descends into derived subqueries and set-ops.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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.

♻️ Duplicate comments (1)
pkg/planner/core/logical_plan_builder.go (1)

707-716: ⚠️ Potential issue | 🟠 Major

Parenthesized set-op operands still bypass this LATERAL walk.

SetOprStmt.SelectList.Selects is not limited to ast.ResultSetNode; the same file’s set-op builder later handles *ast.SetOprSelectList explicitly for parenthesized operands. Those still fall through here, so a shape like JOIN ((SELECT ...) UNION ALL ((SELECT ... JOIN LATERAL ...))) dt can keep isLateral == false and skip the outer-schema push for the nested branch.

🛠️ Suggested fix
+func containsLateralNode(node ast.Node) bool {
+	switch n := node.(type) {
+	case ast.ResultSetNode:
+		return containsLateralTableSource(n)
+	case *ast.SetOprSelectList:
+		for _, sel := range n.Selects {
+			if containsLateralNode(sel) {
+				return true
+			}
+		}
+	}
+	return false
+}
+
 case *ast.SetOprStmt:
 	// Check each operand in the UNION/INTERSECT/EXCEPT list.
 	if n.SelectList != nil {
 		for _, sel := range n.SelectList.Selects {
-			if rs, ok := sel.(ast.ResultSetNode); ok && containsLateralTableSource(rs) {
+			if containsLateralNode(sel) {
 				return true
 			}
 		}
 	}
 	return false

Please add a regression for a parenthesized set-op operand that contains LATERAL.

Based on learnings, "For planner rule or logical/physical plan changes, perform targeted planner unit tests and update rule testdata when needed."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/planner/core/logical_plan_builder.go` around lines 707 - 716, The
SetOprStmt branch only inspects SelectList.Selects assuming each is an
ast.ResultSetNode, so parenthesized operands represented by
*ast.SetOprSelectList are skipped and can hide LATERALs; update the check in the
SetOprStmt case in logical_plan_builder.go to also handle ast.SetOprSelectList
by descending into its inner Selects (reusing containsLateralTableSource or
similar traversal) so parenthesized operands are scanned, ensure isLateral can
become true for those cases, and add a planner unit regression that builds a
join over a set-op where a parenthesized operand contains a LATERAL to validate
the outer-schema push occurs.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@pkg/planner/core/logical_plan_builder.go`:
- Around line 707-716: The SetOprStmt branch only inspects SelectList.Selects
assuming each is an ast.ResultSetNode, so parenthesized operands represented by
*ast.SetOprSelectList are skipped and can hide LATERALs; update the check in the
SetOprStmt case in logical_plan_builder.go to also handle ast.SetOprSelectList
by descending into its inner Selects (reusing containsLateralTableSource or
similar traversal) so parenthesized operands are scanned, ensure isLateral can
become true for those cases, and add a planner unit regression that builds a
join over a set-op where a parenthesized operand contains a LATERAL to validate
the outer-schema push occurs.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 8df46d6a-40e8-48ac-bfd3-8a6e38814e17

📥 Commits

Reviewing files that changed from the base of the PR and between 36790f8 and 6f70fa8.

📒 Files selected for processing (1)
  • pkg/planner/core/logical_plan_builder.go

Apply SelectionFactor to all SemiJoin/AntiSemiJoin Apply operators,
not just LATERAL ones, for consistency with LogicalJoin.DeriveStats.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 1, 2026

Codecov Report

❌ Patch coverage is 93.54839% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 78.5339%. Comparing base (a5ad421) to head (abdbca3).
⚠️ Report is 28 commits behind head on master.

Additional details and impacted files
@@               Coverage Diff                @@
##             master     #67482        +/-   ##
================================================
+ Coverage   77.8123%   78.5339%   +0.7216%     
================================================
  Files          2023       1972        -51     
  Lines        556615     550884      -5731     
================================================
- Hits         433115     432631       -484     
+ Misses       121754     117817      -3937     
+ Partials       1746        436      -1310     
Flag Coverage Δ
integration 43.9280% <90.3225%> (-4.2004%) ⬇️
unit 77.0672% <93.5483%> (+0.6889%) ⬆️

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

Components Coverage Δ
dumpling 61.5065% <ø> (+0.0901%) ⬆️
parser ∅ <ø> (∅)
br 50.6170% <ø> (-10.2330%) ⬇️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

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.

♻️ Duplicate comments (1)
pkg/planner/core/logical_plan_builder.go (1)

690-721: ⚠️ Potential issue | 🟠 Major

Still descend into nested SetOprSelectList operands here.

Line 716 only recurses into ast.ResultSetNode, but parenthesized UNION/INTERSECT/EXCEPT branches are represented later in this file as *ast.SetOprSelectList. A right side like JOIN ((SELECT ...) UNION ((SELECT ... FROM t2 JOIN LATERAL (...) l))) AS dt still returns false here, so buildJoin will skip the outer-schema push and can leave join reordering enabled for a lateral-dependent subtree.

♻️ Suggested fix
+func containsLateralSetOprSelectList(list *ast.SetOprSelectList) bool {
+	if list == nil {
+		return false
+	}
+	for _, sel := range list.Selects {
+		switch x := sel.(type) {
+		case ast.ResultSetNode:
+			if containsLateralTableSource(x) {
+				return true
+			}
+		case *ast.SetOprSelectList:
+			if containsLateralSetOprSelectList(x) {
+				return true
+			}
+		}
+	}
+	return false
+}
+
 func containsLateralTableSource(node ast.ResultSetNode) bool {
 	switch n := node.(type) {
 	...
 	case *ast.SetOprStmt:
-		// Check each operand in the UNION/INTERSECT/EXCEPT list.
-		if n.SelectList != nil {
-			for _, sel := range n.SelectList.Selects {
-				if rs, ok := sel.(ast.ResultSetNode); ok && containsLateralTableSource(rs) {
-					return true
-				}
-			}
-		}
-		return false
+		return containsLateralSetOprSelectList(n.SelectList)
 	default:
 		return false
 	}
 }

Please add a planner regression covering a parenthesized set-op operand with nested LATERAL as well. Based on learnings: "Applies to pkg/planner/** : For planner rule or logical/physical plan changes, perform targeted planner unit tests and update rule testdata when needed."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/planner/core/logical_plan_builder.go` around lines 690 - 721, The
containsLateralTableSource function currently skips operands represented as
*ast.SetOprSelectList, so add a case for *ast.SetOprSelectList that iterates its
Selects (similar to the *ast.SetOprStmt case) and recurses into each operand via
containsLateralTableSource; update the switch in containsLateralTableSource to
handle both *ast.SetOprStmt and *ast.SetOprSelectList, returning true if any
operand contains a LATERAL, and false otherwise; then add a planner regression
test exercising a parenthesized set-op operand (e.g., JOIN ((SELECT ...) UNION
((SELECT ... FROM t2 JOIN LATERAL (...) l))) AS dt) to ensure buildJoin sees the
nested LATERAL and outer-schema push / join-reordering behavior is correct.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@pkg/planner/core/logical_plan_builder.go`:
- Around line 690-721: The containsLateralTableSource function currently skips
operands represented as *ast.SetOprSelectList, so add a case for
*ast.SetOprSelectList that iterates its Selects (similar to the *ast.SetOprStmt
case) and recurses into each operand via containsLateralTableSource; update the
switch in containsLateralTableSource to handle both *ast.SetOprStmt and
*ast.SetOprSelectList, returning true if any operand contains a LATERAL, and
false otherwise; then add a planner regression test exercising a parenthesized
set-op operand (e.g., JOIN ((SELECT ...) UNION ((SELECT ... FROM t2 JOIN LATERAL
(...) l))) AS dt) to ensure buildJoin sees the nested LATERAL and outer-schema
push / join-reordering behavior is correct.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9813e52e-0de6-4484-b2c4-13df6772e53c

📥 Commits

Reviewing files that changed from the base of the PR and between 6f70fa8 and cfd175a.

📒 Files selected for processing (1)
  • pkg/planner/core/logical_plan_builder.go

@terry1purcell
Copy link
Copy Markdown
Contributor Author

/retest-required

@ti-chi-bot ti-chi-bot Bot added size/M Denotes a PR that changes 30-99 lines, ignoring generated files. and removed size/L Denotes a PR that changes 100-499 lines, ignoring generated files. labels Apr 2, 2026
vars.EnableParallelApply = false
defer func() { vars.EnableParallelApply = savedParallelApply }()
_, p.Cte.RecursivePartPhysicalPlan, _, err = utilfuncp.DoOptimize(context.TODO(), p.SCtx(), p.Cte.OptFlag, p.Cte.RecursivePartLogicalPlan)
vars.EnableParallelApply = savedParallelApply
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Wow, will the original code cause any issues?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

From a deeper analysis - the original code works correctly in a normal execution. However, it is not panic-safe. If DoOptimize panics, then the original code would leak EnableParallelApply = false for the rest of the session. It is not clear to me how many users enable parallel Apply currently. And this fix is already in the cherry pick branch (where this bug was found). And it is unlikely that anyone else has this issue - since lateral join fix was recently merged to master.

@ti-chi-bot ti-chi-bot Bot added approved needs-1-more-lgtm Indicates a PR needs 1 more LGTM. labels Apr 2, 2026
@terry1purcell
Copy link
Copy Markdown
Contributor Author

/retest-required

@ti-chi-bot ti-chi-bot Bot added lgtm and removed needs-1-more-lgtm Indicates a PR needs 1 more LGTM. labels Apr 6, 2026
@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented Apr 6, 2026

[LGTM Timeline notifier]

Timeline:

  • 2026-04-02 03:19:37.266924544 +0000 UTC m=+407982.472284591: ☑️ agreed by winoros.
  • 2026-04-06 02:27:55.615765745 +0000 UTC m=+750480.821125792: ☑️ agreed by qw4990.

@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented Apr 6, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: hawkingrei, qw4990, winoros

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

The pull request process is described 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

/retest

@hawkingrei
Copy link
Copy Markdown
Member

/test all

@terry1purcell
Copy link
Copy Markdown
Contributor Author

/retest-required

2 similar comments
@terry1purcell
Copy link
Copy Markdown
Contributor Author

/retest-required

@terry1purcell
Copy link
Copy Markdown
Contributor Author

/retest-required

@hawkingrei
Copy link
Copy Markdown
Member

/test all

@qw4990
Copy link
Copy Markdown
Contributor

qw4990 commented Apr 7, 2026

/test mysql-test

@tiprow
Copy link
Copy Markdown

tiprow Bot commented Apr 7, 2026

@qw4990: 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 the following jobs that were automatically triggered:

tidb_parser_test
Details

In response to this:

/test mysql-test

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

/retest

1 similar comment
@hawkingrei
Copy link
Copy Markdown
Member

/retest

@ti-chi-bot ti-chi-bot Bot merged commit 72f9da0 into pingcap:master Apr 7, 2026
34 of 35 checks passed
@terry1purcell terry1purcell deleted the lateralupdate branch April 12, 2026 17:04
@ti-chi-bot ti-chi-bot Bot added the needs-cherry-pick-release-8.5 Should cherry pick this PR to release-8.5 branch. label Jun 2, 2026
@ti-chi-bot
Copy link
Copy Markdown
Member

In response to a cherrypick label: new pull request created to branch release-8.5: #68889.
But this PR has conflicts, please resolve them!

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

Labels

approved lgtm needs-cherry-pick-release-8.5 Should cherry pick this PR to release-8.5 branch. ok-to-test Indicates a PR is ready to be tested. release-note-none Denotes a PR that doesn't merit a release note. sig/planner SIG: Planner size/M Denotes a PR that changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants