Skip to content

v2.8.41#903

Merged
jmrenouard merged 27 commits into
major:masterfrom
jmrenouard:master
May 17, 2026
Merged

v2.8.41#903
jmrenouard merged 27 commits into
major:masterfrom
jmrenouard:master

Conversation

@jmrenouard
Copy link
Copy Markdown
Collaborator

@jmrenouard jmrenouard commented May 17, 2026

Release Notes - v2.8.41

Date: 2026-05-17

📝 Executive Summary

2.8.41 2026-05-17

- chore: automated project maintenance and cleanup (extracted `RULES.md`, `MEMORY_DB.md`, `TESTS.md`).
- feat: enhance --forcemem and --forceswap to support human-readable memory units (B, K, M, G, T, P).
- feat: implement idiomatic Perl Boolean practices across the project (#34).
- feat: add recommendation for `table_open_cache_instances` based on CPU cores (#480).
- feat: improve syslog and systemd journal detection for error logs (#440).
- feat: initialize `$mysqllogin` to avoid uninitialized value warnings (#490).
- fix: filter MySQL CLI password warning from execute_system_command output.
- fix: prevent division by zero crash in percentage() with non-numeric values.
- fix: resolve SQL execution failure (return code 256) in MySQL 9.x containers by updating batch execution flags.
- fix: Restore compatibility with older Perl versions (by @jasongill).
- fix: wrap template loading in `get_template_model()` to avoid `uninitialized value` warnings during `require`.
- fix: allow `--updateversion` to work on hosts without `mysql`/`mariadb` installed (#36).
- fix: skip local SSL certificate warnings if they are in an inaccessible `datadir` (#33).
- fix: correct false positives in `check_removed_innodb_variables` by distinguishing real server variables from internal ones (#32).
- fix: improve join_buffer_size recommendation formatting in Variables to Adjust (#881).
- fix: suppress MySQL client warning regarding 'DISABLED' boolean value for SSL (#887).
- fix: correctly handle `--defaults-file` and `--defaults-extra-file` without dropping options (#605).
- fix: restore Debian maintenance account automatic login by using idiomatic boolean checks (#896).
- fix: include `tmp_table_size` in per-thread memory calculation for better accuracy (#864).
- fix: add retry mechanism for initial `SELECT VERSION()` query to improve connection resilience (#782).
- fix: prevent `AUTO_INCREMENT` capacity false positives for empty tables (#37).
- fix: refactor InnoDB Redo Log Capacity logic to be workload-based and avoid false positives (#714, #737, #777).
- fix: add guards against division by zero in calculations for improved stability (#435).
- fix: add truthiness guards to `mysql_innodb` and `mysql_stats` subroutines.
- fix: improve `which` logic for better container/minimal environment support.
- fix: enhance login failure reporting with detailed output.
- fix: handle Plesk Obsidian 18.0.76.5+ removing --show-password (#42).
- test: add validation tests for auth, missing args, and formatting.
- ci: enhance Quality Gate to strictly enforce zero-warning policy on GitHub Actions tests.
- ci: implement dynamic CI test environment detection by wrapping configuration extraction.
- ci: refactor GitHub Actions release and prerelease workflows to support dynamic versions and checksum generation.
- ci: refine audit_logs.pl to prevent false positive warnings on successful output.
- ci: migrate maintenance script to GitHub Actions.
- refactor: update CLI metadata to use `undef` as default for string/path options.
- refactor: replace non-idiomatic `eq '0'`, `ne 0`, etc., with standard truthiness checks.
- refactor: replace "master"/"slave" terminology with "source"/"replica" for cultural sensitivity (#888).
- chore(deps): update docker/setup-buildx-action action to v4.
- chore(deps): update docker/build-push-action action to v7.
- chore(deps): update docker/login-action action to v4.
- chore(deps): update softprops/action-gh-release action to v3.

📈 Diagnostic Growth Indicators

Metric Current Progress Status
Total Indicators 12 0 🛡️
Efficiency Checks 0 0 🛡️
Risk Detections 2 0 🛡️
Information Points 10 0 🛡️

🛠️ Internal Commit History

  • docs: consolidate governance agents and update release notes for v2.8.41 (9e1e8f8)
  • ci: refine audit_logs.pl to prevent false positive warnings on successful output (cf49345)
  • fix: resolve SQL execution failure in MySQL 9.x containers (b0f71de)
  • style: tidy mysqltuner.pl (f8defd5)
  • test: add validation tests for auth, missing args, and formatting (bd10c4b)
  • feat: enhance --forcemem and --forceswap to support human-readable memory units (b357f7e)
  • fix: handle Plesk Obsidian 18.0.76.5+ removing --show-password (If/Else uses uninitialized value when InnoDB not enabled. #42) (632a4f9)
  • feat: finalize release 2.8.41 (abdcb0e)
  • ci: fix preflight scripts for changelog header and commitlint refname ambiguity (dd323a4)
  • feat: release 2.8.41 (e95c3e9)
  • style: tidy mysqltuner.pl (745c909)
  • ci: refactor Github release definitions with pre-releases and deliverables support (1da1bb2)
  • ci: enforce zero-warning policy and dynamic test env (80788de)
  • feat: release 2.8.41 final stabilization (c337213)
  • feat: release 2.8.41 final polish (a230c55)
  • feat: release 2.8.41 final polish (14e3a31)
  • feat: release 2.8.41 (b4a13e6)

⚙️ Technical Evolutions

  • MySQL 9.x Container Fix: Resolved SQL execution failures (return code 256) in MySQL 9.x containers by updating batch execution flags.
  • Audit Log Refinement: Prevented false positive warnings in audit_logs.pl when output contains successful [OK] markers.
  • Test Coverage: Added validation tests for authentication, missing arguments, and formatting edge cases.
  • Upstream Sync: Rebased on major/MySQLTuner-perl:master to integrate latest dependency updates (commitlint v21, actions/checkout v6, non-major deps v20.5.3).

✅ Laboratory Verification Results

  • Automated TDD suite passed.
  • Multi-DB version laboratory execution validated.
  • Performance indicator delta analysis completed.

Summary by CodeRabbit

  • New Features

    • Added support for human-readable size units (G, M, K, B) in --forcemem and --forceswap options
    • Enhanced feature flags including cloud infrastructure detection and health score calculations
    • Improved MySQL 9.x compatibility and batch execution handling
  • Bug Fixes

    • Fixed division-by-zero edge cases in calculations
    • Strengthened undefined value handling across reporting functions
    • Refined replication status detection and terminology
    • Enhanced InnoDB redo log capacity recommendations with workload-based calculations
  • Documentation

    • Updated replication terminology (replica/source) for modern MySQL/MariaDB versions
    • Clarified CLI option documentation with unit examples

Review Change Stack

jmrenouard and others added 27 commits May 17, 2026 08:13
Add initial Dependabot configuration for version updates.
- feat: implement idiomatic Perl Boolean practices (#34)
- refactor: update CLI metadata defaults to undef for strings
- refactor: replace non-idiomatic 0/empty checks with truthiness
- refactor: use source/replica terminology for cultural sensitivity (major#888)
- fix: allow --updateversion without mysql/mariadb installed (#36)
- fix: skip SSL cert warnings if in inaccessible datadir (#33)
- fix: correct false positives in check_removed_innodb_variables (#32)
- fix: improve join_buffer_size recommendation formatting (major#881)
- fix: suppress MySQL client 'DISABLED' boolean warning for SSL (major#887)
- fix: wrap template loading to avoid uninitialized warnings
- fix: Restore compatibility with older Perl versions
- docs: update README.md, INTERNALS.md, and Changelog
- test: update and add unit tests (265 tests passed)
- chore(deps): update docker and github actions
- fix: include tmp_table_size in per-thread memory calculation (major#864)
- fix: add retry for initial connection check (major#782)
- fix: improve check_removed_innodb_variables accuracy (#32)
- fix: correctly handle --defaults-file without dropping options (major#605)
- fix: restore Debian maintenance account automatic login (major#896)
- chore: automated project maintenance and cleanup
- ci: migrate maintenance script to GitHub Actions
- test: update unit tests for all fixes (267 tests passed)
- fix: workload-based InnoDB Redo Log Capacity for MySQL >= 8.0.30 (major#714, major#737, major#777)
- fix: guards against division by zero in calculations() (major#435)
- feat: table_open_cache_instances recommendation based on CPU cores (major#480)
- fix: initialize $mysqllogin to avoid uninitialized value warnings (major#490)
- docs: update PERLDOC and MEMORY_DB.md
- test: add/update unit tests for v2.8.41 features
- ci: remediate CodeQL workflow permission alerts (major#887)
- fix: eliminate multiple uninitialized value warnings in various scenarios
- fix: improve 'which' logic for better container and minimal environment support
- fix: enhance login failure reporting with detailed output
- test: update unit tests to avoid false positive warnings
- docs: final update to release notes and Changelog
…ality gates

- Add // 0 guards for Innodb_buffer_pool_reads, Innodb_log_writes etc.
- Tighten CI quality gate grep to 'Use of uninitialized value' only
- Remove zero-warning gate from unit_tests (mock tests inherently produce warnings)
…values

- Add numeric validation regex to guard against non-numeric divisor
- Preserve legacy behavior: zero total returns 100.00 for idle servers
- Add test coverage for non-numeric and undef inputs
@jmrenouard jmrenouard self-assigned this May 17, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 17, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b3c31a15-fb78-42dd-97b6-0a37229b76f5

📥 Commits

Reviewing files that changed from the base of the PR and between d5e54eb and f1e080a.

⛔ Files ignored due to path filters (1)
  • vulnerabilities.csv is excluded by !**/*.csv
📒 Files selected for processing (89)
  • .agent/README.md
  • .agent/rules/00_constitution.md
  • .agent/rules/03_execution_rules.md
  • .agent/rules/04_best_practices.md
  • .agent/rules/05_memory_protocol.md
  • .agent/rules/remembers.md
  • .agent/workflows/git-flow.md
  • .agent/workflows/release-manager.md
  • .agent/workflows/release-preflight.md
  • .github/dependabot.yml
  • .github/workflows/docker_publish.yml
  • .github/workflows/generate_mariadb_examples.yml
  • .github/workflows/generate_mysql_examples.yml
  • .github/workflows/project-update.yml
  • .github/workflows/publish_release.yml
  • .github/workflows/pull_request.yml
  • .github/workflows/run_mt_with_db.yml
  • .github/workflows/update_cve_and_docs.yml
  • CURRENT_VERSION.txt
  • Changelog
  • FEATURES.md
  • GEMINI.md
  • INTERNALS.md
  • MEMORY_DB.md
  • Makefile
  • POTENTIAL_ISSUES
  • README.fr.md
  • README.it.md
  • README.md
  • README.ru.md
  • ROADMAP.md
  • RULES.md
  • TESTS.md
  • USAGE.md
  • build/audit_logs.pl
  • build/bashrc
  • build/clean.sh
  • build/clearContainer.sh
  • build/createMassDockerImages.sh
  • build/createTestEnvs.sh
  • build/deployOn
  • build/doc_sync.py
  • build/get_supported_envs.pl
  • build/installStaff.sh
  • build/md_lint.py
  • build/refactor_mocks.pl
  • build/sync.sh
  • build/updateStaff.sh
  • mysqltuner.pl
  • releases/v2.8.31.md
  • releases/v2.8.32.md
  • releases/v2.8.33.md
  • releases/v2.8.35.md
  • releases/v2.8.36.md
  • releases/v2.8.39.md
  • releases/v2.8.40.md
  • releases/v2.8.41.md
  • tests/MySQLTuner/TestHelper.pm
  • tests/auth_plugin_checks.t
  • tests/cli_forcemem_human.t
  • tests/cli_validation.t
  • tests/cloud_discovery.t
  • tests/core_logic_coverage.t
  • tests/index_pfs_checks.t
  • tests/innodb_isolation.t
  • tests/innodb_redo_log_capacity_logic.t
  • tests/issue_774.t
  • tests/issue_777.t
  • tests/issue_869.t
  • tests/issue_881_887.t
  • tests/mariadb_modeling.t
  • tests/mariadb_specific.t
  • tests/modeling_regression.t
  • tests/pfs_observability.t
  • tests/phase4_features.t
  • tests/removed_innodb_vars.t
  • tests/repro_issue_490.t
  • tests/repro_mysql9_regressions.t
  • tests/repro_pfs_disabled.t
  • tests/repro_table_cache.t
  • tests/schemadir.t
  • tests/ssl_tls_validation.t
  • tests/syslog_journal_detection.t
  • tests/test_ignore_tables.t
  • tests/test_issue_404.t
  • tests/test_issue_553.t
  • tests/test_issue_671.t
  • tests/unit_utilities.t
  • tests/v2_8_41_features.t

📝 Walkthrough

Walkthrough

This release introduces v2.8.41 with a comprehensive refactoring of test infrastructure via a new shared TestHelper module, extensive mysqltuner.pl improvements including replica terminology standardization and division-by-zero guards, updated GitHub Actions workflows with dynamic versioning, and formalized release governance rules. The 40+ test files are refactored to use the TestHelper pattern while mysqltuner.pl gains stronger CLI handling, improved credential logic, MySQL 9.x batch-mode compatibility, workload-aware InnoDB tuning, and more robust variable detection.


Changes

Version 2.8.41 Release

Layer / File(s) Summary
Version management and release documentation
CURRENT_VERSION.txt, Changelog, USAGE.md, releases/v2.8.41.md, releases/v2.8.39.md, releases/v2.8.40.md
Version incremented to 2.8.41, changelog entry added with fixes/features/CI items, USAGE.md updated with version and authors, new release notes files for v2.8.39, v2.8.40, v2.8.41.
Test infrastructure: TestHelper module and refactoring tool
tests/MySQLTuner/TestHelper.pm, build/refactor_mocks.pl
New TestHelper module provides reset_state() to initialize test globals and mock_printers() to suppress output; refactor_mocks.pl updated to automate insertion of TestHelper requires and reset calls across test files.
Test refactoring: Migrate all tests to TestHelper
tests/auth_plugin_checks.t, tests/cli_validation.t, tests/cloud_discovery.t, tests/core_logic_coverage.t, tests/index_pfs_checks.t, tests/innodb_isolation.t, tests/innodb_redo_log_capacity_logic.t, tests/issue_774.t, tests/issue_777.t, tests/issue_869.t, tests/mariadb_modeling.t, tests/mariadb_specific.t, tests/modeling_regression.t, tests/pfs_observability.t, tests/phase4_features.t, tests/removed_innodb_vars.t, tests/repro_issue_490.t, tests/repro_mysql9_regressions.t, tests/repro_pfs_disabled.t, tests/repro_table_cache.t, tests/schemadir.t, tests/ssl_tls_validation.t, tests/syslog_journal_detection.t, tests/test_ignore_tables.t, tests/test_issue_404.t, tests/test_issue_553.t, tests/test_issue_671.t, tests/unit_utilities.t
40+ test files updated to require TestHelper.pm, call reset_state() before test setups, and merge hash initialization instead of replacing them. Issue 777 assertions simplified; unit_utilities.t adds guards for non-numeric total and undef used.
mysqltuner.pl: CLI option metadata and argument parsing
mysqltuner.pl (lines 71–194, 217–323, 493–531, 620–667, 670–727, 738–755, 846–850, 872–876)
Option metadata refactored to use undef defaults instead of "0", implication wiring added (updateversion implies checkversion), parse_cli_args rewritten with WARN capture for error collection and hard failure, parse_human_size_to_mb helper added for human-readable unit conversion, setup_environment adjusted for new defaults.
mysqltuner.pl: Format, debug, and system integration helpers
mysqltuner.pl (lines 1299–1395, 1148–1199, 9920fdf9153e)
hr_bytes, hr_raw, percentage helpers hardened with undefined/NULL guards; infoprintcmd improved; is_remote and is_docker detection refactored for truthiness checking; execute_system_command filters MySQL SSL/insecure password warnings.
mysqltuner.pl: MySQL connectivity, credentials, and SQL execution
mysqltuner.pl (lines 1940–2097, 2191–2274, 2311–2410, 2461–2561, 2524–2531, 2581–2600, 2796–2826)
Transport prefix and system command execution refactored; login credential selection reordered with presence-based detection; login prompting tightened; select_array/select_one_g updated to use -E for MySQL 9.x compatibility; select_csv_file auto-appends LIMIT 100000; get_all_vars adds retry logic and %real_vars tracking.
mysqltuner.pl: Replication status and variable collection
mysqltuner.pl (lines 950–953, 1058–1080, 2895–2950, 5dd43b6447e3)
Replication lag logic prefers Seconds_Behind_Replica; check_replication_advanced uses Replica terminology consistently; get_replication_status refactored with replica-focused output and explicit "no replica" messaging; SHOW REPLICA STATUS used for newer MySQL versions.
mysqltuner.pl: Diagnostics, SSL/TLS, and core recommendations
mysqltuner.pl (lines 3611–4069, 4516–4627, 4880–5234, 5355–6142, 6294–6300, 8245–8275, 8503–8515, 8869–8890)
Storage engine stats, SSL/TLS checks, query-cache prune/day, concurrent_insert, InnoDB buffer pool, and redo-log capacity (with workload-based sizing for MySQL 8.0.30+) updated with improved guards and truthiness checks; Galera parallel replica terminology adjusted; CPU-core-based table_open_cache_instances recommendation added.
mysqltuner.pl: Removed variables, schema dumps, and report generation
mysqltuner.pl (lines 8be7797adc1d, 10044–10113, 10624–10780, 11038–11230)
check_removed_innodb_variables consults %real_vars; historical_comparison and process_sysbench_metrics use falsy checks; schema documentation gating uses truthiness; get_template_model introduced for report templating; dump_csv_files and output handling use robust falsy gating.
GitHub Actions workflows and CI/CD automation
.github/workflows/docker_publish.yml, .github/workflows/publish_release.yml, .github/workflows/pull_request.yml, .github/workflows/project-update.yml, .github/workflows/generate_mariadb_examples.yml, .github/workflows/generate_mysql_examples.yml, .github/workflows/run_mt_with_db.yml, .github/workflows/update_cve_and_docs.yml
Workflows now declare explicit permissions; docker_publish extracts VERSION/TAG_NAME/IS_PRERELEASE dynamically; publish_release generates SHA256 checksums and release body from releases/v[VERSION].md; pull_request adds quality gates for uninitialized values and updates checkout actions; new project-update workflow regenerates metadata.
Release governance rules and AI behavioral guidelines
.agent/rules/00_constitution.md, .agent/rules/03_execution_rules.md, .agent/rules/04_best_practices.md, .agent/rules/05_memory_protocol.md, .agent/rules/remembers.md, .agent/workflows/git-flow.md, .agent/workflows/release-manager.md, .agent/workflows/release-preflight.md, RULES.md, MEMORY_DB.md, GEMINI.md
Constitution updated to reference native Gemini Knowledge Items; execution rules enforce version consistency, Compliance Sentinel gating, and /release-manager orchestration; git-flow restricted to vX.XX.XX branches; release-manager formalized with pre-flight checklist and force-push protocol; new RULES.md, MEMORY_DB.md, GEMINI.md document governance and behavioral expectations.
Documentation: READMEs, roadmap, and release notes updates
README.md, README.fr.md, README.it.md, README.ru.md, ROADMAP.md, INTERNALS.md, FEATURES.md, TESTS.md
README files updated with replica terminology and human-readable unit sizes (15G, 1024M); ROADMAP links normalized to file:///documentation/...; INTERNALS.md uses replica nomenclature; FEATURES.md expanded with new feature flags; TESTS.md documents unit and lab testing approaches.
Build utilities and script updates
build/audit_logs.pl, build/get_supported_envs.pl, .github/dependabot.yml, Makefile, build/bashrc, build/clean.sh, build/clearContainer.sh, build/createMassDockerImages.sh, build/createTestEnvs.sh, build/deployOn, build/doc_sync.py, build/installStaff.sh, build/md_lint.py, build/sync.sh, build/updateStaff.sh
audit_logs.pl refined to filter success markers (✔, [OK]); get_supported_envs.pl added to extract supported versions from markdown; Dependabot configured for weekly updates; Makefile test-all passes get_supported_envs output; obsolete build scripts removed; unneeded aliases and functions eliminated.
New test files: CLI validation and feature testing
tests/cli_forcemem_human.t, tests/issue_881_887.t, tests/v2_8_41_features.t
cli_forcemem_human.t validates human-readable size parsing; issue_881_887.t covers join_buffer_size formatting and SSL warning filtering; v2_8_41_features.t tests table_open_cache_instances recommendation, division-by-zero guards, and mysqllogin initialization.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes


Poem

🐰 A rabbit hops through tests reborn,
TestHelper guards each case from morn,
The tuner learns to speak anew—
Replicas where slaves once flew.
Version forty-one takes flight, 🚀
With wisdom guards to keep things right. 🛡️

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

@jmrenouard jmrenouard merged commit 5a70ea8 into major:master May 17, 2026
9 of 10 checks passed
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.

3 participants