Skip to content

br, pkg/objstore: add operation metadata to external storage locks (#69231) - #69388

Merged
ti-chi-bot[bot] merged 3 commits into
pingcap:release-8.5from
ti-chi-bot:cherry-pick-69231-to-release-8.5
Jun 26, 2026
Merged

ti-chi-bot[bot] merged 3 commits into
pingcap:release-8.5from
ti-chi-bot:cherry-pick-69231-to-release-8.5

Conversation

@ti-chi-bot

@ti-chi-bot ti-chi-bot commented Jun 23, 2026 •

Copy link
Copy Markdown
Member

This is an automated cherry-pick of #69231

What problem does this PR solve?

Issue Number: ref #67819

Problem Summary:

BR external-storage lock files are permanent until removed. When a BR process crashes or gets stuck, operators need enough metadata in the lock file and conflict logs to identify which BR execution created or is blocked by a lock.

What changed and how does it work?

This PR adds operation-aware metadata for BR-created external-storage locks:

  • Resolve release-8.5 cherry-pick conflicts by adapting the master-side pkg/objstore changes to the release branch's br/pkg/storage package layout.
  • Add structured lock metadata support in br/pkg/storage, including operation_id, operation_started_at, restore_id, and resource_type.
  • Add br/pkg/operation to generate one command-scoped operation ID, log it at command start, attach restore ID when available, and build validated lock metadata.
  • Add operation-aware lock wrappers for BR code so production lock creators pass operation context and resource type explicitly.
  • Propagate operation context through log restore, stream truncate, migration read/write/append locks, log client migration reads, PITR collector append migration, and operator migrate-to.
  • Enrich lock conflict errors and retry/direct conflict logs with local operation metadata and remote blocker metadata.

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.

Manual test commands:

env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/operation
env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/storage -run 'Test(MakeLockMeta|LockMetaOldJSONCompatibility|LockMetaStringIncludesOwnerFields|ErrLockedErrorLimitsBlockerOutput|ConflictLockReportsRemotePathAndMeta|WriteLockConflictReportsReadLockBlocker|WriteLockConflictReportsMultipleReadLockBlockers|WriteLockConflictSamplesReadLockBlockers|LockWithRetryCarriesLocalAndRemoteMetadata|LockConflictLogFieldsCarriesLocalAndRemoteMetadata|TryLockRemoteWritePreservesOriginalErrorWhenEnrichingErrLocked)$' -count=1
env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/stream -run 'Test(MigrationLockOperationMetadata|MigrationExtDryRunKeepsOperationContext|MergeAndMigrateToMissingOperationContextReturnsError|MergeAndMigrateTo|AppendingMigs)$' -count=1
env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/restore/log_client -run 'TestGetLockedMigrationsWritesOperationMetadata' -count=1
env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/restore/snap_client -run 'TestPiTRCollectorPrepareMigWritesOperationMetadata' -count=1
env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/task/operator
env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/task -run 'TestEnsureOperationContext' -count=1
env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go build ./br/pkg/task ./br/pkg/task/operator ./br/pkg/restore/log_client ./br/pkg/restore/snap_client
bash -n br/tests/br_parallel_restore/run.sh
make bazel_prepare
make lint
git diff --check

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

  • New Features

    • Added operation-scoped metadata propagation for restore/stream flows, including operation_started_at and restore-id hints on migration/lock objects.
    • Enhanced lock records with explicit owner ID and lock type for clearer traceability.
  • Refactor

    • Updated locking to use structured lock metadata, improving lock-conflict reporting and enriching lock-related errors and retry logging.
  • Tests

    • Expanded coverage for operation context creation, hint handling, and validation of lock metadata written to storage; updated existing locking/migration tests to reflect new structured metadata behavior.
  • Chores

    • Updated build targets and dependencies to include the new operation component.

Signed-off-by: ti-chi-bot <ti-community-prow-bot@tidb.io>
@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/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. type/cherry-pick-for-release-8.5 This PR is cherry-picked to release-8.5 from a source PR. labels Jun 23, 2026
@ti-chi-bot

Copy link
Copy Markdown
Member Author

@RidRisR 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 commented Jun 23, 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 Jun 23, 2026 •

Copy link
Copy Markdown

Caution

Review failed

An error occurred during the review process. Please try again later.

✨ 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.

@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: 14

🤖 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 `@br/pkg/operation/BUILD.bazel`:
- Line 9: The dependency declared as `//pkg/objstore` on line 9 of the
BUILD.bazel file is unresolved and prevents the build from succeeding. Since the
PR code resolves lock metadata types from the BR storage package, replace the
`//pkg/objstore` dependency with the correct Bazel target path that points to
the BR storage package containing the lock metadata types needed by this
operation package.

In `@br/pkg/operation/context.go`:
- Line 27: The import statement in the context.go file imports from an
unavailable package path. Replace the broken import
`"github.com/pingcap/tidb/pkg/objstore"` with the correct import path where the
lock metadata types are actually located in this branch. Ensure the corrected
import path resolves without compilation errors.

In `@br/pkg/storage/BUILD.bazel`:
- Around line 130-134: Resolve the merge conflict in the BUILD.bazel file's deps
list by removing the merge conflict markers (<<<<<<, =======, and >>>>>>>) and
keeping the necessary dependencies. The conflict shows two different
dependencies: the gomock dependency from HEAD and the zap dependency from the
merged branch. Determine which dependencies are actually needed for this build
target and keep both if they serve different purposes, or keep only the required
one. Ensure the final deps list in the file is clean without any merge markers.

In `@br/pkg/storage/locking_test.go`:
- Around line 80-84: The test file contains unresolved merge conflict markers
that prevent compilation. Resolve all merge conflicts in the locking_test.go
file by replacing the conflicted sections (marked with <<<<<<<, =======,
>>>>>>>) with the correct merged code. For the TryLockRemote function calls, use
the newer API signature from the incoming branch that uses
objstore.TryLockRemote with objstore.LockMetaInput{Hint: ...} instead of the old
storage.TryLockRemote signature. Apply this same pattern to all conflicted
sections at the specified line ranges (80-84, 95-103, 114-135, 172-185, 210-214)
to ensure the entire file reflects the updated lock metadata API.

In `@br/pkg/storage/locking.go`:
- Around line 136-142: The locking.go file contains unresolved merge conflicts
across multiple sections (lines 136-142, 402-454, 531-549, 584-689) with
conflict markers that prevent the file from being parsed and compiled. Locate
and resolve each merge conflict by reviewing the changes between the HEAD
version and the incoming branch (commit 807326b), which adds operation metadata
to external storage locks. For each conflict involving changes like the WalkDir
method signature, WalkOption imports (switching to storeapi.WalkOption), and the
introduction of blockers-related variables, choose the appropriate code path
(typically the incoming branch with the new lock-metadata behavior) and remove
all conflict markers (<<<<<<< HEAD, =======, >>>>>). Ensure the final code is
syntactically correct with consistent method signatures and imports throughout.

In `@br/pkg/stream/BUILD.bazel`:
- Around line 86-90: A cherry-pick conflict exists in the stream_test target's
deps list in the BUILD.bazel file, with merge conflict markers (<<<<<<, =======,
>>>>>>>) that are invalid Bazel syntax. Remove all three conflict marker lines
and replace them with both required dependencies: include both
"//br/pkg/operation" and "//br/pkg/storage" in the deps list, as both are needed
by the test files (stream_metas_test.go, search_test.go, and
stream_misc_test.go). Ensure the dependencies are properly formatted as separate
entries in the deps array.

In `@br/pkg/stream/stream_metas_test.go`:
- Around line 27-31: The import section in the test file contains unresolved
merge conflict markers that prevent compilation. Remove the conflict markers
(<<<<<<< HEAD, =======, and >>>>>>> 807326b) and keep both import statements:
include both github.com/pingcap/tidb/br/pkg/storage and
github.com/pingcap/tidb/br/pkg/operation as separate import statements in the
imports block, since both packages are required by the test code.
- Line 2860: The assertion on mg.Warnings[0] uses require.Error incorrectly; the
string argument is treated as the test failure message, not as a check for
message content. Replace require.Error with require.ErrorContains to properly
verify that the warning message contains "this disk remembers nothing". The
correct usage of require.ErrorContains will validate both that mg.Warnings[0] is
a non-nil error and that its message contains the expected string.

In `@br/pkg/stream/stream_metas.go`:
- Around line 31-36: Resolve the Go merge conflict markers present throughout
the file by retaining both the storage import and the new operation and
backupmetas imports from the conflict sections. Locate the lockForAppend
function and update the error-path return statements that currently return
storage.RemoteLock{} to instead return objstore.RemoteLock{}, ensuring all
objstore types are properly imported and that the return type consistently uses
objstore.RemoteLock across the error paths in the function.

In `@br/pkg/task/BUILD.bazel`:
- Around line 135-139: The BUILD file contains unresolved merge conflict markers
around the deps list in the task_test target. Remove the conflict markers (the
lines starting with `<<<<<<<`, `=======`, and `>>>>>>>`), and keep both sets of
dependencies by retaining the existing deps from HEAD along with the newly added
deps for `//br/pkg/operation` and `//br/pkg/restore/log_client` from the
incoming commit. The reconciled deps list should include all dependencies
without any conflict markers.

In `@br/pkg/task/common_test.go`:
- Around line 14-20: The import block in the common_test.go file contains
unresolved merge conflict markers (<<<<<<< HEAD, =======, >>>>>>>). Remove all
conflict markers and consolidate the imports from both branches by keeping all
four import paths (the storage and utils imports from HEAD, plus the gc and
operation imports from the merged branch) in the proper import statement block.
Ensure the final import block includes all necessary packages without any merge
markers remaining.

In `@br/pkg/task/common.go`:
- Around line 30-34: Resolve the merge conflict in the import block of the
common.go file by removing the conflict markers (<<<<<<< HEAD, =======, and
>>>>>>> 807326b066f). Determine whether both the storage and operation imports
are needed for the code to function correctly, then keep the appropriate import
statement(s). If both imports are required by the code in this file, include
both import lines in the final version; if only one is needed, keep that single
import line.

In `@br/pkg/task/operator/migrate_to.go`:
- Around line 10-14: The file contains unresolved merge conflict markers
(<<<<<<< HEAD, =======, >>>>>>> markers) in three locations that must be
resolved before the code can compile. Examine the imports at lines 10-14, 60-65,
and 94-103 to determine which imports are actually required by the code in the
file. For each conflicting import, keep only the necessary import statements and
remove all merge conflict markers and the competing alternatives. If both the
storage and operation imports are needed, include both without conflict markers.

In `@br/pkg/task/stream.go`:
- Around line 1122-1127: Remove the merge conflict markers from the truncate
lock acquisition code around the storage lock operation. The conflict shows an
old approach using storage.TryLockRemote versus a new approach using
cfg.OperationContext.LockMeta with operation.LockResourceLogTruncateExclusive.
Based on the commit message indicating operation metadata was added to external
storage locks, keep the newer version that assigns to truncateLockMeta and calls
cfg.OperationContext.LockMeta, and remove all conflict markers (the <<<<<<<<,
======, and >>>>>>>> lines) so the code is syntactically valid.
🪄 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: d64daf96-ce57-42e3-83e2-69d01c9ff24d

📥 Commits

Reviewing files that changed from the base of the PR and between 3733e2a and a11996d.

📒 Files selected for processing (23)
  • br/pkg/operation/BUILD.bazel
  • br/pkg/operation/context.go
  • br/pkg/operation/context_test.go
  • br/pkg/restore/log_client/BUILD.bazel
  • br/pkg/restore/log_client/client.go
  • br/pkg/restore/log_client/client_test.go
  • br/pkg/restore/snap_client/BUILD.bazel
  • br/pkg/restore/snap_client/pitr_collector.go
  • br/pkg/restore/snap_client/pitr_collector_test.go
  • br/pkg/storage/BUILD.bazel
  • br/pkg/storage/locking.go
  • br/pkg/storage/locking_test.go
  • br/pkg/storage/s3_test.go
  • br/pkg/stream/BUILD.bazel
  • br/pkg/stream/stream_metas.go
  • br/pkg/stream/stream_metas_test.go
  • br/pkg/task/BUILD.bazel
  • br/pkg/task/common.go
  • br/pkg/task/common_test.go
  • br/pkg/task/operator/BUILD.bazel
  • br/pkg/task/operator/migrate_to.go
  • br/pkg/task/restore.go
  • br/pkg/task/stream.go

Comment thread br/pkg/operation/BUILD.bazel Outdated
Comment thread br/pkg/operation/context.go Outdated
Comment thread br/pkg/storage/BUILD.bazel Outdated
Comment thread br/pkg/storage/locking_test.go Outdated
Comment thread br/pkg/storage/locking.go Outdated
Comment thread br/pkg/task/BUILD.bazel Outdated
Comment on lines +135 to +139
<<<<<<< HEAD
=======
"//br/pkg/operation",
"//br/pkg/restore/log_client",
>>>>>>> 807326b066f (br, pkg/objstore: add operation metadata to external storage locks (#69231))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🔴 Critical | ⚡ Quick win

Resolve merge-conflict markers in task_test deps.

These conflict markers make the BUILD file invalid, so Bazel parsing/build is blocked until they are removed and the deps list is reconciled.

🤖 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 `@br/pkg/task/BUILD.bazel` around lines 135 - 139, The BUILD file contains
unresolved merge conflict markers around the deps list in the task_test target.
Remove the conflict markers (the lines starting with `<<<<<<<`, `=======`, and
`>>>>>>>`), and keep both sets of dependencies by retaining the existing deps
from HEAD along with the newly added deps for `//br/pkg/operation` and
`//br/pkg/restore/log_client` from the incoming commit. The reconciled deps list
should include all dependencies without any conflict markers.

Comment thread br/pkg/task/common_test.go Outdated
Comment on lines +14 to +20
<<<<<<< HEAD
"github.com/pingcap/tidb/br/pkg/storage"
"github.com/pingcap/tidb/br/pkg/utils"
=======
"github.com/pingcap/tidb/br/pkg/gc"
"github.com/pingcap/tidb/br/pkg/operation"
>>>>>>> 807326b066f (br, pkg/objstore: add operation metadata to external storage locks (#69231))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🔴 Critical | ⚡ Quick win

Resolve merge-conflict markers in the test import block.

The file cannot compile with unresolved <<<<<<< / ======= / >>>>>>> markers.

🤖 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 `@br/pkg/task/common_test.go` around lines 14 - 20, The import block in the
common_test.go file contains unresolved merge conflict markers (<<<<<<< HEAD,
=======, >>>>>>>). Remove all conflict markers and consolidate the imports from
both branches by keeping all four import paths (the storage and utils imports
from HEAD, plus the gc and operation imports from the merged branch) in the
proper import statement block. Ensure the final import block includes all
necessary packages without any merge markers remaining.

Comment thread br/pkg/task/common.go Outdated
Comment thread br/pkg/task/operator/migrate_to.go Outdated
Comment thread br/pkg/task/stream.go Outdated
@RidRisR

RidRisR commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

/unhold

Resolved the release-8.5 cherry-pick conflicts and pushed commit 5f64a19c3f.

Summary:

  • Adapted the master-side pkg/objstore lock metadata changes to release-8.5's br/pkg/storage package layout.
  • Removed committed conflict markers from storage, stream, task, and Bazel files.
  • Kept operation metadata propagation for log restore, stream truncate, migration locks, PITR collector, and operator migrate-to.

Validation:

  • env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/operation
  • env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/storage -run 'Test(MakeLockMeta|LockMetaOldJSONCompatibility|LockMetaStringIncludesOwnerFields|ErrLockedErrorLimitsBlockerOutput|ConflictLockReportsRemotePathAndMeta|WriteLockConflictReportsReadLockBlocker|WriteLockConflictReportsMultipleReadLockBlockers|WriteLockConflictSamplesReadLockBlockers|LockWithRetryCarriesLocalAndRemoteMetadata|LockConflictLogFieldsCarriesLocalAndRemoteMetadata|TryLockRemoteWritePreservesOriginalErrorWhenEnrichingErrLocked)$' -count=1
  • env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/stream -run 'Test(MigrationLockOperationMetadata|MigrationExtDryRunKeepsOperationContext|MergeAndMigrateToMissingOperationContextReturnsError|MergeAndMigrateTo|AppendingMigs)$' -count=1
  • env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/restore/log_client -run 'TestGetLockedMigrationsWritesOperationMetadata' -count=1
  • env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/restore/snap_client -run 'TestPiTRCollectorPrepareMigWritesOperationMetadata' -count=1
  • env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/task/operator
  • env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go test ./br/pkg/task -run 'TestEnsureOperationContext' -count=1
  • env GOCACHE=/tmp/tidb-gocache GOMODCACHE=/tmp/tidb-gomodcache go build ./br/pkg/task ./br/pkg/task/operator ./br/pkg/restore/log_client ./br/pkg/restore/snap_client
  • make bazel_prepare
  • make lint
  • git diff --check

@ti-chi-bot ti-chi-bot Bot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jun 24, 2026
@codecov

codecov Bot commented Jun 24, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 76.10994% with 113 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (release-8.5@3733e2a). Learn more about missing BASE report.

Additional details and impacted files
@@               Coverage Diff                @@
##             release-8.5     #69388   +/-   ##
================================================
  Coverage               ?   55.6405%           
================================================
  Files                  ?       1849           
  Lines                  ?     666243           
  Branches               ?          0           
================================================
  Hits                   ?     370701           
  Misses                 ?     267964           
  Partials               ?      27578           
Flag Coverage Δ
integration 39.1238% <32.5581%> (?)
unit 65.1584% <71.2473%> (?)

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

Components Coverage Δ
dumpling 55.1998% <0.0000%> (?)
parser ∅ <0.0000%> (?)
br 63.1066% <0.0000%> (?)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@ti-chi-bot ti-chi-bot Bot added approved needs-1-more-lgtm Indicates a PR needs 1 more LGTM. labels Jun 26, 2026
@ti-chi-bot

ti-chi-bot Bot commented Jun 26, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: Leavrth, YuJuncen

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 lgtm and removed needs-1-more-lgtm Indicates a PR needs 1 more LGTM. labels Jun 26, 2026
@ti-chi-bot

ti-chi-bot Bot commented Jun 26, 2026

Copy link
Copy Markdown

[LGTM Timeline notifier]

Timeline:

  • 2026-06-26 04:20:14.306928076 +0000 UTC m=+266897.970153599: ☑️ agreed by YuJuncen.
  • 2026-06-26 04:21:57.231814937 +0000 UTC m=+267000.895040450: ☑️ agreed by Leavrth.

@RidRisR

RidRisR commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

/retest

1 similar comment
@RidRisR

RidRisR commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

/retest

@ti-chi-bot ti-chi-bot Bot added cherry-pick-approved Cherry pick PR approved by release team. and removed do-not-merge/cherry-pick-not-approved labels Jun 26, 2026
@ti-chi-bot
ti-chi-bot Bot merged commit df2282c into pingcap:release-8.5 Jun 26, 2026
28 of 48 checks passed
@ti-chi-bot
ti-chi-bot Bot deleted the cherry-pick-69231-to-release-8.5 branch June 26, 2026 08:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved cherry-pick-approved Cherry pick PR approved by release team. lgtm release-note-none Denotes a PR that doesn't merit a release note. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. type/cherry-pick-for-release-8.5 This PR is cherry-picked to release-8.5 from a source PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants