Skip to content

fix(mysql): dedicated 8.4 ParametersDefinition rejecting 8.4-removed variables#3086

Draft
weicao wants to merge 4 commits into
mainfrom
helios/mysql-84-paramsdef
Draft

fix(mysql): dedicated 8.4 ParametersDefinition rejecting 8.4-removed variables#3086
weicao wants to merge 4 commits into
mainfrom
helios/mysql-84-paramsdef

Conversation

@weicao

@weicao weicao commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Fixes #3085.

Ports the enterprise paramsdef-84.yaml structure and extends it:

  • New mysql-8.4-pd bound to ^mysql(?:-mgr)?-8\.4-<chart>$; mysql-8.0-pd regex narrowed to 8.0 only.
  • The embedded 8.0 cue is unified with a #MysqlParameter patch that bottoms (_|_) all 8 variables removed in MySQL 8.4.0 (enterprise rejects only default_authentication_plugin; the review thread acknowledged the residual risk — this closes it) and admits authentication_policy.
  • The same 8 variables are filtered out of the 8.4 static/dynamic/immutable lists via a template-level list filter.
  • 8.0 cue expire_logs_days corrected to ?: int & >=0 & <=99 | *0 (real MySQL range; old entry carried binlog_expire_logs_seconds' default — the 5.7 cue was already correct). Field made optional, which the 8.4 bottom-override also requires.

Render-verified: helm template passes; mysql-8.4-pd lists contain none of the removed variables (the only near-match is binlog_transaction_dependency_history_size, which still exists in 8.4 and is intentionally kept); mysql-8.0-pd lists keep them.

Runtime validation before undraft: on 8.4 — reconfigure expire_logs_days must be REJECTED by schema, reconfigure binlog_expire_logs_seconds must succeed, pod restart stays healthy; on 8.0 — both still accepted; upgrade path from a cluster created before the split re-binds cleanly.

🤖 Generated with Claude Code

…variables

Port the apecloud-addons paramsdef-84 structure (shared 8.0 cue + a
#MysqlParameter unification patch) and extend the rejection from
default_authentication_plugin alone to all MySQL 8.4.0-removed system
variables; filter them out of the static/dynamic/immutable lists too.
Narrow paramsdef-80's componentDef regex to 8.0 only. Also correct the
8.0 cue entry for expire_logs_days to MySQL's real range 0-99 (default
0) instead of binlog_expire_logs_seconds' default.

Fixes #3085

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@codecov-commenter

codecov-commenter commented Jul 6, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 0.00%. Comparing base (35e0ded) to head (8f74a83).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@          Coverage Diff          @@
##            main   #3086   +/-   ##
=====================================
  Coverage   0.00%   0.00%           
=====================================
  Files        144     144           
  Lines      23013   23013           
=====================================
  Misses     23013   23013           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

wei and others added 3 commits July 7, 2026 17:34
The _|_ (CUE bottom) used to reject MySQL 8.4-removed variables cannot
be marshaled into an OpenAPI schema by KB 1.2.0-alpha.2, so mysql-8.4-pd
never became Available and 8.4 clusters could not provision at all - a
regression worse than the original shared-schema problem. Drop the
bottom override so the PD reuses the (range-corrected) 8.0 CUE and
becomes Available. The 8.4-removed variables remain filtered out of the
static/dynamic/immutable classification lists, and a user reconfigure of
them is rejected at runtime by update-parameter.sh fail-close on the
SET GLOBAL unknown-variable error. Strict PD schema-level rejection
(closing the open CUE struct) is deferred as a separate enhancement.

Refs #3085

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The appended #MysqlParameter{} block (added to declare authentication_policy
and, earlier, to bottom removed vars) re-declares the definition, which
closes the otherwise-open (...) shared struct. A closed #MysqlParameter is
then applied strictly to every ini section via [SectionName=_], so the
[client] section's rendered port="3306" (string) conflicts with the
schema's port?: int, failing 8.4 ComponentParameter rendering and blocking
8.4 provisioning. 8.0-pd never hit this because it has no such block. Reuse
the shared 8.0 cue verbatim: the open struct already accepts
authentication_policy, and removed-variable rejection stays at the runtime
fail-close layer plus classification-list filtering.

Refs #3085

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…mic to action)

Filtering the removed variables out of all classification lists left them
unclassified, so KB routed them to the config-file (static) path where they
landed in my.cnf and crash-looped 8.4. Keep the 8.0 classification instead:
the six DYNAMIC removed variables route to update-parameter.sh, which now
rejects them by name (fail-close before write). The two STATIC removed
variables take the file path with no action to intercept them - a documented
schema-only gap pending a KB forbidden-parameter mechanism.

Refs #3085

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

mysql: 8.4 shares the 8.0 parameter schema and accepts 8.4-removed variables (restart crash-loop path)

2 participants