mirror of https://github.com/sysown/proxysql
GH-Actions
feature/ci-codecov-tap-legacy-g2
docs/passthrough-auth-spec
v3.0_fix-stale-pause-until
v3.0
feature/perf-improvements-test2
v3.0_fix_pgsql-set_statement_test_5788
v3.0_pgsql_options_5801
feature/ci-codecov-unit-tests
fix/kill-proxysqlgenai-build-flag-v2
fix/kill-proxysqlgenai-build-flag
v3.0-260523
feat/passthrough-auth
ci-trigger-tolerate-cleanup-401
fix/5790-mariadb-collation-255
fix/parsersql-1.0.3-pg-set-fixes
issue_5639
pgsql_dns_cache
fix/5755-followup-typecast-digest-fixtures
fix/5708-followup-multiline-for
fix/ci-asan-zombie-checks
v3.0_merge-5776-5784
genai_5534
aws-rds-bg
v3.0_partition-gate
feature/perf-improvements-rene
v3.0_latency_consistency_improvement
fix/5796-ci-mysqlx-build-cache
fix/remove-skip-all
test/cluster-simulator
fix/galera-g5-cluster-start
integration/v3.0-batch-2026-05-13
fix/ghcr-pull-retry
fix/issue-5620-fast-routing-qr-leak
fix/issue-5684-tsdb-dashboard-same-origin
fix/5770-gcc16-jemalloc
fix/issue-5766-libconfig-escape-passthrough
v3.0_cap_violation_5767
fix/issue-5755-pgsql-digest-truncation
fix/issue-5580-deb-xz-compression
ci-mariadb10-galera-v3.0
ci-mariadb10-galera-GH-Actions
ci/fix-gr-g1-hostgroups
ci/fix-gr-g5-cluster-start
issue-5686-galera-vars
ci-mysql84-gr-g1-g9-GH-Actions
ci-mysql84-gr-g1-g9-v3.0
perf/pull-ci-base-from-ghcr
fix/rename-set-parser-group-and-bench-complexity
fix/split-test-groups
fix/rename-set-parser-workflow
perf/scram-cached-hmac
feature/parsersql-integration
gh-actions/add-set-parser-algorithm-3-g1
issue-5729-stats-projection-abi
fix/4760-lenenc-auth-v3.0
fix/tsan-unit-tests-build-failure
fix/4530-mysql-server-selection-prng
fix/4760-advertise-lenenc-auth-capability
fix/unit-test-asan-double-link
fix-auth-lock-order
v3.0-genai-plugin
feature/mysqlx-stack-consolidated
feature/mysqlx-asan-coverage-docker-isolation
fix/ci-unit-tests-tsan-project-name
feature/mysqlx-tsan-v3-companion
feature/ci-builds-add-tsan-matrix
ci-reduce-polling-interval
feature/mysqlx-tsan-workflow-only
feature/mysqlx-ci-validation-workflows
feature/mysqlx-test-leak-cleanup
feature/mysqlx-behavioural-tap
feature/mysqlx-parity-cleanup
ci-g5-enable-cluster
ci-g5-debug-clean
feature/mysqlx-tls-passthrough
feature/mysqlx-asymmetric-tls
feature/mysqlx-state-machines
feature/build-tsan-plumbing
feature/mysqlx-observability-p0
plugin-chassis
fix/mysqlx-review-findings
fix/test-mysqlx-plugin-load-phase-b
docs/plugin-chassis-abi3-update
fix/mysqlx-runtime-views-separation
v3.0-ci-asan-libprotobuf-dev
ProtocolX
ProtocolX-rebased
v3.0-fix-macos-release-upload
v3.0-test-ci
v3.0-fix-init-release-race
v3.0-cleanup-stale-plans
v3.0-ci-pkg-workflows
fix/macos-build-deps
feat/arm64-on-demand-package-builds
fix/3.0.8-review-items
fix/pgsql-active-tx-on-broken-conn
feat/pgsql-tx-poisoned-recovery
pull-5659
session-track-system-variable
feat/cla-assistant-setup
v3.0-slim-dbdeployer-images
ci/fix-mysql-apt-key-expired-v2
ci/fix-mysql-apt-key-expired
fix/mysqlx-check-connect-poll
fix/mysqlx-stale-row-sync
feature/mysqlx-route-identity
fix/mysqlx-listener-lifecycle
fix/mysqlx-backend-tls-post-auth
chore/retire-dead-mysqlx-worker
v3.0-issue5621
v3.0_new_zstd
fix/lint-groups-json-format
v3.0-dbdeployer-mysql84-gr
lint-tap-tests-static-analysis
fix/groups-json-orphaned-entries
mariadb-rpl-helper
feature/gtid-range-update
fix-fc-parsing
v3.0-pgsql-monitor-reschedule-on-interval-change
v3.0-remove-sqlite-rembed
v3.0-fix-read-only-actions-hostgroup
v3.0-fix-pgsql-ssl-keylog-path
v3.0-fix-flake-test-flush-logs
v3.0-doc-test-readme
v3.0-doc-gh-actions-vocabulary
ci/fix-upload-artifact-eacces
v3.0_pgsql-copy-matcher-5568
ci/fix-cache-prune-permissions
ci/disable-unittests-caller
ci/shrink-test-cache
ci/proxysql-tester-zero-test-safety-net
ci/fix-tap-build-target
ci/gh-actions-readme-pointer
ci/rewire-group-callers-and-docs
ci/fix-mysql84-infradb-label
ci/add-missing-group-reusables
v3.0-lint
fix/ci-workflow-run-chain-pr-sha
fix/postgresql-cluster-sync_2
v3.0_ci_min_proxysql_version_5561
mysqlx-plugin-impl
infra-mysql57-binlog
v3.0-ci0405
feature/pgbouncer-compat
v3.0_pgsql_sslkeylog_5281
v3.0-issue5556
fix/5554-resolution-family-limitation
v3.0-CodeCov0325
v3.0-ci260323
fix/3p-ci-error-handling
feat/ffto-error-recording
v3.0-5493
v3.0-ci260322
v3.0-ci260322_cluster
v3.0-5516
v3.0-5517
copilot/feature-load-restapi-routes-config
copilot/add-ssl-tls-certificate-stats-table
unit-tests-skip-proxysql
private/multi-group-runner
v3.0-5473
v3.0-5499
copilot/extract-server-selection-algorithm
copilot/extract-health-state-logic
copilot/extract-query-rule-matching-logic
copilot/extract-connection-pool-logic
v3.0-set_parser_v3
feature/arm-builds
release-notes-3.0.6-4.0.6-draft
v3.0.6-add-tap-test_stats_table_check
v2.7.3-test260221
v4.0-mcp-stats
copilot/uninstall-amazon-linux-2023
fix-prometheus-labels-test
tap-mcp-client
agent-skill-tap-test
v4.0-tsdb1
v3.0-fix_5256
gh-pages
feature/modern-docs
v4.0
v4.0-fix-vec-search
v4.0_rag_sys_prompt
v4.0-mcp_rules_test
v4.0_rag_mcp
v4.0-tsdb
feature/v4-docs-init
otel_system_libs
otel_clean
v3.0-5288
otel
otel_2
fix/postgresql-cluster-sync
v3.0-releate_notes_scripts_fixes
test_gh-actions_triggers
postgresql-digest-testing-improvement
v3.0_select_auto_commit
v3.0-5218
fix-5221
fix/5186-proxysql-stop-admin-crash
v3.0-4951
add-claude-github-actions-1763877527835
fix-rpm
v3.0-DS_crash
add-claude-github-actions-1763663272333
add-claude-github-actions-1763663091346
add-claude-github-actions-1763663091411
add-claude-github-actions-1763476725261
add-claude-github-actions-1763476725489
v3.0_optimizations_and_stability
v2.7.3.1
v3.0.3-upgrade_json
v3.0.sonar-cli
v3.0.sonar-config
otel-tracepoint
v3.0.2-merge-upgrade_deps-add_new_distros
v3.0.2-upgrade_deps
v3.0.2-add_new_distros
v3.0-add_more_testing_groups
v3.0-upgrade_prometheus-cpp
v3.0-upgrade_json
v3.0-upgrade_sqlite3
v3.0-upgrade_libmicrohttpd
v3.0-upgrade_curl
v3.0-add_centos10_builds
v3.0-add_fedora42_builds
v3.0_PG_PrepStmt
v3.0-sliced_groups
v3.0_auth_negotiation
v2.7
v2.7-fix_run_name
v3.0_4799_4827
v3.0-3687
v2.7-pmm_runtime_servers_metrics
v2.7-4839
v2.7-4841
v2.7-bump_version_to_2.7.3
2.6.6-4841
v2.x_pg_PrepStmtBase_240714
v3.0-4803-4817
v3.0-4803
v2.7-minorBugs
v3.0-privates
v2.x-logging_mem_2
v2.7_fix
v2.7_amd64_build_fix
v2.7-fix_aux_threads_ssl_leaks
v2.7-fix_ssl_params_leak
v2.7-rm_malloc_conf_on_version
v2.7_compression
v2.7-actions-add-3p-tests-parameter
none
v2.7-fix_hang_on_resume
v2.x-logging_mem
v2.7_servers_defaults
v2.7-mariadb_column_metadata_integrity_check
ssl_optimization
v2.7_reg_test_4716_single_semicolon
v2.7_issue_4707_threshold_resultset_size
v2.7_reg_test_4723_query_cache_stores_empty_result
2.7_randomized_cache_ttl
v3.0_fix_multiple_builds
v3.0_servers_defaults
v2.7-update_actions_triggers_v2
v2.7-update_actions_triggers
v2.6
v2.6.x-update_triggers
v2.6-4646
v2.7.1-update_actions
v2.x
v2.6.x-testing-global-multiplexing-disabled
use-wrlock-in-dns-cache-empty
v2.6.x-fix-darwin
v2.x-admin_list_ciphers
v2.x-sqlite3_pass_exts
v2.x-tap_tests_opt_ssl
v2.6.0-update_to_libhttpserver_v0.19
v2.x_router_2ports
v2.6.0-update_to_openssl_v3.1.5
v2.x-2411025
v2.x-profiling_poc1
v2.x_sha2pass_draft2
v2.x-webui_fixes
v2.6.0-more-makefile-fixes
v2.x-20230914_test
v2.x-20230913_test
v2.5.5-branch
v2.5.5-branch_255_patches
v2.x-aurora_autodiscovery-refactor_cluster_mysql_servers-gr_bootstrap_mode_2
v2.x_mysql_connector_j_fixes
v2.6-deprecate_old_clickhouse
v2.x_refactor_cluster_mysql_servers
v2.x-aurora_autodiscovery
v2.x-zd70545
v2.x-aurora_autodiscovery_shunned_promotion
v2.x-tap20230609
v2.x-test20230530
v2.x_sha2pass_draft2-TEST
v2.x-session_track_system_variables_v2
v2.x-status-variables-for-set-stmts
v2.x-enable_session_state_trackers
v2.x-increase-logging-eof_fast_forward-t
v2.x-3863-special-query
v2.x-session_track_system_variables
v2.x_refactor_read_only_action
v2.x_sha2pass_draft1
v2.2.0-sqliteserver_read_only
v2.x-digest_umap_aux-comparison
v2.4.8
v2.x-4105_4114
v2.x-3583-server_closed_conn
v2.x-group_replication_rework-SHUNNED_promotion
v2.1.0-var-global-multiplex
v2.x-CI-hostname-tap-test-fixes
v2.x-limit-version-check
v2.x-fix_deprecate_eof_warning
v2.x-3698
v2.x_tidb_replica_read
v2.x-HostGroups_attributes
v2.0.18.221009
v2.x-ci_reg_test_3273_ssl_con
TAP_test_restapi
v2.x-tap_tests_groups
v2.x-tap_test_sqlite3_server-t
PRS_3888_3903_2
PRS_3888_3903
v2.x_code_refactor_2206
v2.x-multipacket_poc_1
v2.x-impr_hg_latency_obsv
v2.x-gcc-warnings
v2.x-hg_lock_session_id
v2.x-3768
v2.x-3371
v2.x-ci_verifications
v2.x-thread_local_qps_limit
v2.x-parser_table
v2.1.1-3207
v2.x-qps_limits
v2.x-3711
v2.x-3642
v2.x-3674
v2.x-ssl3_warnings
V2
v2.3.2
v2.3.2_3646_3647
v2.x-client_err_limit_conn_timeout
v2.x-keep_multiplexing_regression_fix
v2.3.2-3628
v2.2.2-to-v2.3.0-7
v2.2.2-to-v2.3.0-7_merge
v2.2.2-to-v2.3.0-6
v2.2.2-to-v2.3.0-6_merge
v2.2.2-to-v2.3.0-5
v2.2.2-to-v2.3.0-4
v2.2.2-to-v2.3.0-3
v2.2.2-to-v2.3.0-2
v2.2.2-to-v2.3.0-1
v2.3.1
v2.0.14-70226
v2.3.0
v2.x-client_err_limit-gr_replication_lag_action
v2.2.2
v2.2.1-3603
v2.2.1-centos7-ASAN
v2.2.1
v2.2.1-3601
v2.2.1-3599
v2.2.1-3597
v2.2.1-3595
v2.2.0-restapi_server_exc_log
v2.x-3574
v2.x-3558
v2.2.0-3546-centos-7-gcc-8
v2.x-3549
v2.x-cluster_large_mysql_users
v2.x-cov_ci_verification
v2.0.14-tb1
v2.0.14-tb1-3494
v2.0.14-tb1-3488
v2.0.14-tb1-3117
v2.0.14-tb1-2762
v2.0.14-2762
v1.4.13-arm
v2.1.1-3296
v2.2.0
v2.0.18
v2.1.1
v2.0.18-3342
v2.0.18-3182
v2.1.1-3184
v2.1.0-revert-da7fdfe14
v2.0.18-revert-da7fdfe14
v1.4.13-70160
v2.0.18-3354
v2.0.18-3350
v2.0.14-3339
1.4.13-70160
v2.0.18-3339
v2.1.1-3317
v2.1.1-3319
v2.0.18-3317
v2.1.2-LBalgo
v2.0.18-1574
v2.1.2-hgman
v2.0.17
v2.1.0
v2.0.17-3288
v2.0.17-3276
v2.0.17-3273
v2.0.16
v2.0.16-3267
v2.0.16-3265
v2.0.16-3262
v2.0.16-3261
v2.1.1-3252
v2.1.1-collation
v2.0.16-3252
v2.0.16-collation
v2.1.0-parser
v2.0.16-3219
v2.0.16-3216
v2.0.16-3201
v2.0.16-2330
revert-3191-v2.0.16-3190
v2.0.16-3204
v2.0.16-3177
v2.0.16-2619
v2.0.16-3190
v2.0.16-3187
v2.1.0-70118
v2.0.16-3133
v2.0.16-3133_ci_verification
v2.0.16-3150
v2.0.16-change_user
v2.0.15
v2.0.15_amd64_fix
v2.0.15_arm64_packages
v1.4.14-ssl
v2.0.15_arm64
v2.1.0-2820
v2.0.15-sslbug
v2.0.15-KillTrx
v2.0.14
v2.0.14-ch_build_fix
v2.0.14-focal
v2.0.14-valgrind20200904
v2.1.0-3042
v2.0.14-3035
v2.0.14-3036
v2.0.14-2955
v2.0.14-vars
v2.0.14-3005
v2.0.14-3003
v2.0.14_2970_2979
v2.0.14-NOTSOCK
v2.1.0'
v2.0.14-2958
v1.4.10-zd
v2.0.13
v2.0.13-autocommit_fix
v2.1.0-2892
v2.0.13-2711
v2.0.13-duplicated_variables
v2.0.13-duplicated_variables_for_2.1.0
v2.0.12-deprecate_eof
v2.1.0-1377
v2.1.0-admin_queries
v2.0.12-var-global-multiplex
v2.1.0-var-foreign-key
v2.0.12
v2.0.12-tab-small-log
v2.0.12-var-foreign-key
v2.0.12-var-long-query-time
v2.0.12-galera-shunned
v2.1.0-admin_queries_2
v2.1.0-tap-rm-config
v2.0.12-tap-rm-config-test
v2.1.0-QP_stmt_3
v2.0.11-fix-multi-2-ci
v2.0.11-fix-multi
v2.0.11-266_0-3
2.1.0
v2.0.11
v2.1.0-track-vars
v2.1.0-track-variables
v2.0.11-track-variables
v2.0.11-2526
v2.0.11-tap-tests
v2.0.13-2698-commit1
v2.0.10-galera-pxc-maint-mode
v2.0.11-track-vars
v2.0.10-2647
v2.0.11-track
v2.0.11-track-session-vars
v2.0.9-var-array-review
v2.0.11-stats
v2.0.10
v2.0.10-centos67
v1.4.14.2
1.4.14.2
v1.4.14-show-warnings
v2.0.9
v2.0.9-var-array_2
v2.0.9-var-array
v1.4.16
v2.0.8
val214-changing_charset
v2.0.6
v1.4.16-1922_2
v1.4.13.2
v2.0.4-charset248
v2.0.5
v1.4.10-67841
v2.0.4
v2.0.4-sqlite327
v2.0.3
v2.0.2
v1.4.15
v2.0.1
v1.4.14
v2.0.0
v1.4.14-ping_shun
v1.4.14-1828
v1.4.14-latency_awareness
v1.4.12
v1.4.13-admin_deadlock
v2.0.0-improve_speed
v1.4.13
v1.4.13-autocommit_revert
v1.4.11.2
v1.4.13-ps
v2.0.0_bionic_deb_fix
v2_962
v1.4.12-1640
v1.4.11-names_tz
v1.4.12-1693
master
v1.4.11
v1.4.10
v1.4.6
v1.3.10
jenkins_test
v2.0.0-cachegrind
v1.4.9
v2.0-lab
v149_1511
v149_1382
v1.4.7-f2
v1.4.7-f1
v149_1491
v1.4.5-kub
v1.4.8
v2.0-web2
v1.4.3
v1.4.7
bsd_install_update
v1.4.2
v1.4.1-ch2
v1.4.1
v1.3.9
v1.4.1-ch
v1.3.8
v1.3.8-dev
v1.3.7
v1.3.7-dev
v1.3.6-dev
v1.4.0-clickhouse
v1.4.0
v1.3.6
v1.3.5
v1.3.5-dev
v1.4.0-955
v1.3.4
v1.3.4-dev
v1.3.3
v1.3.3-dev
v1.3.2
v1.3.2-dev
v1.3.2-766
v1.3.0h
v1.3.1-utf8mb4
1.4.0-840
v1.3.1
v1.2.6
v1.3.0
v1.4.0-797
v1.2.5-715
v1.2.5
v1.2.4-lowmem
v1.3.1-dev-mem
v1.2.0
connleak
lab-1.2.0
v1.1.2
T107_add_proxysql_consul_requirements
T89_write_consul_integration_doc
T98_consul_multi_table_config
mongoose
evhttp
SQLiteServer
1.0
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
2.7.3
2.6.6.1
3.0.1
2.7.2
3.0.0
2.6.6
2.7.1
2.7.0
2.6.5
2.6.4
2.6.3
2.6.2
2.6.1
2.5.5
2.6.0
2.5.4
2.5.3
2.5.2
2.5.1
2.4.8
2.5.0
2.4.7
2.4.6
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.2
2.3.1
2.3.0
2.2.2
2.2.1
2.2.0
2.0.18
2.1.1
2.0.17
2.0.16
2.0.15
2.0.14
2.0.13
2.0.12
2.0.11
2.1.0
2.0.10
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
1.4.16
1.4.15
2.0.1
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.3.10
1.4.9
2.0.0
1.4.8
1.4.7
1.4.6
1.4.4
1.4.3
1.4.2
1.3.9
1.3.8
1.4.1
1.3.7
1.4.0
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0h
1.3.0g
1.3.0f
1.3.0e
1.3.0d
1.3.0c
v1.3.0b
1.4.5
v1.1.0
v1.1.0-rc
v1.1.1-beta
v1.1.1-beta.1
v1.1.1-beta.2
v1.1.1-beta.3
v1.1.1-beta.4
v1.1.1-beta.5
v1.1.1-beta.6
v1.1.2
v1.2.0a
v1.2.0b
v1.2.0c
v1.2.0d
v1.2.0e
v1.2.0f
v1.2.0g
v1.2.0h
v1.2.0i
v1.2.0j
v1.2.0k
v1.2.1
v1.2.2
v1.2.3
v1.2.4
v1.2.4.0923
v1.2.5
v1.2.6
v1.3.0
v1.3.0a
v1.3.0g
v1.3.0h
v1.3.1
v1.3.10
v1.3.2
v1.3.2-1
v1.3.3
v1.3.4
v1.3.5
v1.3.6
v1.3.7
v1.3.8
v1.3.9
v1.3.9-prev.1
v1.4.0
v1.4.1
v1.4.10
v1.4.11
v1.4.12
v1.4.13
v1.4.14
v1.4.15
v1.4.16
v1.4.2
v1.4.3
v1.4.4
v1.4.5
v1.4.6
v1.4.7
v1.4.8
v1.4.9
v2.0.0-beta.1
v2.0.0-rc1
v2.0.0-rc2
v2.0.1
v2.0.10
v2.0.11
v2.0.12
v2.0.13
v2.0.14
v2.0.15
v2.0.16
v2.0.17
v2.0.18
v2.0.2
v2.0.3
v2.0.4
v2.0.5
v2.0.6
v2.0.7
v2.0.8
v2.0.9
v2.1.0
v2.1.1
v2.2.0
v2.2.1
v2.2.2
v2.3.0
v2.3.1
v2.3.2
v2.4.0
v2.4.1
v2.4.2
v2.4.3
v2.4.4
v2.4.5
v2.4.6
v2.4.7
v2.4.8
v2.5.0
v2.5.1
v2.5.2
v2.5.3
v2.5.4
v2.5.5
v2.6.0
v2.6.1
v2.6.2
v2.6.3
v2.6.4
v2.6.5
v2.6.6
v2.7.0
v2.7.1
v2.7.2
v2.7.3
v3.0.0-alpha
v3.0.1
v3.0.2
v3.0.3
v3.0.4
v3.0.5
v3.0.6
v3.0.7
v3.0.8
v3.1.6
v3.1.7
v3.1.8
v4.0.6
v4.0.7
v4.0.8
${ noResults }
9659 Commits (ee6d4e506ac47a9ef69b60efa5ddfc9cde2cd71d)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
ee6d4e506a |
ci: retrigger CI after MySQL APT key fix
|
1 month ago |
|
|
25c8fd1609 |
test/tap/tests: drain in-flight monitor cycle in pgsql-servers_ssl_params-t
The test samples PgSQL_Monitor_ssl_connections_OK immediately after LOAD PGSQL SERVERS TO RUNTIME, then sleeps 5s and checks the counter did not advance (TLSv1 pin should have broken SSL). A monitor connect cycle scheduled with the OLD params can land AFTER ok_before is taken but BEFORE the sleep, succeeding and falsely bumping the counter. Poll for two consecutive equal 1s samples so ok_before is recorded after the new config has taken effect and the counter has plateaued. |
1 month ago |
|
|
96c686dafa |
MySQL_Monitor: GR thread ignores cached ping state on first iteration
Why: mysql_server_ping_log can carry stale "unpingable" entries from before monitor_GR_thread_HG was (re)started (e.g. a previous test left those hostnames marked bad). With the cache filter applied on the very first cycle, find_resp_srvs() returns empty, the writer HG stays empty for a full healthcheck_interval, and GR-based tests flake on warm-up. Probe all configured hosts on the first iteration so subsequent cycles see a fresh ping_log. The filter resumes from iteration two onward. |
1 month ago |
|
|
96bd55784d |
test/tap/tests: wire mysql-zstd_compression_level_libmysql-t into tests target
Commit
|
1 month ago |
|
|
bce08084b8 |
test_cluster_sync: wait_for_node_sync must treat "row absent" as not-synced
wait_for_node_sync() in test_cluster_sync-t.cpp defaults row_value to -1,
updates it from the result row only when both myrow and myrow[0] are non-null,
then checks:
if (row_value == 0) {
not_synced = true;
...
}
This catches "row present but empty" (row_value == 0) but silently misses
"row absent" (row_value stays at the -1 default when mysql_fetch_row
returns NULL). The common predicate passed through this helper is:
SELECT LENGTH(checksum) FROM stats_proxysql_servers_checksums
WHERE hostname='%s' AND port='%d' AND name='%s'
That row does not exist on a freshly-spawned replica until it has first
synchronised checksums with the peer whose hostname/port the test is
polling. Under heavy CI load the replica takes longer to reach that
point; the loop exits as "synced" before the row exists; the caller's
fetch_remote_checksum() then correctly returns empty and aborts the test
with "Failed to fetch current checksum for module 'mysql_servers_v2'".
That is exactly the failure observed in legacy-g5 / mysql84-g5 /
mysql90-g5 during the multi-group CI run. mysql95-g5 passed because it
started roughly two hours later, after concurrent groups had finished.
Fix: treat row_value <= 0 as not-synced, so the "row absent" case is
polled for the full CHECKSUM_SYNC_TIMEOUT instead of being silently
skipped. Positive values still mean "synced" and exit the loop
immediately, so there is no latency cost in the fast path.
Verified: test_cluster_sync-t now passes 399/399 in legacy-g5; the
'wait_for_node_sync' timeouts that now appear in the log are the
disabled-sync half of paired enabled/disabled assertions, where the
timeout is the expected outcome.
|
1 month ago |
|
|
2b1a4262b1 |
tap/utils: add wait_for_log_match() to fix log-scrape races
check_logs_for_command() in pgsql-copy_from_test-t did a single-shot call
to get_matching_lines() right after the SQL that was expected to cause the
"Switching to Fast Forward" / "Switching back to Normal" log line. Because
ProxySQL writes that line asynchronously with respect to the query's reply,
the scan occasionally reached EOF before the producer had flushed the line,
turning the assertion into a flake.
The failure that originally surfaced this was legacy-g1, test 85/327 of
pgsql-copy_from_test-t: 1 of 236 assertions (not ok 126 - "Switching back
to Normal mode"). It never reproduced under three targeted reruns, which
is consistent with a timing race rather than a logic bug.
Two changes:
1. Add wait_for_log_match() in test/tap/tap/utils.{h,cpp}: retry
get_matching_lines() up to a timeout, clearing both eofbit and failbit
between iterations so successive getline() calls pick up lines appended
since the last scan. (Clearing only failbit, as get_matching_lines does
internally, is not enough — once a stream has hit EOF its sticky eofbit
keeps getline() from reading new bytes.) Defaults: 2000 ms total budget,
100 ms between polls — matching the idiom already used in
admin_set_credentials_logging-t.
2. Rewrite check_logs_for_command() in pgsql-copy_from_test-t.cpp to call
the new helper. Positive assertions still return as soon as the line
appears (no added latency in the common case). Negative assertions
(check_logs_for_command(...) == false) now wait up to the full timeout
to confirm absence, closing the symmetrical race where a line would
have arrived a few hundred ms later than the single-shot scan.
Verified: 3/3 reruns of pgsql-copy_from_test-t in legacy-g1 post-fix all
pass 236/236, runtime ~40 s per run (single-shot version was slightly
faster because it short-circuited on negative assertions without waiting).
|
1 month ago |
|
|
6322d58376 |
sqlite3: CACHING_SHA2_PASSWORD() accepts optional rounds arg (closes #5640)
The ProxySQL admin SQLite3 extension CACHING_SHA2_PASSWORD() previously
always emitted hashes with 5000 rounds (hardcoded "\$A\$005\$" prefix and
"\$5\$rounds=5000\$" crypt salt). MySQL's caching_sha2_password_digest_rounds
is configurable from 5000 to 4095000 in steps of 1000, so a backend that
uses any non-default value produces hashes the extension cannot reproduce —
breaking the byte-for-byte hash equivalence test in
test_sqlite3_pass_exts-t on e.g. the mysql95 backend where rounds=10000.
Extend the SQLite function to accept an optional third integer argument
carrying the desired rounds value:
CACHING_SHA2_PASSWORD(pass) -> random salt, 5000 rounds
CACHING_SHA2_PASSWORD(pass, salt) -> given salt, 5000 rounds
CACHING_SHA2_PASSWORD(pass, salt, rounds) -> given salt, given rounds
rounds is validated: integer, multiple of 1000, in [5000, 4095000] —
matching MySQL's caching_sha2_password_digest_rounds bounds. The
"\$5\$rounds=<N>\$" salt prefix and "\$A\$<RRR>\$" hash prefix are now
built at runtime from the resolved value, with <RRR> emitted as 3-char
zero-padded uppercase hex of (rounds/1000) per MySQL's
sql/auth/sha2_password.cc::digest_round_separator().
Update test_sqlite3_pass_exts-t to parse the rounds field from the
MySQL-generated hash (chars 3..5 of \$A\$<RRR>\$..., base-16, ×1000)
and pass it to CACHING_SHA2_PASSWORD() — so the hash-equivalence
assertion matches any backend rounds. Update the INV_INPUTS fixture:
3-arg is now valid, so reject 4-arg ("wrong number"), reject 3-arg
with non-integer rounds ("Invalid argument type"), reject out-of-range
or non-multiple-of-1000 rounds ("Invalid rounds: ...").
Verified against mysql95 backend (rounds=10000): test_sqlite3_pass_exts-t
passes 2117/2117, test_auth_methods-t passes 10774/10774 (previously
failing with 50+122 not-ok respectively before the base-16 parse fix in
MySQL_Protocol.cpp).
|
1 month ago |
|
|
4e0efd7536 |
scripts/lint: pass explicit target to bear-wrapped make
generate-compile-commands.sh wrapped the top-level build with
bear -- make -j\$(nproc)
with no explicit target, so the inner make resolved its default goal
dynamically. Combined with the previous Makefile bug that left
lint-generate-cdb as the default goal, invoking `make` with no arguments
produced an exponential fork bomb: lint-generate-cdb → this script →
bear -- make -jN → lint-generate-cdb → this script → …, with each level
forking up to \$(nproc) concurrent sub-makes under Bear's LD_PRELOAD
exec intercept. Spawned hundreds of `bear -- make -jN` processes before
grinding the system to a halt.
The Makefile default-goal fix in
|
1 month ago |
|
|
7a1d639a4b |
build: set default goal to build_src, not the first target
The Makefile had `.DEFAULT: default` intending to make the `default` target (which builds the project) the fallback when `make` is invoked with no arguments. `.DEFAULT` is a different special target — it provides a fallback *recipe* for targets with no rule, and has no effect on default goal selection. GNU make picks the first real target as the default goal unless `.DEFAULT_GOAL` is set. The first real target in this Makefile is `lint-generate-cdb` (line 19), so `make` with no arguments ran `scripts/lint/generate-compile-commands.sh`, which does `bear -- make -j\$(nproc)` — a full rebuild of the project under Bear's compile-intercept wrappers. Each C++ compile under Bear spawned a wrapper process, producing hundreds of bear processes per plain `make` invocation and burying the intended default behaviour. Replace `.DEFAULT: default` with `.DEFAULT_GOAL := default` so `make` with no arguments runs `default: build_src` as originally intended. |
1 month ago |
|
|
4e39f3bdc4 |
fix: parse caching_sha2_password rounds as hex (auth fails on rounds >= 10000)
MySQL stores the rounds field of caching_sha2_password hashes ($A$<RRR>$<salt><hash>) as 3-char zero-padded uppercase hex of (rounds/1000). See sql/auth/sha2_password.cc: sprintf(rounds_str, "%03X", m_stored_digest_rounds) ProxySQL was parsing this field with stol(s, 10) (default base-10), which silently truncates at the first hex digit (A-F): 005 → 5 (5000 rounds, MySQL 8.0 default) ✓ matches base-16 009 → 9 (9000 rounds) ✓ matches base-16 00A → 0 (10000 rounds, stops at 'A') ✗ should be 10 010 → 10 (16000 rounds, decimal!) ✗ should be 16 01A → 1 (26000 rounds, stops at 'A') ✗ should be 26 The wrong rounds value is then fed into sha256_crypt_r() via "$5$rounds=<n*1000>$<salt>", producing a digest that does not match the stored hash, so verification fails with Access denied. Trigger: any MySQL backend with caching_sha2_password_digest_rounds >= 10000 (or any value whose hex encoding contains A-F). Surfaces in CI on the mysql95 dbdeployer image, where backend-generated hashes start with $A$00A$. The bug is latent on MySQL 8.0/8.4/9.0 with default rounds=5000 because "005" parses identically in base-10 and base-16. Fix: pass base=16 to stol() in both PPHR_verify_sha2() and PPHR_sha2full(). |
1 month ago |
|
|
ef351a6a67 |
test/groups: drop reg_test_3992 from mysql8x/95 groups
The reg_test_3992_fast_forward_malformed_packet-{t,pymysql,mysqlsh} tests
hard-code MariaDB-specific users (mariadbuser, mariadbuserff) that are
provisioned only by infra-{mariadb10,dbdeployer-mariadb10}. The mysql84-g2,
mysql90-g2 and mysql95-g2 groups don't include a MariaDB infra, so the test
fails immediately with "Access denied for user 'mariadbuserff'".
Restrict the three variants to legacy-g2 and the mysql-* knob-variant g2
groups (which inherit the legacy infra layout including MariaDB).
|
1 month ago |
|
|
b860662c17 |
test/infra: slim dbdeployer images (~70-77% smaller)
Every dbdeployer-* CI image was carrying dead weight from the MySQL/MariaDB unpack step. Cleanup is folded into the same RUN layer as the unpack so the removals actually reclaim space instead of leaving it in a prior layer: - remove the tarball that 'dbdeployer downloads get-unpack' left at / (~1GB) - remove bin/mysqld-debug (debug server binary, unused at runtime) - for MySQL 5.7 only: also remove lib/libmysqld.a and lib/libmysqld-debug.a (embedded-server static libs, deprecated in 5.7 and removed in 8.0) - strip all ELF binaries under bin/ and shared libs under lib/ using binutils installed temporarily and purged within the same layer Result: 2.8 GB -> 653 MB for mysql95, with similar drops across every tier. Existing behavior is preserved (libmysqlclient.a kept, no runtime changes). |
1 month ago |
|
|
82fadbc1f4
|
Merge pull request #5623 from sysown/v3.0-issue5621
Fix regression: restore upper-word capabilities dropped from greeting |
1 month ago |
|
|
17a54193cc
|
Merge pull request #5637 from sysown/v3.0_new_zstd
feat: add mysql-zstd_compression_level variable |
1 month ago |
|
|
4d251c80ec |
Revert 'enable_client_session_tracking' variable; keep greeting fix
Issue #5621 mis-diagnosed "CLIENT_SESSION_TRACKING missing from the greeting" as a long-standing configuration gap and proposed a new 'mysql-enable_client_session_tracking' variable analogous to 'mysql-enable_client_deprecate_eof'. On closer inspection this was in fact a regression introduced by commit |
1 month ago |
|
|
174c5bda20 |
test: expand zstd_compression_level test with MySQL 8.4 C API and timing benchmark
The existing test only verified admin variable behavior (default, range,
independence). It did not prove that ZSTD compression was actually
active on the wire. Two new test variants address this:
MariaDB connector path (mysql-zstd_compression_level-t):
- Tests 1-9: unchanged (variable defaults, range validation, independence)
- Tests 10-11: use mysql CLI via execvp with --compression-algorithms=zstd
and --zstd-compression-level={3,19}. Each call spawns a new process
(= new connection). Verifies CONNECTION_ID() retrieval and large
resultset transfer. Skipped if mysql CLI lacks zstd support.
MySQL 8.4 connector path (mysql-zstd_compression_level_libmysql-t):
- Tests 1-9: same as MariaDB path
- Test 10: establishes a ZSTD connection using mysql_options(
MYSQL_OPT_COMPRESSION_ALGORITHMS, "zstd") and prints mysql_thread_id()
without running any query.
- Test 11: timing benchmark proving compression is active. Creates a
query rule (rule_id=1, cache_ttl=60000) to cache all SELECTs, then
runs a 576-row resultset query 1000 times on a plain connection and
1000 times on a ZSTD level 22 connection. ZSTD level 22 is extremely
CPU-intensive: observed 40122ms vs 858ms (46.7x ratio). A ratio >= 3x
proves compression is really running on the client<->ProxySQL link.
Other changes:
- MySQL_Protocol.cpp: simplify redundant clamping to a simple cast
(the variable is already validated at SET time)
- Makefile: add build rule for _libmysql variant linking against
MySQL 8.4 connector
- groups.json: register _libmysql variant for mysql84/90/95-g1
- CLAUDE.md: update testing section with CI script usage and DO NOT list
|
1 month ago |
|
|
6b311b7014 |
Restore greeting upper-word caps via local 'extended_capabilities'
Previous commit (
|
1 month ago |
|
|
536c9d9169 |
Restore greeting upper-word capabilities dropped in 8c6a6444d
The zstd refactor in |
1 month ago |
|
|
f9f6f74ecc |
fix: address code review issues in zstd compression level test
- Remove mysql_error(NULL) UB on failed admin connection (use static error string instead). - Correct Test 10 comment and label: it exercises zlib (CLIENT_COMPRESS), not zstd compression, verifying the new variable doesn't break existing compressed connections. |
1 month ago |
|
|
4631b1f466 |
fix: clean groups.json diff — only add mysql-zstd_compression_level-t entry
|
1 month ago |
|
|
6dae8d125f |
test: add TAP tests and housekeeping for mysql-zstd_compression_level
- New test mysql-zstd_compression_level-t.cpp: validates default value, range enforcement (1-22), rejection of 0 and 23, independence from mysql-protocol_compression_level, and functional compressed connection. - Register mysql-zstd_compression_level-t in groups.json (same groups as mysql-protocol_compression_level-t). - Add variable visibility check to reg_test_2793-compression-t.cpp. - Add unit test binary pattern to .gitignore. |
1 month ago |
|
|
1c3057ecf2 |
feat: use mysql-zstd_compression_level for zstd compression
Replace mysql_thread___protocol_compression_level with mysql_thread___zstd_compression_level in both the handshake (MySQL_Protocol.cpp) and data stream (mysql_data_stream.cpp) zstd level selection paths, so the two compression algorithms can be configured independently. |
1 month ago |
|
|
aa24529f39 |
feat: register mysql-zstd_compression_level variable in MySQL thread
|
1 month ago |
|
|
266a10617f |
feat: declare mysql_thread___zstd_compression_level thread-local and struct member
|
1 month ago |
|
|
aecac96c84
|
Merge pull request #5638 from sysown/fix/lint-groups-json-format
fix: reformat groups.json and add --fix to linter |
1 month ago |
|
|
a0f685b998 |
fix: reformat groups.json to one-line-per-entry and add --fix to linter
groups.json was reformatted with multi-line arrays by a recent merge, breaking the one-line-per-test convention documented in README.md. Changes: - Reformat groups.json to canonical format (one line per test, compact arrays, sorted keys, space before colon). - Add --fix mode to lint_groups_json.py that auto-reformats the file in-place, preventing this class of issue in the future. |
1 month ago |
|
|
13ff9d7671
|
Merge pull request #5625 from sysown/v3.0-dbdeployer-mysql84-gr
infra: migrate mysql84-gr to dbdeployer and cap pgsql_servers max_connections |
1 month ago |
|
|
7c6f42bcd8 |
fix: MySQL 9.x charset handling and log_last_insert_id test race
- validate_charset: compare server_version as a numeric major version instead of testing the first character, so MySQL 9.x and later are treated like 8.x for collations with id >= 255 - test_log_last_insert_id-t: re-enable PROXYSQL FLUSH LOGS; with buffered query logging, eventslog_flush_timeout=0 alone still races the periodic flush thread |
1 month ago |
|
|
d212102ce5 |
fix(tests): drop pgsql-* tests from mysql{84,90,95}-g[1-5]
Follow-up to
|
1 month ago |
|
|
4534e5b4dc |
feat(tests): merge legacy-g[1-5] test sets into mysql{84,90,95}-g[1-5]
Every TAP test in legacy-gN is now also a member of mysql84-gN,
mysql90-gN, and mysql95-gN (N=1..5). No tests removed from any group;
legacy-g[1-5] keeps its existing membership intact.
Rationale: the legacy group covers the MySQL 5.7 / MariaDB 10 / PgSQL /
ClickHouse matrix, but many of its TAP tests are not inherently tied to
MySQL 5.7 — they exercise ProxySQL behavior that should also hold
against modern MySQL backends (8.4, 9.0, 9.5). Running them against
those newer servers widens the matrix and catches 9.x-specific
regressions in tests that weren't previously in a 9.x group.
Mechanical merge via a walk over groups.json:
for each test:
for N in 1..5:
if 'legacy-gN' in memberships:
add 'mysql84-gN', 'mysql90-gN', 'mysql95-gN' if absent
224 new memberships added. Per-bucket union size (i.e. now a superset
of legacy-gN):
g1: legacy=87 mysql84=93 mysql90=87 mysql95=93
g2: legacy=43 mysql84=45 mysql90=45 mysql95=45
g3: legacy=40 mysql84=40 mysql90=40 mysql95=40
g4: legacy=94 mysql84=96 mysql90=96 mysql95=96
g5: legacy=5 mysql84=7 mysql90=7 mysql95=7
Verified as supersets (every test in legacy-gN is present in
mysql{84,90,95}-gN). check_groups.py reports 385/385 tests registered,
no orphans.
Expect new 9.x-specific failures to surface when the mysql{90,95}-g*
groups run these newly-inherited legacy tests — they're likely to hit
the same family of mysql_native_password / caching_sha2_password issues
we've already been working through in the sibling PR threads. Those
will be triaged as they appear.
|
1 month ago |
|
|
d5b796cdea |
fix(test/tap): halve expected backend conn count in test_sqlite3_pass_exts-t on 9.x
Follow-up to
|
1 month ago |
|
|
cbbd10ba74 |
fix(test/tap): skip native_password backend fixtures on MySQL 9.x in test_sqlite3_pass_exts-t
Fixes #5631. The test has three logical phases: Phase 1 Admin SQLite3 extension validation for MYSQL_NATIVE_PASSWORD() and CACHING_SHA2_PASSWORD() — pure hash computation inside ProxySQL, does not touch the backend. Phase 2 MySQL/Admin hash compatibility — creates USER_GEN_COUNT (100) users on the backend, half with mysql_native_password and half with caching_sha2_password, then compares the backend's authentication_string with the hash that ProxySQL's Admin SQLite3 function produces. Phase 3 End-to-end connection test — creates RAND_USERS_GEN (100) users with the same 50/50 split and attempts to connect through ProxySQL. On MySQL 9.0+ the mysql_native_password plugin is not loadable, so the first CREATE USER IDENTIFIED WITH 'mysql_native_password' in Phase 2 fails with ER_PLUGIN_IS_NOT_LOADED and the test bails after only 10 assertions (all of Phase 1 passes — ProxySQL's internal hash extensions work fine on 9.x; this was a good green signal). Fix: - Add g_mysql_supports_native_password; set to false on server_version >= 9.0. - Adjust actual_test_count so plan() matches reality: if (has_native) { count += USER_GEN_COUNT + RAND_USERS_GEN; } else { count += USER_GEN_COUNT / 2 + RAND_USERS_GEN / 2; } - Wrap the Phase 2 native_password loop in 'if (has_native)'. - Phase 3 uses 'for (i = 0 .. RAND_USERS_GEN)' with 'i < 50 ? native : sha2'. Skip the native half by starting the loop at RAND_USERS_GEN/2 when has_native is false. Phase 1 coverage is fully preserved — the ProxySQL Admin SQLite3 hash functions (including MYSQL_NATIVE_PASSWORD()) still work on 9.x; only the backend-side CREATE USER path is skipped. |
1 month ago |
|
|
5bb19a99b1 |
fix(test/tap): skip reg_test_4935-caching_sha2-t on MySQL 9.x
Fixes #5629. This regression test for issue #4935 ("proxysql ignores database in DSN at first login") uses a hardcoded plan(864) built around a 2×2 fixture table (2 mysql_native_password users + 2 caching_sha2_password users) crossed with 2 def_auths × 3 req_auths × 2×2×2 bool matrices. On MySQL 9.0+ the mysql_native_password plugin is unavailable and any CREATE USER IDENTIFIED WITH 'mysql_native_password' hits ER_PLUGIN_IS_NOT_LOADED, killing the test during fixture setup. Filtering the fixture matrix in-place to remove the native half would require re-deriving plan(N) from scratch — the current plan(864) encodes the expected-pass count of a non-trivial loop that has a per-iteration 'exp_first_login_failure()' skip. Getting that math right and keeping it right under future changes is fragile. Pragmatic fix: detect 9.x and skip the whole test with plan(0). The #4935 regression (database-in-DSN on first login for caching_sha2) is already fully exercised against the mysql57 and mysql84 infras in legacy-g* / mysql84-g*. Losing the 9.x-specific coverage for this one regression test is an acceptable trade-off — the ProxySQL code path under test is server-version-agnostic, so additional 9.x coverage adds little beyond what 8.4 already provides. Mirrors the skip pattern the test suite already uses for MySQL < 8.0. |
1 month ago |
|
|
5f50724845 |
fix(test/tap): skip mysql_native_password fixtures on MySQL 9.x in test_auth_methods-t
Fixes #5626. The test's fixture table (backend_users) has 18 users split 9/9 across mysql_native_password and caching_sha2_password. On MySQL 9.0+ the native-password plugin is unavailable, and the test bailed on creating the first native-password fixture (dualpass2). Following the existing version-gating pattern in the same test (which already branches on server_version < 80000 for MySQL 5.x and on is_mariadb for MariaDB), add a third branch: has_native_password = true if server_version >= 90000 && !is_mariadb: has_native_password = false Then thread has_native_password through: - the backend_users fixture list (filter out native entries before passing to config_mysql_backend_users) - def_auths (the "ProxySQL default authentication plugin" matrix) - req_auths (the "client-requested authentication plugin" matrix) plan() adjusts automatically because the plan count is computed from scs_stats/rnd_scs_stats which are derived from the actual created users and config_combs, not hardcoded. Coverage on 5.7 and 8.4 is unchanged: both plugins still exercised. On 9.x, only the caching_sha2_password half runs — which is the only half the backend can support anyway. |
1 month ago |
|
|
8c36be3606 |
fix(test/tap): make create_mysql_user helper backend-version aware
Fixes #5627, #5628, #5630. The shared test helper test/tap/tap/utils.cpp:create_mysql_user() was hardcoding IDENTIFIED WITH 'mysql_native_password' in its CREATE USER template. MySQL 9.0 removed that plugin entirely (the .so in the tarball is a client-lib stub only; INSTALL PLUGIN fails with "Can't find symbol '_mysql_plugin_interface_version_'"), so CREATE USER IDENTIFIED WITH 'mysql_native_password' returns ER_PLUGIN_IS_NOT_LOADED on 9.x backends. Tests that use this helper as setup — they don't care which auth plugin the backend uses, they just need a working user — were failing before executing a single assertion. Affected tests (all in mysql90-g* / mysql95-g*): test_com_reset_connection_com_change_user-t (#5627) test_default_value_transaction_isolation_attr-t (#5628) test_server_sess_status-t (#5630) Fix: select the IDENTIFIED clause at runtime based on mysql_get_server_version(): - server < 9.0 → keep the explicit 'mysql_native_password' clause (preserves behavior on 5.7 / 8.4 for any callers that implicitly depend on a native-password backend user) - server >= 9.0 → use IDENTIFIED BY (server default plugin, which is caching_sha2_password on 9.x) Auth-sensitive tests that specifically exercise plugin-iteration (e.g. test_auth_methods-t, reg_test_4935-caching_sha2-t) do not use this helper — they use create_mysql_user_exp_creds() in utils_auth.h, which takes an explicit plugin argument. Those are handled in separate commits. |
1 month ago |
|
|
e11411fde2 |
fix(infra): use 'mysql -E -e STATEMENT' instead of 'mysql -e STATEMENT\G'
MySQL 9.5.0 client (no longer?) accepts '\G' as a statement terminator when the statement is passed via '-e': $ mysql -e 'SHOW REPLICA STATUS\G' ERROR at line 1: Unknown command '\G'. '\G' still works interactively, and still works in -e on 8.4 and 9.0.1. This is a silent behavior change in the 9.5 client binary. (The 9.0.1 client in the same tarball tree handles '\G' fine.) docker-mysql-post.bash uses this to query replication status after container startup. Under 9.5, the mysql command exits non-zero, the captured output is empty, the subsequent grep in a pipeline returns 1, and set -e + pipefail kill docker-mysql-post.bash. That in turn kills docker-compose-init.bash which kills ensure-infras.bash. Net effect: every mysql95 / mysql95-binlog group fails before running a single test, logging just: Verifying MySQL on ...:3308... OK Checking replication on port 3307... (stops here) Fix: switch from '-e "SHOW REPLICA STATUS\G"' to '-E -e "SHOW REPLICA STATUS"'. '-E' (a.k.a. --vertical) has been supported by mysql(1) since 3.x, works identically on MariaDB 10, MySQL 5.7 / 8.4 / 9.0 / 9.5. The grep/awk that extracts Replica_IO_Running and Replica_SQL_Running keeps working unchanged since the vertical output format is the same. Applied to all 10 docker-mysql-post.bash files under test/infra/infra-dbdeployer-*. No change needed to the ci-infra Docker images — docker-mysql-post.bash runs on the host after the container starts. |
1 month ago |
|
|
bee37b2cb8 |
fix(tester): abort when TAP_GROUP is set but has no tests registered
Previously, if TAP_GROUP was set but the group had no entries in
test/tap/groups/groups.json (typo, missing registration, etc.), the
tester logged a warning and silently fell back to running ALL 325 TAP
tests. In a multi-group parallel run this turns a misconfiguration into
a multi-hour hang that only surfaces when the per-group TIMEOUT fires.
We hit this in practice: mysql90-g[2-5] existed as launch targets in
the runner but hadn't been populated in groups.json yet. The tester
fell back to the full suite, and the groups TIMED OUT after chewing
through pgsql tests they had no business running.
Change behavior to log at CRITICAL and sys.exit(1) in two cases:
1. TAP_GROUP is set, groups.json is present, but the group has no
tests registered.
2. TAP_GROUP is set and groups.json is missing entirely.
The "no TAP_GROUP specified" path is unchanged — that's the legitimate
way to run the full suite directly (outside the group runner).
Error messages explicitly tell the operator what to do: either register
tests for the group, or unset TAP_GROUP to run the full suite
intentionally.
|
1 month ago |
|
|
7eee687415 |
feat(tests): mirror mysql84-g[2-5] test sets into mysql90-g[2-5]
Populates mysql90-g2 through mysql90-g5 with the same test assignments as mysql84-g2..5, matching the structure already applied to mysql95. Adds 147 group memberships, all targeting existing tests. mysql84-g2: 42 → mysql90-g2: 42 mysql84-g3: 40 → mysql90-g3: 40 mysql84-g4: 60 → mysql90-g4: 60 mysql84-g5: 5 → mysql90-g5: 5 mysql90-g1 intentionally left as the existing 16-test shared subset (still matches mysql91-g1 / mysql92-g1 / mysql93-g1). If you want g1 expanded to mysql84-g1 parity later (78 tests), it's a one-line follow-up. Fixes the runaway "TIMEOUT" seen in multi-group runs that included mysql90-g[2-5]: the tester would previously fall back to running all 325 tests when a group had no members (see separate commit that eliminates that fallback). check_groups.py still reports 385/385 registered, no orphans. |
1 month ago |
|
|
efa7922d01 |
feat(infra): add dbdeployer-based MySQL 9.0/9.5 binlog-reader infras
Mirrors the existing infra-dbdeployer-mysql84-binlog layout (3-node
replication + proxysql_binlog_reader on GTID ports 6020/6021/6022) for
MySQL 9.0 and 9.5. Group replication binlog variant not requested; skipped.
New infrastructures:
test/infra/infra-dbdeployer-mysql{90,95}-binlog/
Hostgroup PREFIX assignment:
mysql90-binlog PREFIX=37 (WHG/RHG/BHG/OHG = 3700/3701/3702/3703)
mysql95-binlog PREFIX=38 (3800/3801/3802/3803)
MySQL tarballs (x86_64 glibc2.17 variants, same as the standalone 9.x infras):
mysql-9.0.1-linux-glibc2.17-x86_64.tar.xz
mysql-9.5.0-linux-glibc2.17-x86_64.tar.xz
Dropped the `-c mysql_native_password=ON` dbdeployer flag and the
`IDENTIFIED WITH 'mysql_native_password'` clause, same as the other 9.x
infras, since the plugin isn't usable on MySQL 9.x servers.
Group wiring (test/tap/groups/):
mysql{90,95}-binlog/ — env.sh + infras.lst, mirroring mysql84-binlog/
groups.json: registered mysql90-binlog-g[12] and mysql95-binlog-g[12]
mirroring mysql84-binlog-g[12] exactly (g1=3 tests, g2=1 test).
check_groups.py reports 385/385 registered.
KNOWN LIMITATION — proxysql_binlog_reader v2.3 cannot authenticate:
Smoke test of mysql90-binlog confirmed 3-node replication deploys
cleanly and users replicate, but the binlog reader processes fail
to start with:
Could not mysql_real_connect():
Authentication plugin 'caching_sha2_password' reported error:
Authentication requires secure connection. : 2061
Root cause: the bundled proxysql_binlog_reader v2.3 supports only
-h/-u/-p/-P/-l/-L options — no SSL, no --get-server-public-key.
MySQL 9.x's default caching_sha2_password requires either SSL or a
preconfigured RSA public key, neither of which the reader can provide.
mysql_native_password isn't a workable escape hatch on 9.x either:
the .so still ships in the tarball but `INSTALL PLUGIN` fails with
"Can't find symbol '_mysql_plugin_interface_version_'" — it's kept
as a client library stub only.
Resolution requires either (a) a newer proxysql_binlog_reader that
speaks caching_sha2_password or supports SSL, or (b) SSL wrapping
at the container level. Neither change is part of this commit;
flagging here so the limitation is visible when the tests start
failing under mysql{90,95}-binlog-g[12].
MySQL 8.4 binlog flow is unaffected.
|
1 month ago |
|
|
f07859fd40 |
feat(tests): mirror mysql84-g[1-5] test sets into mysql95-g[1-5]
Every TAP test currently executed against mysql84-g[1-5] is now also
executed against the corresponding mysql95-g[1-5] group. Same 5-bucket
split, same assignment per bucket:
mysql84-g1: 78 → mysql95-g1: 78
mysql84-g2: 42 → mysql95-g2: 42
mysql84-g3: 40 → mysql95-g3: 40
mysql84-g4: 60 → mysql95-g4: 60
mysql84-g5: 5 → mysql95-g5: 5
total: 225 total: 225
Rationale: validates the full 8.4 test surface on MySQL 9.5, which is
the whole point of adding the 9.x infras — different MySQL major
versions catch different regressions (e.g., mysql_native_password
removal in 9.0). Group Replication variants (mysql*-gr-g*) are
intentionally out of scope for now.
Scripted via a simple walk over groups.json: for each entry containing
mysql84-gN, add mysql95-gN if missing, then re-sort. Verified:
- 209 new memberships added (225 target - 16 already existing from
the earlier mysql95-g1 seeding)
- check_groups.py reports 385/385 tests registered, no orphans
- per-bucket counts now match mysql84-g[1-5] exactly
|
1 month ago |
|
|
360d425900 |
fix(infra): use actual mysql-9.x-linux-glibc2.17-x86_64 tarball names
My earlier guess was wrong — I hadn't verified against dbdeployer's
actual remote catalog. The real x86_64 bundles use glibc2.17 (glibc2.28
is only shipped for aarch64). Confirmed via:
dbdeployer downloads list | grep mysql-9.[035]
...
mysql-9.0.1-linux-glibc2.17-x86_64.tar.xz
mysql-9.3.0-linux-glibc2.17-x86_64.tar.xz
mysql-9.5.0-linux-glibc2.17-x86_64.tar.xz
Smoke-tested both mysql90 and mysql90-gr images end-to-end:
- docker build succeeds
- entrypoint completes (3-node replication deployed, GR members all ONLINE)
- testuser authenticates successfully on all three ports via
caching_sha2_password (default plugin, since we dropped
mysql_native_password in the previous commit)
- GR user replication propagates to all secondaries
|
1 month ago |
|
|
de9e73cb5f |
feat(infra): add dbdeployer-based MySQL 9.0/9.3/9.5 standalone and GR infras
Mirrors the existing mysql84 / mysql84-gr layout (single-container dbdeployer
sandboxes) for MySQL 9.0, 9.3, and 9.5 — both standalone replication and
Group Replication variants.
New infrastructures:
test/infra/infra-dbdeployer-mysql{90,93,95}/ — standalone replication (3 nodes)
test/infra/infra-dbdeployer-mysql{90,93,95}-gr/ — Group Replication (3 nodes, single-primary)
Hostgroup PREFIX assignment (continuing the existing convention):
mysql90 PREFIX=31 (WHG/RHG/BHG/OHG = 3100/3101/3102/3103)
mysql93 PREFIX=32 (3200/3201/3202/3203)
mysql95 PREFIX=33 (3300/3301/3302/3303)
mysql90-gr PREFIX=34 (3400/3401/3402/3403)
mysql93-gr PREFIX=35 (3500/3501/3502/3503)
mysql95-gr PREFIX=36 (3600/3601/3602/3603)
MySQL 9.x tarballs (via dbdeployer downloads get-unpack) use glibc2.28
(9.x no longer ships glibc2.17 bundles):
mysql-9.0.1-linux-glibc2.28-x86_64.tar.xz
mysql-9.3.0-linux-glibc2.28-x86_64.tar.xz
mysql-9.5.0-linux-glibc2.28-x86_64.tar.xz
MySQL 9.x compatibility notes:
- mysql_native_password was removed in MySQL 9.0. Dropped both the
-c mysql_native_password=ON dbdeployer flag and the IDENTIFIED WITH
'mysql_native_password' clause from CREATE USER / ALTER USER; users
now use the server default (caching_sha2_password).
ProxySQL may need SSL to authenticate to 9.x backends because
caching_sha2_password requires either SSL or a preconfigured RSA key.
This is left to follow-up tuning — flagging here for visibility.
Group wiring (test/tap/groups/):
mysql{90,93,95}/ — env.sh + infras.lst + setup-infras.bash + pre-proxysql.bash (no-op)
mirror mysql84/ exactly, only the infra/group names differ
mysql{90,93,95}-gr/ — env.sh + infras.lst + pre-proxysql.bash
mirror mysql84-gr/; pre-proxysql.bash uses docker exec
to configure ProxySQL with GR fallback HGs + users + rules
groups.json: registered mysql95-g1 and mysql95-gr-g1 (16 tests each),
identical test sets to the existing mysql93-g1 / mysql93-gr-g1 entries.
check_groups.py reports 385/385 tests registered, no orphans.
No changes touching existing infras; only new files + groups.json append.
Validated with `python3 test/tap/groups/check_groups.py`.
|
1 month ago |
|
|
5c3bc7dee2 |
fix(infra): cap pgsql_servers max_connections to 50 per HG
ProxySQL was configured with pgsql_servers.max_connections=500 on BOTH
hostgroups (0 and 1) pointing at the same backend, implying a pool cap of
1000 connections against a PostgreSQL container that only allows 120
(117 non-super). Under test workload the non-super slots would fill up
and PostgreSQL rejected new Monitor connects with:
FATAL: remaining connection slots are reserved for roles with the
SUPERUSER attribute
This caused pgsql-monitor_ssl_connections_test-t (PHASE 1) and
pgsql-servers_ssl_params-t (test 33) to fail — the SSL Monitor counter
couldn't advance because the Monitor couldn't connect.
PostgreSQL doesn't scale well with connection count, so lower the
per-hostgroup cap to 50 (total 100 across the two HGs), leaving ample
headroom under PG's max_connections=120 for monitor + superuser slots.
The 500 value was templated from the MySQL/MariaDB infras during
unify-PR-5433-5442, where each backend's server-side max_connections=500
matches ProxySQL's cap. PostgreSQL here is a different beast and the
copy-paste didn't fit.
|
1 month ago |
|
|
1320e7dbe6 |
feat(infra): add infra-dbdeployer-mysql84-gr and update mysql84-gr group
New single-container MySQL 8.4 Group Replication infra using dbdeployer with --topology=group --single-primary. Replaces the non-existent infra-mysql84-gr with a working dbdeployer-based setup. Changes: - infra-dbdeployer-mysql84-gr: Dockerfile, entrypoint (GR topology), docker-compose, init/destroy, post scripts, ProxySQL config with mysql_group_replication_hostgroups - mysql84-gr/env.sh: set DEFAULT_MYSQL_INFRA - mysql84-gr/infras.lst: point to infra-dbdeployer-mysql84-gr - mysql84-gr/pre-proxysql.bash: rewritten to use proxysql hostname (not 127.0.0.1), dbdeployer1 servers (not mysql1/2/3), and let the framework handle infra startup GR-specific: SQL_LOG_BIN stays enabled so user creation replicates to all nodes. Monitor user has SELECT on sys.* and performance_schema.* for GR health checks. |
1 month ago |
|
|
7c7dee4b66 |
feat(infra): add infra-dbdeployer-mysql84-gr for Group Replication
Single-container MySQL 8.4.8 Group Replication infra using dbdeployer with --topology=group --single-primary. One container runs 3 mysqld nodes in a single-primary GR cluster on ports 3306/3307/3308. Key differences from master-slave: - GR topology with automatic failover - mysql_group_replication_hostgroups (4 hostgroups: writer/backup_writer/reader/offline) - Monitor user has SELECT on sys.* and performance_schema.* for GR health checks - PREFIX=30, WHG=3000, RHG=3001, BHG=3002, OHG=3003 |
1 month ago |
|
|
824588d198
|
Merge pull request #5606 from sysown/lint-tap-tests-static-analysis
WIP: TAP test linting and partial cleanup |
1 month ago |
|
|
13a43e2ffe |
fix(test/tap): revert two semantic regressions from cleanup commits
Two recent "cleanup" commits on this branch silently changed test behavior and caused the tests to fail under myrun2. 1) kill_connection2-t.cpp (regressed in |
1 month ago |
|
|
3babaada88 |
fix: remove stale gtid_utils_unit-t from groups.json
This test was removed in
|
1 month ago |
|
|
2b89708e5f |
fix: treat missing test executables as errors in check_groups.py
Previously tests listed in groups.json but not found on disk were only printed as notes. Now they cause a non-zero exit code. |
1 month ago |
|
|
6f5cf1f169 |
fix: sort groups.json keys after v3.0 merge
|
1 month ago |