Skip to content

privilege: add ColumnsPrivMap for accelerating column-privilege (#61677)#67641

Merged
ti-chi-bot[bot] merged 4 commits into
pingcap:masterfrom
ti-chi-bot:cherry-pick-61677-to-master
Apr 20, 2026
Merged

privilege: add ColumnsPrivMap for accelerating column-privilege (#61677)#67641
ti-chi-bot[bot] merged 4 commits into
pingcap:masterfrom
ti-chi-bot:cherry-pick-61677-to-master

Conversation

@ti-chi-bot

@ti-chi-bot ti-chi-bot commented Apr 9, 2026

Copy link
Copy Markdown
Member

This is an automated cherry-pick of #61677

Rebuild note (2026-04-09)

  • Head branch rebuilt on latest upstream/master by cherry-picking original merge commit 4f65dffdd6480fc1c36c61fe7cd655f163bc9d41.
  • Rebuilt commit: 5141aa329e.
  • Conflict resolution touched only:

What problem does this PR solve?

Issue Number: ref #61706

Problem Summary:

What changed and how does it work?

Adapt the MySQLPrivilege to support column privilege.

This PR picks pkg/privilege/privileges/cache.go and pkg/privilege/privileges/cache_test.go from #61677.

Key changes (master-side minimal port)

  • compareHost: adjust host-pattern ordering so % is least specific and '' (empty host) sorts after %.
  • columnsPrivRecord.match: add a column == "*" special-case gated by SELECT privilege (covers SELECT COUNT(*) ...).
  • ColumnsPrivMap + buildColumnsPrivMap + MatchColumns: cache/group mysql.columns_priv records per user and use it in RequestVerification to speed up column privilege matching.
  • RequestVerification: treat tables_priv as table-level only (Table_priv), and route column-level checks to columns_priv via MatchColumns (avoid using tables_priv.Column_priv as an authorization shortcut).
  • Tests: add TestMatchColumns; extend TestSortUserTable to cover % / host-pattern ordering; improve failure output in checkUserRecord.

Verification

  • Conflict marker scan: rg -n '^(<{7}|={7}|>{7})( |$)' (0 hits)
  • Unit tests:
    • go test -tags=intest ./pkg/privilege/privileges -run TestMatchColumns -count=1
    • go test -tags=intest ./pkg/privilege/privileges -run 'TestLoadColumnsPrivTable|TestMatchColumns|TestSortUserTable|TestPatternMatch' -count=1

Check List

Tests

  • Unit test (existent cases)
  • 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

  • Improvements

    • Added a per-user column-privilege cache for faster column-level checks and rebuilt it after privilege updates.
    • Made host-pattern ordering deterministic to handle wildcard/empty-host edge cases.
    • Updated wildcard-column behavior so checks for "*" correctly match column-agnostic operations and column privilege is derived from the dedicated column-matching path.
  • Tests

    • Added tests validating column-privilege matching, host/table ordering, and improved test assertions.

@ti-chi-bot ti-chi-bot added do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. release-note-none Denotes a PR that doesn't merit a release note. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. type/cherry-pick-for-master labels Apr 9, 2026
@ti-chi-bot

Copy link
Copy Markdown
Member Author

@fzzf678 This PR has conflicts, I have hold it.
Please resolve them or ask others to resolve them, then comment /unhold to remove the hold label.

@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 Apr 9, 2026
@pantheon-ai

pantheon-ai Bot commented Apr 9, 2026

Copy link
Copy Markdown

@ti-chi-bot I've received your pull request and will start the review. I'll conduct a thorough review covering code quality, potential issues, and implementation details.

⏳ This process typically takes 10-30 minutes depending on the complexity of the changes.

ℹ️ Learn more details on Pantheon AI.

@ti-chi-bot

ti-chi-bot Bot commented Apr 9, 2026

Copy link
Copy Markdown

@ti-chi-bot: ## If you want to know how to resolve it, please read the guide in TiDB Dev Guide.

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 ti-community-infra/tichi repository.

@coderabbitai

coderabbitai Bot commented Apr 9, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Adds a per-user ColumnsPrivMap and buildColumnsPrivMap, exports MatchColumns, changes column-privilege matching (wildcard "*" support), makes host-pattern ordering deterministic in compareHost, and adjusts RequestVerification to compute column privileges solely via MatchColumns.

Changes

Cohort / File(s) Summary
Core Privilege Cache
pkg/privilege/privileges/cache.go
Add ColumnsPrivMap and buildColumnsPrivMap to clone column-priv data into per-user maps; export MatchColumns and update callers; change columnsPrivRecord.match to allow "*" column matching; make compareHost deterministic; adjust RequestVerification to derive columnPriv only from MatchColumns.
Privilege Cache Tests
pkg/privilege/privileges/cache_test.go
Add TestMatchColumns to validate explicit and wildcard column matching and behavior after reload/flush; extend TestSortUserTable with additional host-pattern ordering case; improve checkUserRecord assertion messages/formatting.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant Authenticator
    participant PrivCache as MySQLPrivilegeCache
    participant ColumnsTable as mysql.columns_priv

    Client->>Authenticator: request verification (user, host, db, table, column, priv)
    Authenticator->>PrivCache: locate MySQLPrivilege for user@host
    PrivCache->>PrivCache: ensure ColumnsPrivMap built (buildColumnsPrivMap)
    PrivCache->>ColumnsTable: (if needed) read columns_priv rows
    PrivCache->>PrivCache: MatchColumns(user, db, table, column)
    PrivCache-->>Authenticator: tablePriv & columnPriv result
    Authenticator-->>Client: allow/deny
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

cherry-pick-approved

Suggested reviewers

  • wjhuang2016
  • tiancaiamao

Poem

🐇 I hopped through rows and cached each key,
I matched the stars and set wild columns free.
Hosts now sorted tidy, no random fray,
Tiny paws built maps to light the way.
Crunchy carrots, fast lookups—hooray! 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 14.29% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: adding ColumnsPrivMap for accelerating column-privilege lookups in the privilege package.
Description check ✅ Passed The description follows the template structure with Issue Number, Problem Summary, What Changed sections, a completed checklist including unit tests, and release note marked as None.

✏️ 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.

@fzzf678 fzzf678 removed needs-cherry-pick-release-8.5 Should cherry pick this PR to release-8.5 branch. do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. do-not-merge/needs-triage-completed labels Apr 9, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 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/privilege/privileges/cache_test.go`:
- Around line 182-195: The test is constructing privileges with
&privileges.MySQLPrivilege{} which leaves internal maps/trees nil; replace those
with the package constructor by creating instances via
privileges.NewMySQLPrivilege() wherever MySQLPrivilege is instantiated (both
before the first LoadColumnsPrivTable/MatchColumns block and before the second
block after truncation) so LoadColumnsPrivTable and MatchColumns operate on a
properly initialized cache.

In `@pkg/privilege/privileges/cache.go`:
- Around line 928-935: LoadColumnsPrivTable now calls p.loadTable(ctx, ...) but
the refactor only introduced a package-level loadTable(exec sqlexec.SQLExecutor,
...) and callers like LoadAll/loadSomeUsers still use sqlexec.SQLExecutor, so
the change is half-applied; restore a consistent API by either (A) add a
MySQLPrivilege receiver overload func (p *MySQLPrivilege) loadTable(ctx
sqlexec.RestrictedSQLExecutor, query string, decode func(...)) that delegates to
the package helper, then update LoadAll and loadSomeUsers to call p.loadTable
where they currently use loadTable, or (B) revert the method call in
LoadColumnsPrivTable to use the existing package-level loadTable(exec
sqlexec.SQLExecutor, ...) signature and keep callers unchanged; update all
affected symbols: MySQLPrivilege.LoadColumnsPrivTable, loadTable
(package-level), LoadAll, loadSomeUsers so the signatures and caller types
match.
🪄 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: b6ee5346-b707-4d59-a49a-2cbc108cd5de

📥 Commits

Reviewing files that changed from the base of the PR and between e0b4e44 and 2635871.

📒 Files selected for processing (2)
  • pkg/privilege/privileges/cache.go
  • pkg/privilege/privileges/cache_test.go

Comment thread pkg/privilege/privileges/cache_test.go Outdated
Comment thread pkg/privilege/privileges/cache.go Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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 (2)
pkg/privilege/privileges/cache.go (2)

368-368: Consider adding a doc comment for the exported field.

ColumnsPrivMap is exported but lacks documentation. A brief comment explaining its purpose (accelerating column privilege lookups) and relationship to columnsPriv would help maintainers.

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

In `@pkg/privilege/privileges/cache.go` at line 368, Add a doc comment above the
exported field ColumnsPrivMap describing its purpose and usage: explain that
ColumnsPrivMap maps table names (string) to slices of columnsPrivRecord to
accelerate column privilege lookups and how it relates to the underlying
columnsPriv structure (e.g., used as a cache/accelerated index for columnsPriv
lookups). Mention any concurrency or lifecycle expectations if applicable (e.g.,
maintained alongside updates to columnsPriv).

1415-1422: Consider explicit parentheses for readability.

The operator precedence is correct (&& binds tighter than ||), but explicit parentheses would make the intent clearer:

💡 Suggested clarification
 	return record.baseRecord.match(user, host) &&
 		strings.EqualFold(record.DB, db) &&
 		strings.EqualFold(record.TableName, table) &&
-		(strings.EqualFold(record.ColumnName, col) || col == "*" && (record.ColumnPriv&mysql.SelectPriv > 0))
+		(strings.EqualFold(record.ColumnName, col) || (col == "*" && (record.ColumnPriv&mysql.SelectPriv > 0)))
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/privilege/privileges/cache.go` around lines 1415 - 1422, The expression
in columnsPrivRecord.match mixes && and || which is correct but unclear; update
the return expression in match (method columnsPrivRecord.match) to add explicit
parentheses around the final OR clause so the intent is obvious — e.g. wrap the
column check as (strings.EqualFold(record.ColumnName, col) || (col == "*" &&
(record.ColumnPriv&mysql.SelectPriv > 0))) while keeping the existing
baseRecord.match and DB/Table comparisons unchanged.
🤖 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/privilege/privileges/cache.go`:
- Around line 809-816: Update the outdated comment that reads "the order is
nondeterministic" to accurately reflect the deterministic lexicographic
comparison implemented here (using the x > y / x < y branches returning 1/-1/0);
locate the comparison routine that compares x and y (the function containing the
shown return 1 / return -1 / return 0 logic) and reword or remove the misleading
sentence so it states that the comparison is deterministic and follows
lexicographic ordering between x and y.

---

Nitpick comments:
In `@pkg/privilege/privileges/cache.go`:
- Line 368: Add a doc comment above the exported field ColumnsPrivMap describing
its purpose and usage: explain that ColumnsPrivMap maps table names (string) to
slices of columnsPrivRecord to accelerate column privilege lookups and how it
relates to the underlying columnsPriv structure (e.g., used as a
cache/accelerated index for columnsPriv lookups). Mention any concurrency or
lifecycle expectations if applicable (e.g., maintained alongside updates to
columnsPriv).
- Around line 1415-1422: The expression in columnsPrivRecord.match mixes && and
|| which is correct but unclear; update the return expression in match (method
columnsPrivRecord.match) to add explicit parentheses around the final OR clause
so the intent is obvious — e.g. wrap the column check as
(strings.EqualFold(record.ColumnName, col) || (col == "*" &&
(record.ColumnPriv&mysql.SelectPriv > 0))) while keeping the existing
baseRecord.match and DB/Table comparisons unchanged.
🪄 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: 2f5aafee-5cfc-4a6f-9283-bacfc8e35e8e

📥 Commits

Reviewing files that changed from the base of the PR and between 2635871 and 5141aa3.

📒 Files selected for processing (2)
  • pkg/privilege/privileges/cache.go
  • pkg/privilege/privileges/cache_test.go

Comment on lines 809 to 816
// For other case, the order is nondeterministic.
switch x < y {
case true:
return -1
case false:
if x > y {
return 1
} else if x < y {
return -1
}
return 0
}

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 | 🟡 Minor

Outdated comment: the comparison is now deterministic.

The comment states "the order is nondeterministic" but the implementation performs a deterministic lexicographic comparison. This discrepancy could confuse future maintainers.

📝 Proposed fix
-	// For other case, the order is nondeterministic.
+	// For other cases, use lexicographic ordering.
 	if x > y {
 		return 1
 	} else if x < y {
📝 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
// For other case, the order is nondeterministic.
switch x < y {
case true:
return -1
case false:
if x > y {
return 1
} else if x < y {
return -1
}
return 0
}
// For other cases, use lexicographic ordering.
if x > y {
return 1
} else if x < y {
return -1
}
return 0
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/privilege/privileges/cache.go` around lines 809 - 816, Update the
outdated comment that reads "the order is nondeterministic" to accurately
reflect the deterministic lexicographic comparison implemented here (using the x
> y / x < y branches returning 1/-1/0); locate the comparison routine that
compares x and y (the function containing the shown return 1 / return -1 /
return 0 logic) and reword or remove the misleading sentence so it states that
the comparison is deterministic and follows lexicographic ordering between x and
y.

@fzzf678

fzzf678 commented Apr 9, 2026

Copy link
Copy Markdown
Contributor

fast_test_tiprow looks infra/flaky (bazel remote exec failure: DNS lookup storage.googleapis.com -> socket: too many open files).

/retest

@codecov

codecov Bot commented Apr 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 82.22222% with 8 lines in your changes missing coverage. Please review.
✅ Project coverage is 77.4527%. Comparing base (e3f45e4) to head (2957b4e).
⚠️ Report is 3 commits behind head on master.

Additional details and impacted files
@@               Coverage Diff                @@
##             master     #67641        +/-   ##
================================================
- Coverage   77.7969%   77.4527%   -0.3443%     
================================================
  Files          1983       1966        -17     
  Lines        548948     549367       +419     
================================================
- Hits         427065     425500      -1565     
- Misses       120962     123865      +2903     
+ Partials        921          2       -919     
Flag Coverage Δ
integration 40.9202% <46.6666%> (+1.1230%) ⬆️
unit 76.6559% <82.2222%> (+0.3064%) ⬆️

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

Components Coverage Δ
dumpling 61.5065% <ø> (ø)
parser ∅ <ø> (∅)
br 50.0561% <ø> (-13.0555%) ⬇️
🚀 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.

@ti-chi-bot ti-chi-bot Bot added approved needs-1-more-lgtm Indicates a PR needs 1 more LGTM. labels Apr 10, 2026
@pingcap pingcap deleted a comment from ti-chi-bot Bot Apr 10, 2026
@ti-chi-bot

ti-chi-bot Bot commented Apr 10, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: fzzf678, wjhuang2016

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

@ti-chi-bot ti-chi-bot Bot added the lgtm label Apr 10, 2026
@fzzf678

fzzf678 commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

/retest

4 similar comments
@fzzf678

fzzf678 commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

/retest

Comment thread pkg/privilege/privileges/cache_test.go Outdated
Comment thread pkg/privilege/privileges/cache_test.go Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
pkg/privilege/privileges/cache_test.go (1)

191-193: Remove unnecessary flush privileges from this unit test.

p.LoadColumnsPrivTable(...) already reloads the source under test. Keeping flush privileges here adds global side effects and extra work without increasing assertion value.

Suggested minimal diff
  p = privileges.NewMySQLPrivilege()
  tk.MustExec("delete from columns_priv")
- tk.MustExec("flush privileges")
  tk.MustExec(`INSERT INTO mysql.columns_priv VALUES ("%", "db", "user", "table", "c1", "2017-01-04 16:33:42.235831", "Insert,Update")`)
  tk.MustExec(`INSERT INTO mysql.columns_priv VALUES ("%", "db", "user", "table", "c2", "2017-01-04 16:33:42.235831", "References")`)

As per coding guidelines "Keep test changes minimal and deterministic; avoid broad golden/testdata churn unless required."

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

In `@pkg/privilege/privileges/cache_test.go` around lines 191 - 193, Remove the
unnecessary global side-effect from the test by deleting the tk.MustExec("flush
privileges") call; the test already reloads data via p.LoadColumnsPrivTable(...)
so simply keep the delete and the INSERT into mysql.columns_priv and rely on
p.LoadColumnsPrivTable to refresh state instead of calling flush privileges.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@pkg/privilege/privileges/cache_test.go`:
- Around line 191-193: Remove the unnecessary global side-effect from the test
by deleting the tk.MustExec("flush privileges") call; the test already reloads
data via p.LoadColumnsPrivTable(...) so simply keep the delete and the INSERT
into mysql.columns_priv and rely on p.LoadColumnsPrivTable to refresh state
instead of calling flush privileges.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6c1e4387-5b1d-4172-9ba8-93f1179ec255

📥 Commits

Reviewing files that changed from the base of the PR and between 5141aa3 and 7371356.

📒 Files selected for processing (1)
  • pkg/privilege/privileges/cache_test.go

@fzzf678

fzzf678 commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

/retest

9 similar comments
@fzzf678

fzzf678 commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 17, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 17, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 17, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 17, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 18, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 18, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 18, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

/retest

3 similar comments
@fzzf678

fzzf678 commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 20, 2026

Copy link
Copy Markdown
Contributor

/retest

@fzzf678

fzzf678 commented Apr 20, 2026

Copy link
Copy Markdown
Contributor

/test unit-test

@tiprow

tiprow Bot commented Apr 20, 2026

Copy link
Copy Markdown

@fzzf678: 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 unit-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.

@ti-chi-bot ti-chi-bot Bot merged commit b6200ce into pingcap:master Apr 20, 2026
35 checks passed
@ti-chi-bot ti-chi-bot Bot deleted the cherry-pick-61677-to-master branch April 20, 2026 04:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved lgtm release-note-none Denotes a PR that doesn't merit a release note. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. type/cherry-pick-for-master

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants