Skip to content

mysql,sqlmodel: support table route in mysql sink#5006

Open
3AceShowHand wants to merge 7 commits intomasterfrom
table-route-pr6-mysql-sink
Open

mysql,sqlmodel: support table route in mysql sink#5006
3AceShowHand wants to merge 7 commits intomasterfrom
table-route-pr6-mysql-sink

Conversation

@3AceShowHand
Copy link
Copy Markdown
Collaborator

@3AceShowHand 3AceShowHand commented May 7, 2026

What problem does this PR solve?

Issue Number: close #xxx

What is changed and how it works?

Check List

Tests

  • Unit test
  • Integration test
  • Manual test (add detailed scripts or steps below)
  • No code

Questions

Will it cause performance regression or break compatibility?
Do you need to update user documentation, design documentation or monitoring documentation?

Release note

Please refer to [Release Notes Language Style Guide](https://pingcap.github.io/tidb-dev-guide/contribute-to-tidb/release-notes-style-guide.html) to write a quality release note.

If you don't think this PR needs a release note then fill it with `None`.

Summary by CodeRabbit

Release Notes

  • New Features

    • Added table routing support for MySQL sinks, enabling automatic schema and table name mapping during replication. Configured routing rules now redirect data from source tables to target tables with rewritten names for both DDL and DML operations.
  • Tests

    • Added integration tests validating table routing functionality across various DDL and DML operations.

@ti-chi-bot ti-chi-bot Bot added do-not-merge/needs-linked-issue release-note Denotes a PR that will be considered when it comes time to generate release notes. labels May 7, 2026
@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented May 7, 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 tenfyzhong 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

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 7, 2026

Review Change Stack

Warning

Rate limit exceeded

@3AceShowHand has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 49 minutes and 45 seconds before requesting another review.

To continue reviewing without waiting, purchase usage credits in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 6c71eecc-5686-4061-b5c1-baeb1cf2d83c

📥 Commits

Reviewing files that changed from the base of the PR and between 41025ce and 3a85d40.

📒 Files selected for processing (8)
  • downstreamadapter/routing/ddl_query_rewriter.go
  • downstreamadapter/routing/router_apply_test.go
  • downstreamadapter/routing/router_supported_ddl_test.go
  • pkg/sink/sqlmodel/multi_row_test.go
  • tests/integration_tests/table_route/conf/changefeed.toml
  • tests/integration_tests/table_route/conf/diff_config.toml
  • tests/integration_tests/table_route/data/test.sql
  • tests/integration_tests/table_route/run.sh
📝 Walkthrough

Walkthrough

This PR implements table routing for MySQL sink DML and DDL operations. DDL execution now uses target schema names for database switching, DML SQL builders use QuoteTargetString() for routed table identifiers, and DDL event processing correctly splits multi-table RENAME statements. Comprehensive unit tests verify routing behavior across MySQL single-row and multi-row builders, and a full integration test suite with changefeed configuration, SQL workload, and bash runner validates end-to-end routing.

Changes

Table Routing for MySQL Sink

Layer / File(s) Summary
DDL Schema Routing
pkg/sink/mysql/helper.go, pkg/sink/mysql/mysql_writer_ddl.go
needSwitchDB checks target schema name for emptiness; execDDL issues USE with target schema instead of source schema.
DDL Event Multi-Table Processing
pkg/common/event/ddl_event.go
GetEvents refactored to switch on ActionType; for ActionRenameTables, conditionally replaces single split query with per-table renames when multiple TableInfo entries exist via new splitRenameTablesQuery helper.
DDL Router Test Coverage
downstreamadapter/routing/router_supported_ddl_test.go, pkg/common/event/ddl_event_test.go
Added tests verifying routed DDL events preserve source fields, are deep-copied without mutation, and correctly map source/target names including for RENAME; removed obsolete routing tests from ddl_event_test.go.
DDL Execution Test
pkg/sink/mysql/mysql_writer_test.go
New test verifies execDDL executes routed single-table and RENAME DDLs with correct USE statements and routed query text via sqlmock expectations.
DML Single-Row SQL Quoting
pkg/sink/mysql/sql_builder.go, pkg/sink/mysql/sql_builder_test.go
buildDelete and buildActiveActiveUpsertSQL now quote targets via QuoteTargetString(); new test verifies routed targets in generated SQL.
DML Multi-Row SQL Quoting
pkg/sink/sqlmodel/multi_row.go, pkg/sink/sqlmodel/multi_row_test.go, pkg/sink/sqlmodel/multi_row_v1.go
GenInsertSQL, genDeleteSQLV2, genUpdateSQLV2, genDeleteSQLV1, and genUpdateSQLV1 now use QuoteTargetString(); genUpdateSQLV1 return type changed to []any; new test verifies routed targets across all strategies.
DML Row Change Base
pkg/sink/sqlmodel/row_change.go, pkg/sink/sqlmodel/row_change_test.go
TargetTableID, genDeleteSQL, and genUpdateSQL now use QuoteTargetString(); new test helper and test verify routed SQL generation.
DML Active-Active Test
pkg/sink/mysql/mysql_writer_dml_active_active_test.go
New test verifies buildActiveActiveUpsertSQL targets routed table names.
Integration Test Configuration
tests/integration_tests/table_route/conf/changefeed.toml, tests/integration_tests/table_route/conf/diff_config.toml, tests/integration_tests/table_route/README.md
Changefeed defines filter and dispatcher rules routing source_db.* to target_db with {table}_routed suffix; diff config maps source/target tables; README documents test scope and flow.
Integration Test Workload
tests/integration_tests/table_route/data/test.sql, tests/integration_tests/table_route/run.sh
SQL fixture exercises DML, column DDL, table creation/rename, views, partitioning, truncation, and drop scenarios; bash runner executes workload, starts CDC, loads SQL, verifies routed tables exist and source tables do not, checks diffs, and validates cleanup.
CI Test List
tests/integration_tests/run_light_it_in_ci.sh
MySQL light test group G07 now includes table_route test.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • pingcap/ticdc#4658: Introduces routing fields and methods (GetTargetSchemaName, GetTargetTableName, CloneWithRouting) that this PR uses throughout.
  • pingcap/ticdc#4270: Also modifies execDDL in mysql_writer_ddl.go; both PRs change DDL execution behavior within the same function.
  • pingcap/ticdc#4388: Both PRs add logic to parse and split multi-table RENAME TABLE statements for correct event mapping.

Suggested labels

lgtm, approved

Suggested reviewers

  • wk989898
  • lidezhu
  • hongyunyan

Poem

🐰 A rabbit hops through schema routes,
Where target_db replaces roots,
With QuoteTargetString so bright,
Each DML now targets right!
Renamings split, DDLs fly,
Table routing says goodbye! 🎉

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description contains only template placeholders with no concrete implementation details, problem statement, change explanation, test rationale, or release notes. Fill in all required template sections: provide the issue number, explain what problem is solved, detail the changes made, confirm which tests were added, answer compatibility questions, and include a proper release note.
Docstring Coverage ⚠️ Warning Docstring coverage is 12.90% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: adding support for table routing in MySQL sink.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch table-route-pr6-mysql-sink

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.

@ti-chi-bot ti-chi-bot Bot added the size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. label May 7, 2026
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist 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 Review

This pull request ensures that table routing is correctly applied to MySQL sinks for both DML and DDL operations. It updates the SQL generation logic across several files to use target schema and table names (via GetTargetSchemaName and QuoteTargetString) instead of source names. Additionally, it introduces a new integration test suite and several unit tests to verify that routed tables are correctly handled during replication. I have no feedback to provide as there were no review comments.

Copy link
Copy Markdown
Contributor

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

🤖 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/sink/sqlmodel/multi_row_test.go`:
- Around line 44-103: The test TestGenMultiRowSQLUsesRoutedTargetTable is
missing t.Parallel(); add t.Parallel() as the first statement in that function
so it runs concurrently with the other tests in multi_row_test.go, keeping test
behavior unchanged otherwise; locate the TestGenMultiRowSQLUsesRoutedTargetTable
function and insert the call at the top.

In `@tests/integration_tests/table_route/run.sh`:
- Around line 6-84: The script suffers from unquoted variable expansions which
can cause word-splitting/globbing issues; go through the run() function and
quote all shell variable expansions used in commands and args (e.g. "$WORK_DIR",
"$OUT_DIR", "$TEST_NAME", "$CUR", "$DOWN_TIDB_HOST", "$DOWN_TIDB_PORT",
"$UP_TIDB_HOST", "$UP_TIDB_PORT", "$CDC_BINARY", "$SINK_URI", "$KEYSPACE_NAME")
— update calls like rm -rf $WORK_DIR, mkdir -p $WORK_DIR, start_tidb_cluster
--workdir $WORK_DIR,
run_sql/run_sql_file/check_table_exists/check_table_not_exists/run_cdc_server/cdc_cli_changefeed
invocations and any literal path concatenations (e.g. $CUR/conf/changefeed.toml,
$CUR/data/prepare.sql) to use double-quoted expansions so arguments are passed
safely.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 13e6b16a-4f9e-4de3-943d-e295d7a16f94

📥 Commits

Reviewing files that changed from the base of the PR and between 29a8576 and 72dddae.

📒 Files selected for processing (17)
  • pkg/sink/mysql/helper.go
  • pkg/sink/mysql/mysql_writer_ddl.go
  • pkg/sink/mysql/mysql_writer_dml_active_active_test.go
  • pkg/sink/mysql/mysql_writer_test.go
  • pkg/sink/mysql/sql_builder.go
  • pkg/sink/mysql/sql_builder_test.go
  • pkg/sink/sqlmodel/multi_row.go
  • pkg/sink/sqlmodel/multi_row_test.go
  • pkg/sink/sqlmodel/multi_row_v1.go
  • pkg/sink/sqlmodel/row_change.go
  • pkg/sink/sqlmodel/row_change_test.go
  • tests/integration_tests/run_light_it_in_ci.sh
  • tests/integration_tests/table_route/README.md
  • tests/integration_tests/table_route/conf/changefeed.toml
  • tests/integration_tests/table_route/data/prepare.sql
  • tests/integration_tests/table_route/data/test.sql
  • tests/integration_tests/table_route/run.sh

Comment thread pkg/sink/sqlmodel/multi_row_test.go
Comment thread tests/integration_tests/table_route/run.sh Outdated
@3AceShowHand 3AceShowHand force-pushed the table-route-pr6-mysql-sink branch from 72dddae to 8729a9d Compare May 7, 2026 09:27
@ti-chi-bot ti-chi-bot Bot added size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. and removed size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels May 7, 2026
Copy link
Copy Markdown
Contributor

@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)
tests/integration_tests/table_route/run.sh (1)

6-50: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Quote variable expansions in command arguments to avoid word-splitting/globbing bugs.

Unquoted expansions are still present across the run path (source, path concatenations, host/port args, workdir args, trap/check_logs). This can break when values contain spaces or glob chars.

Suggested minimal hardening patch
-source $CUR/../_utils/test_prepare
-WORK_DIR=$OUT_DIR/$TEST_NAME
+source "$CUR/../_utils/test_prepare"
+WORK_DIR="$OUT_DIR/$TEST_NAME"
@@
-	rm -rf $WORK_DIR && mkdir -p $WORK_DIR
+	rm -rf "$WORK_DIR" && mkdir -p "$WORK_DIR"
@@
-	start_tidb_cluster --workdir $WORK_DIR
+	start_tidb_cluster --workdir "$WORK_DIR"
@@
-	run_cdc_server --workdir $WORK_DIR --binary $CDC_BINARY --cluster-id "$KEYSPACE_NAME"
+	run_cdc_server --workdir "$WORK_DIR" --binary "$CDC_BINARY" --cluster-id "$KEYSPACE_NAME"
@@
-	run_sql_file $CUR/data/test.sql ${UP_TIDB_HOST} ${UP_TIDB_PORT}
+	run_sql_file "$CUR/data/test.sql" "${UP_TIDB_HOST}" "${UP_TIDB_PORT}"
@@
-	check_table_exists target_db.finish_mark_routed ${DOWN_TIDB_HOST} ${DOWN_TIDB_PORT} 90
-	check_sync_diff $WORK_DIR $CUR/conf/diff_config.toml 120
+	check_table_exists target_db.finish_mark_routed "${DOWN_TIDB_HOST}" "${DOWN_TIDB_PORT}" 90
+	check_sync_diff "$WORK_DIR" "$CUR/conf/diff_config.toml" 120
@@
-	check_table_not_exists source_db.users ${DOWN_TIDB_HOST} ${DOWN_TIDB_PORT}
-	check_table_not_exists source_db.orders ${DOWN_TIDB_HOST} ${DOWN_TIDB_PORT}
-	check_table_not_exists target_db.temp_table_routed ${DOWN_TIDB_HOST} ${DOWN_TIDB_PORT}
-	check_table_not_exists target_db.multi_rename_a_routed ${DOWN_TIDB_HOST} ${DOWN_TIDB_PORT}
-	check_table_not_exists target_db.multi_rename_b_routed ${DOWN_TIDB_HOST} ${DOWN_TIDB_PORT}
-	check_table_not_exists target_db.to_be_dropped_routed ${DOWN_TIDB_HOST} ${DOWN_TIDB_PORT}
-	run_sql "SHOW CREATE VIEW target_db.user_order_view_routed" ${DOWN_TIDB_HOST} ${DOWN_TIDB_PORT}
+	check_table_not_exists source_db.users "${DOWN_TIDB_HOST}" "${DOWN_TIDB_PORT}"
+	check_table_not_exists source_db.orders "${DOWN_TIDB_HOST}" "${DOWN_TIDB_PORT}"
+	check_table_not_exists target_db.temp_table_routed "${DOWN_TIDB_HOST}" "${DOWN_TIDB_PORT}"
+	check_table_not_exists target_db.multi_rename_a_routed "${DOWN_TIDB_HOST}" "${DOWN_TIDB_PORT}"
+	check_table_not_exists target_db.multi_rename_b_routed "${DOWN_TIDB_HOST}" "${DOWN_TIDB_PORT}"
+	check_table_not_exists target_db.to_be_dropped_routed "${DOWN_TIDB_HOST}" "${DOWN_TIDB_PORT}"
+	run_sql "SHOW CREATE VIEW target_db.user_order_view_routed" "${DOWN_TIDB_HOST}" "${DOWN_TIDB_PORT}"
@@
-	check_table_not_exists target_db.transient_view_routed ${DOWN_TIDB_HOST} ${DOWN_TIDB_PORT}
+	check_table_not_exists target_db.transient_view_routed "${DOWN_TIDB_HOST}" "${DOWN_TIDB_PORT}"
@@
-	run_sql "DROP DATABASE source_db" ${UP_TIDB_HOST} ${UP_TIDB_PORT}
-	check_db_not_exists target_db ${DOWN_TIDB_HOST} ${DOWN_TIDB_PORT} 90
+	run_sql "DROP DATABASE source_db" "${UP_TIDB_HOST}" "${UP_TIDB_PORT}"
+	check_db_not_exists target_db "${DOWN_TIDB_HOST}" "${DOWN_TIDB_PORT}" 90
@@
-trap 'stop_test $WORK_DIR' EXIT
+trap 'stop_test "$WORK_DIR"' EXIT
@@
-check_logs $WORK_DIR
+check_logs "$WORK_DIR"
#!/bin/bash
# Verify remaining unquoted variable expansions in this script (read-only).
# Expected result after fix: no SC2086 findings for this file.
shellcheck -x tests/integration_tests/table_route/run.sh
🤖 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 `@tests/integration_tests/table_route/run.sh` around lines 6 - 50, The script
leaves many unquoted variable expansions which can cause word-splitting/globbing
bugs; update all command arguments and path concatenations to quote variables
(e.g., "$CUR", "$OUT_DIR", "$TEST_NAME", "$WORK_DIR", "$CDC_BINARY",
"$SINK_TYPE", "$KEYSPACE_NAME", "$DOWN_TIDB_HOST", "$DOWN_TIDB_PORT",
"$UP_TIDB_HOST", "$UP_TIDB_PORT", "$SINK_URI") used in run(), the trap/stop_test
call, start_tidb_cluster, run_cdc_server, cdc_cli_changefeed create,
run_sql_file, run_sql, check_* and check_logs so every invocation uses quoted
expansions like "$VAR" to avoid SC2086-style issues.
🤖 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.

Duplicate comments:
In `@tests/integration_tests/table_route/run.sh`:
- Around line 6-50: The script leaves many unquoted variable expansions which
can cause word-splitting/globbing bugs; update all command arguments and path
concatenations to quote variables (e.g., "$CUR", "$OUT_DIR", "$TEST_NAME",
"$WORK_DIR", "$CDC_BINARY", "$SINK_TYPE", "$KEYSPACE_NAME", "$DOWN_TIDB_HOST",
"$DOWN_TIDB_PORT", "$UP_TIDB_HOST", "$UP_TIDB_PORT", "$SINK_URI") used in run(),
the trap/stop_test call, start_tidb_cluster, run_cdc_server, cdc_cli_changefeed
create, run_sql_file, run_sql, check_* and check_logs so every invocation uses
quoted expansions like "$VAR" to avoid SC2086-style issues.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e6191306-fa31-4e36-ab31-2c57e90b2dfe

📥 Commits

Reviewing files that changed from the base of the PR and between 72dddae and 41025ce.

📒 Files selected for processing (20)
  • downstreamadapter/routing/router_supported_ddl_test.go
  • pkg/common/event/ddl_event.go
  • pkg/common/event/ddl_event_test.go
  • pkg/sink/mysql/helper.go
  • pkg/sink/mysql/mysql_writer_ddl.go
  • pkg/sink/mysql/mysql_writer_dml_active_active_test.go
  • pkg/sink/mysql/mysql_writer_test.go
  • pkg/sink/mysql/sql_builder.go
  • pkg/sink/mysql/sql_builder_test.go
  • pkg/sink/sqlmodel/multi_row.go
  • pkg/sink/sqlmodel/multi_row_test.go
  • pkg/sink/sqlmodel/multi_row_v1.go
  • pkg/sink/sqlmodel/row_change.go
  • pkg/sink/sqlmodel/row_change_test.go
  • tests/integration_tests/run_light_it_in_ci.sh
  • tests/integration_tests/table_route/README.md
  • tests/integration_tests/table_route/conf/changefeed.toml
  • tests/integration_tests/table_route/conf/diff_config.toml
  • tests/integration_tests/table_route/data/test.sql
  • tests/integration_tests/table_route/run.sh
💤 Files with no reviewable changes (1)
  • pkg/common/event/ddl_event_test.go
✅ Files skipped from review due to trivial changes (2)
  • tests/integration_tests/table_route/conf/diff_config.toml
  • tests/integration_tests/table_route/conf/changefeed.toml
🚧 Files skipped from review as they are similar to previous changes (10)
  • pkg/sink/mysql/mysql_writer_ddl.go
  • tests/integration_tests/run_light_it_in_ci.sh
  • pkg/sink/mysql/helper.go
  • tests/integration_tests/table_route/README.md
  • pkg/sink/mysql/sql_builder_test.go
  • pkg/sink/mysql/mysql_writer_dml_active_active_test.go
  • tests/integration_tests/table_route/data/test.sql
  • pkg/sink/mysql/mysql_writer_test.go
  • pkg/sink/sqlmodel/multi_row_test.go
  • pkg/sink/sqlmodel/row_change_test.go

@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/test all

@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/test all

@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/test all

@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented May 7, 2026

[FORMAT CHECKER NOTIFICATION]

Notice: To remove the do-not-merge/needs-linked-issue label, please provide the linked issue number on one line in the PR body, for example: Issue Number: close #123 or Issue Number: ref #456.

📖 For more info, you can check the "Contribute Code" section in the development guide.

@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/test all

@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/retest

@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented May 8, 2026

@3AceShowHand: 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-cdc-mysql-integration-light 3a85d40 link true /test pull-cdc-mysql-integration-light

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

do-not-merge/needs-linked-issue release-note Denotes a PR that will be considered when it comes time to generate release notes. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant