mirror of https://github.com/sysown/proxysql
docs/passthrough-auth-spec
feature/aws-rds-monitor
v3.0_fix_ci-mysqlx-cache-and-soak
GH-Actions
v3.0
v3.0_fix_codecov-coverage-path-prefix
issue-1288-load-mysql-variables-feedback
ci/fix-pgsql-socket-g1-cache-key
v3.0_fix_ci-mysqlx-fetch-depth
cleanup/drop-unreachable-port-defaults
feature/pgsql-native-backend-protocol
fix/pgsql-unix-socket
ci-pgsql-socket-g1
v3.0_fix_coverage-gcov-prefix-strip
fix/pgsql-omit-port-zero
aws-rds-bg
fix/jemalloc-page-size-auto-detect
feature/ci-codecov-tap-all-groups-callers
fix/run-tests-backtick-leak
ci/zstd-level-15
feature/ci-codecov-tap-all-groups-callees
v3.0_partition-fairness
feature/ci-codecov-tap-legacy-g2
v3.0_partition-gate
fix/ci-cache-restore-path
v3.0_fix-stale-pause-until
feature/perf-improvements-test2
fix/kill-proxysqlgenai-build-flag
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
v3.0_merge-5776-5784
v3.0_latency_consistency_improvement
fix/galera-g5-cluster-start
fix/ghcr-pull-retry
v3.0_cap_violation_5767
ci-mariadb10-galera-GH-Actions
ci/fix-gr-g5-cluster-start
ci-mysql84-gr-g1-g9-GH-Actions
perf/pull-ci-base-from-ghcr
fix/split-test-groups
fix/rename-set-parser-workflow
gh-actions/add-set-parser-algorithm-3-g1
fix/4760-advertise-lenenc-auth-capability
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
feature/mysqlx-tls-passthrough
feature/mysqlx-asymmetric-tls
feature/mysqlx-state-machines
feature/build-tsan-plumbing
feature/mysqlx-observability-p0
fix/mysqlx-review-findings
v3.0-test-ci
ci/fix-mysql-apt-key-expired-v2
ci/fix-mysql-apt-key-expired
mariadb-rpl-helper
fix-fc-parsing
ci/fix-upload-artifact-eacces
ci/fix-cache-prune-permissions
ci/shrink-test-cache
ci/fix-tap-build-target
ci/gh-actions-readme-pointer
ci/fix-mysql84-infradb-label
ci/add-missing-group-reusables
infra-mysql57-binlog
feature/pgbouncer-compat
v3.0_pgsql_sslkeylog_5281
fix/5554-resolution-family-limitation
fix/3p-ci-error-handling
v3.0-5493
v3.0-ci260322_cluster
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_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.9
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.0.9
v3.1.6
v3.1.7
v3.1.8
v3.1.9
v4.0.6
v4.0.7
v4.0.8
${ item.name }
${ noResults }
200 Commits (feature/pgsql-native-backend-protocol)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
792d48d801 |
fix(build,ci): clang package builds + arm64 package verification
Two release-blocking bugs surfaced while building 3.0.9/3.1.9 packages: 1. clang builds (16 distro variants) failed at deps build with exit 127. Root cause: vendored ParserSQL's Makefile hardcoded `CXX = g++`, which the `CC=.. CXX=.. make` env prefix does not override, so clang containers (no g++) could not compile src/sql_parser/*.o. Fixed upstream in ParserSQL 1.0.9 (CXX ?= g++); re-vendored the 1.0.9 tarball and repointed the symlink. No change needed to deps/Makefile. 2. arm64 base package builds (14 distros) failed in the new 'Verify package installs' step: verify-package-install.bash used `file` (and `which`), absent in slim base images, so verification aborted after a good build and blocked the upload. Replaced with a portable ELF-magic check (head -c4 + od) and `command -v`. |
3 weeks ago |
|
|
b7b2be0cd4 |
fix(ci): scrub unescaped double quotes from coverage-trap comment
Second self-inflicted breakage on top of
|
1 month ago |
|
|
76bfaf5277 |
fix(ci): remove backticks from explanatory comment that itself triggered the bug
Self-inflicted regression on a94ba88a2: the comment intended to warn
the next contributor about the backtick-in-bash-c trap reintroduced
the same trap twice, in markdown-style code references:
# script is wrapped in `bash -c "..."`, and inside the
# outer double quotes backticks trigger command
# substitution, so `SF:proxysql/...` would make the outer
^^^^^^^^^^^^^^^^^
command substitution: bash tries to execute
this token as a command, prints "No such file
or directory", trips set -e on the outer
docker-run line, the test step exits before
any container starts.
The previous cascade tally was misleading: the runs at commit
|
1 month ago |
|
|
ca90fb540b |
fix(coverage): mount .gcno files into ProxySQL container so gcov runtime resolves daemon coverage
Daemon-side coverage has been silently empty since gcov was first
wired up. The TAP cascade hits the right code paths and the tester
calls `PROXYSQL GCOV DUMP` after every test (proxysql-tester.py
line 880), and proxysql writes 226 .gcda files into /gcov. But every
single one of them lands with empty metadata:
[error]: Missing 'current_working_directory' for data file:
{'data_file': '/gcov/obj/MySQL_Query_Processor.gcda', 'files': []}
[error]: Missing 'current_working_directory' for data file:
{'data_file': '/gcov/obj/MySQL_Session.gcda', 'files': []}
... (x226)
fastcov gives up on every one of them. The resulting .info file has
zero `lib/*.cpp` SF: entries -- only the ~200 header files indirectly
pulled in by other sources. Codecov then reports
`lib/MySQL_Session.cpp`, `lib/MySQL_Monitor.cpp`,
`lib/MySQL_Protocol.cpp`, `lib/Admin_Handler.cpp`,
`lib/MySQL_Logger.cpp`, `lib/MySQL_PreparedStatement.cpp`,
`lib/ProxySQL_Cluster.cpp` and dozens more at **0% coverage** even
though they're the hottest paths in the daemon.
Root cause: the proxysql binary is built inside the build container
with the source bind-mounted at /opt/proxysql/ (docker-compose.yml
`- ./:/opt/proxysql/`). gcc embeds the .gcno paths into the binary as
`/opt/proxysql/{lib,src}/obj/X.gcno`. At runtime, gcov reads those
.gcno files at startup to populate per-translation-unit metadata that
later goes into the .gcda files written by __gcov_dump(). The
proxysql RUNTIME container has the binary but does NOT have the .gcno
files at /opt/proxysql/{lib,src}/obj/ -- the entire 'current_working
_directory' field of every .gcda comes out blank.
Fix: mount the .gcno files from the build cache into the proxysql
container at the compile-time path. The build cache restore already
puts them at ${WORKSPACE}/lib/obj/*.gcno and ${WORKSPACE}/src/obj/
*.gcno on the runner, so this is just two extra `-v ...:ro` mounts
on the docker run in start-proxysql-isolated.bash.
Always-on, gated on .gcno presence: for a non-coverage build, the
WORKSPACE has no .gcno files and the conditional adds nothing.
This is the missing piece behind every prior coverage attempt --
PR #5817 (lib-only unit tests) bypassed it by running tests in the
same container that built proxysql, PR #5818 (legacy-g2 TAP) hit
exactly this bug and quietly uploaded a near-empty .info that
Codecov merged with the unit-test data, masking the issue under a
reasonable-looking 15% aggregate.
|
1 month ago |
|
|
a94ba88a20 |
fix(ci): stop leaking backticks from coverage trap into outer shell
The coverage-collection trap inside `run-tests-isolated.bash` is
embedded in a `docker run ... /bin/bash -c "..."` block where the
script body is the argument to `bash -c`, double-quoted. Inside double
quotes, backticks are still command substitution.
One comment line in the SF: path-normalization block had used
markdown-style backticks for code formatting:
# as `SF:proxysql/...` get resolved -- the other two forms
The outer shell sees `SF:proxysql/...` as command substitution, tries
to execute `SF:proxysql/...` as a command before passing the body to
docker, and prints to the runner log on every TAP run:
test/infra/control/run-tests-isolated.bash: line 275:
SF:proxysql/...: No such file or directory
(Line 275 is where the `docker run \` compound command begins.)
The error is non-fatal: the substitution evaluates to the empty
string, the inner bash receives a comment with that empty
substitution still inert, and the actual `sed -i` normalization a few
lines below runs correctly. Codecov uploads have been working. But:
- log noise looks alarming and got asked about,
- any future "comment" with backticks in this block silently
executes as a real command in the outer shell -- a footgun
waiting for the next contributor.
Fix: swap the backticks for single quotes and add a sibling comment
explaining the trap so the next author doesn't reintroduce it. No
behavior change for the test infrastructure or coverage upload.
|
1 month ago |
|
|
12b84f98bd |
fix(coverage): normalize SF: paths in LCOV report so Codecov stores all files
The previous green run (
|
1 month ago |
|
|
d35043ff91 |
fix(coverage): match .gcno to .gcda by basename, not path-strip
The previous algorithm in run-tests-isolated.bash's collect_coverage
function stripped leading path components off a .gcda relative
path and looked up `${WORKSPACE}/<stripped>.gcno`. That only
works when the .gcda relative path is a path-suffix of the .gcno
absolute path -- and for the ProxySQL daemon it's not.
The proxysql binary is built with CWD=/opt/proxysql/lib/, so the
embedded path in each .gcda is /opt/proxysql/lib/obj/X.gcda. The
daemon container runs with GCOV_PREFIX=/gcov and
GCOV_PREFIX_STRIP=3, which drops /opt/proxysql/lib/, landing the
.gcda at /gcov/obj/X.gcda. The matching .gcno is at
${WORKSPACE}/lib/obj/X.gcno -- but the previous lookup only tried
${WORKSPACE}/obj/X.gcno and ${WORKSPACE}/X.gcno, never thinking to
prepend lib/. Result: every daemon .gcda was logged by fastcov as
"Missing 'current_working_directory'" with an empty files list, and
the .info report came out 0 bytes.
This replaces the strip-and-retry loop with an index built from
`find ${WORKSPACE} -name '*.gcno'` mapping basename -> path, and
looks each .gcda up by basename. Robust to GCOV_PREFIX_STRIP,
build CWD, and arbitrary path layouts. ProxySQL doesn't reuse
.cpp basenames across directories, so basename collision is not
a concern.
Also emits a `matched=N unmatched=M` summary so the next time
something goes wrong with coverage, the failure mode is loud.
Requires the companion change on GH-Actions ci-builds.yml
(extends the _src cache to include proxysql/lib/obj/*.gcno) --
without that, the .gcno files for daemon-side lib code aren't
available in the test workflow's WORKSPACE at all.
|
1 month ago |
|
|
cda58357b2
|
Merge branch 'v3.0' into feature/ci-codecov-unit-tests
|
1 month ago |
|
|
10f45ab168 |
fix(coverage): drop src/ from unit-test lcov capture; unblock report
The unit-test coverage script captured lcov data from both lib/ and src/. Unit tests link only against libproxysql.a built from lib/ -- src/ contains main.cpp + a handful of binary-entry helpers, none of which any *-t test binary touches. So there is never a .gcda file in src/ from this workflow's run. lcov 2.x flags "no .gcda files found in <dir>" as an *empty*-class error, which is NOT covered by the existing `--ignore-errors gcov,source[,mismatch]` allowlist. With the error unhandled, lcov aborts without writing the output .info file, the subsequent merge step finds neither lcov-base.info nor lcov-tests.info populated, and the workflow's downstream "Upload coverage LCOV file" step warns "No files were found". This silent failure has been latent since the script was written -- the workflow's success was determined by the test pass/fail count, not by whether coverage actually got produced. The empty-artifact problem became visible only when PR #5817's Codecov upload step became the first thing to actually try consuming the file (and likewise reported no files to send). Fix: capture from lib/ only (the semantically-correct scope for unit tests) and add `empty` to --ignore-errors as belt-and-suspenders against a future test reorganisation that produces a partially-empty directory tree. Validation runs in the dispatched CI on feature/ci-codecov-unit-tests; the artifact listing should flip from 0 entries to a non-empty `unit-tests-coverage-lcov-<sha>` and Codecov should ingest the upload. |
1 month ago |
|
|
c648dc92d8 |
ci: verify package install on clean distro before release upload
Add verify-package-install.bash that installs the built .deb/.rpm on a clean Docker image of the target distro and runs smoke tests: - proxysql --version catches missing runtime shared library deps - Plugin .so file presence at /usr/lib/proxysql/ (auto-detected) - ELF header validation on installed binaries The script auto-detects whether the package ships plugins by inspecting dpkg -c / rpm -qpl, so it works for both v3.0 (no plugins) and v4.0 genai/mysqlx packages. Wire it into all 28 CI-package-arm64-* workflows (14 genai + 14 base) between the Build and Upload steps. If verification fails, the build job fails and the package never reaches the release draft. |
1 month ago |
|
|
0d39ac6991 |
build: kill PROXYSQLGENAI flag, PROXYSQL40=1 builds all plugins
PROXYSQLGENAI was a leftover from before the genai plugin carve-out. All genai/MCP/AI/RAG code now lives in plugins/genai/ as a runtime loadable .so. Since the plugin chassis (PROXYSQL40=1) already builds and loads the genai .so, a separate flag serves no purpose. Entrypoint changes (all three -- rhel, suse, deb): - Build: pass PROXYSQL40=1 (not PROXYSQLGENAI=1) to make. - Packaging: copy genai .so alongside mysqlx when PROXYSQL40=1. - protobuf-devel install: gate on PROXYSQL40=1 (needed for mysqlx). Automated packaging verification added to all entrypoints: rpm -qpl / dpkg -c confirms both .so files are in the package. ELF smoke test: validates .so is a valid shared object exporting proxysql_plugin_descriptor_v1 symbol. Fails build on mismatch. Test Makefiles: PROXYSQLGENAI -> PROXYSQL40 for the vec.o link gate (test/tap/tests/Makefile and test/deps/cluster_simulator/Makefile). Updated remaining PROXYSQLGENAI references to PROXYSQL40 in: CLAUDE.md, include/cpp.h, lib/proxy_sqlite3_symbols.cpp, src/main.cpp (3x comments), proxysql.spec, test/infra/control/start-proxysql-isolated.bash, test/infra/control/run-unit-tests-asan-coverage.bash, and 14 genai test file comments. |
1 month ago |
|
|
57d67a8362 |
Merge branch 'v3.0' into cluster-simulator
|
2 months ago |
|
|
2a19a002c8 |
fix(ci): Galera infra fixes for libssl1.0, SST method, and pre-proxysql hook
- Add libssl1.0.0 compat package for Galera wsrep provider (linked against OpenSSL 1.0, not available in Ubuntu 22.04) - Switch wsrep_sst_method from rsync to mariabackup (rsync SST fails on fresh clusters with no binlogs) - Fix pre-proxysql.bash: run_admin grep returns non-zero when only warnings are filtered, killing the script with set -e - Fix pre-proxysql.bash: wait loop uses direct docker exec instead of run_admin to properly detect ProxySQL readiness |
2 months ago |
|
|
6c5d0fd5db |
Merge branch 'v3.0' into cluster-simulator
|
2 months ago |
|
|
cfad7c8554 |
feat(ci): add mariadb10-galera TAP group with CI-mariadb10-galera-g[1-9] workflows
|
2 months ago |
|
|
530faacdc4 |
fix(ci): set report_host for GR nodes to Docker network hostname
Without report_host, MySQL GR nodes report member_host as 127.0.0.1 in performance_schema.replication_group_members. ProxySQL's GR monitor auto-discovers these nodes using 127.0.0.1, which is unreachable from the ProxySQL container, causing perpetual discover→offline→rediscover cycles and mysql_servers checksum churn that prevents cluster sync. |
2 months ago |
|
|
0d21b77d36 |
Revert "fix(ci): remove duplicate GR hostgroup fallback from docker-proxy-post"
This reverts commit
|
2 months ago |
|
|
4715f48aed |
fix(ci): remove duplicate GR hostgroup fallback from docker-proxy-post
docker-proxy-post.bash created a second mysql_group_replication_hostgroups with writer=0/reader=1 AND inserted fallback servers in HG 0/1. Combined with the primary GR config (HG 3000/3001 from infra-config.sql), the GR monitor managed two hostgroup sets simultaneously. Auto-discovered nodes were added to both HG 1 and HG 3001, resolved as 127.0.0.1 (unreachable), causing perpetual discover→offline→rediscover cycles and checksum churn that prevented cluster sync from converging. |
2 months ago |
|
|
eaa57d0f58 |
Merge branch 'v3.0' into cluster-simulator
|
2 months ago |
|
|
99ccfc766a
|
Merge branch 'v3.0' into v3.0-genai-plugin
|
2 months ago |
|
|
1d2eea260c |
ci(asan-coverage): containerise unit-tests workflow + extract runner script
Ports CI-unit-tests-asan-coverage from host-direct execution to Docker isolation, mirroring the architecture established for TSAN in PR #5725. Closes #5721 for the ASAN-coverage half. Why: Two parallel CI runs on a shared / self-hosted runner can no longer collide on the host filesystem (no /opt/proxysql contention, no toolchain skew between build env and run env). The runner stays clean — no host-direct `apt install lcov fastcov`, no host-direct `make build_deps_debug` polluting it. Architecture: * Build phase: `make ubuntu24-tap` with WITHASAN=1 WITHGCOV=1 NOJEMALLOC=1 PROXYSQLGENAI=1, runs entirely inside the ubuntu24_dbg_build container (same path TSAN uses). * Test+coverage phase: `docker compose run --rm` re-enters the same image and invokes the new canonical runner script test/infra/control/run-unit-tests-asan-coverage.bash. The workflow YAML is now a thin wrapper around the script — local repro and CI execute the exact same command. The extracted script: * Iterates every executable under test/tap/tests/unit/ (drop-in replacement for the old host-direct loop). Deliberately not routed through run-tests-isolated.bash because that runner's dual-directory test discovery (test/tap/tests/ in addition to .../unit/) pulls in misclassified entries from groups.json that aren't actually unit tests (e.g. unit-strip_schema_from_ query-t lives in test/tap/tests/, needs backend infra, fails silently as a host-direct binary). Cleaning that up is out of scope here. * Captures baseline (--initial) + post-test LCOV, merges, filters /usr + deps + test, runs genhtml. * Idempotent on lcov / libprotobuf-dev — only apt-installs when missing so re-running locally inside the same container is fast. * Honours ASAN_OPTIONS from the caller; defaults match the env block at the top of the workflow. PROXYSQLGENAI=1 stays (instead of dropping to PROXYSQL40=1) — the unit-test set includes genai_*_unit-t binaries that only build under the genai tier. Coverage scope is unchanged from the pre-Docker workflow. Verified locally — same `make ubuntu24-tap` + `docker compose run --rm ... run-unit-tests-asan-coverage.bash` invocation the workflow uses: 83/83 unit tests pass under ASAN, coverage report generated (13.1% lines / 21.3% functions, expected for the unit-only scope), lcov.info + coverage/html/ + unit-test-logs/ all land in the host workspace via the bind mount. Workflow YAML net diff: -185 lines (the test+coverage logic moved out of the YAML into the script). |
2 months ago |
|
|
25e4388ae6 |
feat(plugins/genai): Step 7 follow-up — Phase B schema registration + ai-g1 plugin wiring
Three small but related fixes that unblock running the ai-g1
integration suite against the post-Step-7 build.
1. Plugin: register MCP admin tables in Phase B (register_schemas),
not Phase C (init).
The chassis ABI guarantees that tables registered via
`services->register_table` from a plugin's `register_schemas`
callback are merged into the admin SQLite schema BEFORE admin
bootstrap creates the DB. Registering at init() instead is too
late: by then the DB is already created without the
plugin-declared tables.
The genai plugin was registering at init(). Symptom: at
plugin start (Phase D) the call into
`mcp_load_target_auth_map_from_admindb` errored out with
"no such table: runtime_mcp_auth_profiles" because the table
never got created.
plugins/genai/src/plugin_main.cpp:
- New `genai_register_schemas` callback that invokes
`genai_register_admin_tables(services)`.
- Plugin descriptor gains the `register_schemas` field
(mirrors plugins/mysqlx pattern; Step 0's
PROXYSQL_PLUGIN_ABI_VERSION = 2 supports it).
- Removed the redundant call in genai_init().
2. Core: drop PROXYSQLGENAI gates that Step 7 left around the SET
mcp-X / SET genai-X validation paths.
Step 7 stopped passing -DPROXYSQLGENAI to core compiles, so the
`#ifdef PROXYSQLGENAI` blocks I'd left in lib/Admin_Handler.cpp
for the loose-prefix `mcp-*` / `genai-*` validators (Step 4.F /
Step 5) silently expanded to nothing. Symptom:
`SET mcp-port=6071` admin SQL got "Unknown global variable".
lib/Admin_Handler.cpp:
- Loose mcp-* / genai-* prefix checks in is_valid_global_variable
are now unconditional (no #ifdef).
- The MCP VARIABLES disk-side handler (LOAD MCP VARIABLES FROM
DISK / SAVE MCP VARIABLES TO DISK) is also un-gated; it's pure
SQL DML against global_variables LIKE 'mcp-%' with no plugin
runtime dependency. The plugin-side runtime push remains the
LOAD MCP VARIABLES TO RUNTIME verb registered in
plugin_commands.cpp.
3. Test infra: bind-mount the genai plugin .so + per-group cnf for
ai-g1, mirroring the mysqlx-soak / mysqlx-e2e pattern.
Without these, the ai-g1 setup hook fails at SET mcp-port because
the proxysql container's cnf doesn't list `plugins=("...")` and
the .so isn't visible inside the container.
test/infra/control/start-proxysql-isolated.bash:
- PROXYSQL_LOAD_GENAI_PLUGIN=1 (set by the group's env.sh) now
triggers a `-v ${WORKSPACE}/plugins/genai/...so:/usr/lib/proxysql/...so:ro`
bind into the proxysql container.
test/tap/groups/ai/proxysql-ci.cnf (new):
- Identical to test/infra/control/proxysql-ci.cnf except for the
trailing `plugins=("/usr/lib/proxysql/ProxySQL_GenAI_Plugin.so")`
line that asks the chassis to load the genai plugin at
Phase A.
test/tap/groups/ai-g1/env.sh:
- PROXYSQL_LOAD_GENAI_PLUGIN=1
- PROXYSQL_CONFIG_OVERRIDE=…/test/tap/groups/ai/proxysql-ci.cnf
After this commit the ai post-infras hook (`MCP configuration
completed` … `MySQL test data seeding completed` … `PostgreSQL test
data seeding completed` … `AI post-infras hook completed`) runs to
completion against the post-carve-out proxysql + genai plugin .so.
|
2 months ago |
|
|
7773aa9743 |
fix(test/infra): comment out stale admin-debug / debug_filters / LOAD-DEBUG SQL
The dev/CI infrastructure scripts and the per-infra proxysql config SQL still issue several legacy admin commands that are no longer recognised by the current proxysql binary: SET admin-debug='true' -- variable doesn't exist UPDATE debug_levels … -- table doesn't exist REPLACE INTO debug_filters … -- table doesn't exist LOAD DEBUG TO RUNTIME -- verb doesn't exist SAVE DEBUG TO DISK -- verb doesn't exist These have been gone from proxysql for some time (predates the GenAI plugin carve-out — `nm`-grep on a stock libproxysql.a turns up nothing matching `*debug*`). But the test harness still tries to set them on every cluster init, hard-failing ensure-infras.bash before any backend (mysql / pgsql) gets a chance to come up. This commit comments out each of those SQL lines with a `-- LOCAL PATCH` marker. No upstream behavioural change (the commands were no-ops at best, hard errors at worst); the marker makes it easy to grep for them later when somebody decides whether to re-introduce the underlying admin features or remove the SQL entirely. Files patched: test/infra/control/cluster_init.bash test/infra/control/start-proxysql-isolated.bash test/infra/infra-mysql84/conf/proxysql/infra-config.sql Other infra-config.sql files under test/infra/ have the same SQL but weren't touched here — patch them on demand when their TAP groups are run. Unrelated to the GenAI plugin carve-out; just unblocks local infra setup on this branch. |
2 months ago |
|
|
d4427731b7 |
Merge remote-tracking branch 'origin/v3.0' into plugin-chassis
Picks up the v3.0 fixes that unblock plugin-chassis CI: - |
2 months ago |
|
|
fefa5f646a |
CI: Remove `sudo` dependency from isolated CI startup
Signed-off-by: Wazir Ahmed <wazir@proxysql.com> |
2 months ago |
|
|
99a745f6ed |
ci(mysqlx): wire mysqlx-soak group into TAP harness end-to-end
Completes the four follow-up items documented in the mysqlx-soak
group's README. After this commit, the harness scripts run inside
the proper docker-isolated TAP framework — no more ad-hoc invocations.
## (1) Add mysql-connector-python to proxysql-ci-base
test/infra/docker-base/Dockerfile installs python3 + a few pip
packages but lacked the X DevAPI bindings. Add
`mysql-connector-python` to the existing `pip3 install` line. Image
must be rebuilt (`docker build -t proxysql-ci-base:latest
test/infra/docker-base`); the new soak-tests CI job rebuilds
unconditionally per run, so CI gets the new package automatically.
## (2) TAP wrappers for the harness scripts
Two new Bash TAP entries under test/tap/tests/:
* test_mysqlx_soak_behavioral-t.sh — emits two TAP assertions:
scenario 1 = SIGTERM-mid-traffic (the harness signals the proxysql
container with `docker kill -s TERM proxysql.${INFRA_ID}` mid-run
and verifies clients receive Mysqlx::Error 1053 instead of TCP
RST); scenario 2 = LOAD MYSQLX ROUTES TO RUNTIME mid-traffic.
Both fall back to "skip" if mysql-connector-python is missing,
or if the proxysql container is unreachable after scenario 1.
* test_mysqlx_soak_stress-t.sh — single TAP assertion that wraps
stress.py. Defaults to 60s/20-clients to fit a CI timeout; long
soaks invoke stress.py directly with --duration 24h per issue
#5677.
Both wrappers default the connection params to the docker-internal
hostname `proxysql` (via network alias) so they work from inside the
test-runner container; environment overrides let local invocations
point elsewhere.
## (3) Register in groups.json
Two new entries:
"test_mysqlx_soak_behavioral-t" : [ "mysqlx-soak-g1", "@proxysql_min_version:4.0" ],
"test_mysqlx_soak_stress-t" : [ "mysqlx-soak-g1", "@proxysql_min_version:4.0" ],
Both use the @proxysql_min_version:4.0 tag (the harness only makes
sense in chassis-aware builds). Lint passes (421 entries, sorted).
## (4) CI job
Add `soak-tests` job to .github/workflows/CI-mysqlx.yml. Pattern
mirrors CI-taptests-pgsql-cluster.yml: restore build cache, build
plugin, build proxysql-ci-base, ensure-infras (TAP_GROUP=mysqlx-soak),
run-tests-isolated (TAP_GROUP=mysqlx-soak-g1), cleanup, archive logs
on failure.
The job runs after unit-tests passes (same dependency as e2e-tests)
and is independent of e2e-tests (parallel execution OK).
## What this covers
* Builds the plugin and rebuilds the test image with the X DevAPI.
* Stands up a real MySQL 8.4 backend (3-node replication via the
existing infra-dbdeployer-mysql84 image, X protocol on port
23306-23308 inside the docker network).
* Stands up ProxySQL in a container with the plugin .so bind-mounted
and a per-group config that declares plugins=("...").
* The mysqlx-soak setup-infras hook provisions one route, one user,
one endpoint, reloads, and verifies the listener bound on 6603.
* Two TAP tests run inside the test-runner container against the
freshly-stood-up ProxySQL, exercising the plugin end-to-end.
## What this does NOT cover
* Long-running soaks (24-72h). The CI job runs a 60s stress for
signal; the full soak per issue #5677 needs staging.
* All compression/TLS combinations. The harness's defaults are
uncompressed + clear-text; matrix expansion is future work.
* Listener-port collisions across parallel CI runs. INFRA_ID
isolates docker-network names but the TAP_GROUP-scoped MYSQLX_
PROXYSQL_PORT (default 6603) is a single value. CI runs are
serial per workflow concurrency group; not a problem today but
worth flagging if matrix-fanout is added.
|
2 months ago |
|
|
7e70c347f3 |
test(mysqlx): wire harness into the docker-isolated TAP framework
Per user direction: never run proxysql directly outside the testing
environment. The harness scripts at test/scripts/mysqlx/ are correct
as Python clients, but their assumed invocation ('run them against a
hand-started proxysql') was wrong. The proper integration is the
existing docker-isolated TAP harness, which already brings up
ProxySQL + backends in containers on a private docker network.
This commit lays the framework groundwork for that integration. It is
NOT yet a complete invocation of the harness — that requires a docker
image rebuild (mysql-connector-python is not in proxysql-ci-base) and
a TAP-test wrapper, both documented in the new
test/tap/groups/mysqlx-soak/README.md TODO list.
## What landed
* test/infra/control/start-proxysql-isolated.bash:
- Optional plugin .so bind-mount when PROXYSQL_LOAD_MYSQLX_PLUGIN=1.
Mounts ${WORKSPACE}/plugins/mysqlx/ProxySQL_MySQLX_Plugin.so at
/usr/lib/proxysql/ProxySQL_MySQLX_Plugin.so inside the container.
Fails fast with a clear message if the .so is missing.
- Optional per-group config override via PROXYSQL_CONFIG_OVERRIDE.
Lets a group ship a proxysql-ci.cnf that declares plugins=("...")
so the chassis loads the plugin at Phase A — the generic config
has no plugins= line, by design.
* test/tap/groups/mysqlx-soak/ (new group):
- env.sh: sets PROXYSQL_LOAD_MYSQLX_PLUGIN=1, PROXYSQL_CONFIG_OVERRIDE
pointing at the per-group .cnf, SKIP_CLUSTER_START=1 (single-node
proxysql is enough), and the X-protocol port constants the
setup-infras.bash hook + harness scripts share.
- infras.lst: just infra-dbdeployer-mysql84 (existing 3-node MySQL
8.4 with X-protocol on classic+20000 by dbdeployer convention).
- proxysql-ci.cnf: copy of the generic config with one extra block:
plugins=("/usr/lib/proxysql/ProxySQL_MySQLX_Plugin.so")
- setup-infras.bash: standard group-setup hook. Waits for
mysqlx_users admin table to appear (sanity-check that the
plugin loaded at all), then provisions one route, one user, one
endpoint via admin SQL, reloads to runtime, and verifies the
mysqlx listener bound on port 6603.
- README.md: documents the four remaining work items needed to
actually invoke the harness as a TAP test (add mysql-connector-
python to docker-base, wrap harness as a TAP entry, register in
groups.json, wire into CI).
This commit is intentionally narrow: it adds the framework wiring
that lets a future commit invoke the harness from inside the
test-runner container. Anyone with the four TODO items completed can
run the harness against a real chassis-loaded ProxySQL via:
WORKSPACE=$(pwd) INFRA_ID=dev-$USER TAP_GROUP=mysqlx-soak \
test/infra/control/ensure-infras.bash
— which is the canonical TAP-harness entry point per CLAUDE.md.
The standalone Python harnesses at test/scripts/mysqlx/ remain
runnable for ad-hoc dev validation, but they are no longer the
primary path; the docker-isolated TAP group is.
|
2 months ago |
|
|
df7e335e23 |
fix(ci,infra): pass PROXYSQL40 to plugin build, remove orphaned infra files
Three CI/infra clean-ups that fall out of the independent review. 1) .github/workflows/CI-mysqlx.yml: pass PROXYSQL40=1 (and the implied tier flags) to `make` when building the mysqlx plugin. plugins/mysqlx/Makefile picks up tier flags from the environment and propagates them as -DPROXYSQL40 / -DPROXYSQL31 / -DPROXYSQLFFTO / -DPROXYSQLTSDB / -DPROXYSQLGENAI on every compile line. If the workflow runs `make` with no flags, the plugin is built without -DPROXYSQL40 — meaning the ProxySQL_PluginDescriptor and ProxySQL_PluginServices struct layouts compiled into the plugin .so differ from the layouts that the cached src/proxysql binary (built upstream by CI-trigger with the full tier flags) sees. The link succeeds and the first virtual dispatch into a plugin callback crashes or, worse, corrupts memory silently. The Makefile already warns about exactly this in lines 56-61. Pass the flags explicitly. 2) test/tap/groups/mysqlx-e2e/infras.lst + test/infra/docker-compose-mysqlx.yml: delete both — they are orphaned. `infras.lst` referenced `infra-mysqlx`, which has never existed under `test/infra/`. ensure-infras.bash would have errored on it — except `mysqlx-e2e/env.sh` exports SKIP_PROXYSQL=1, which makes ensure-infras.bash short-circuit at line 38 before it reaches the docker-compose loop. So infras.lst was both wrong AND unreachable — the worst combination for the next reader trying to figure out how the e2e group is wired. Similarly, `test/infra/docker-compose-mysqlx.yml` was a docker-compose file that no `infra-*/` directory points at, left over from an early plan to use Docker for the mysqlx backend that was abandoned in favour of dbdeployer. Both files are dead weight; delete them. 3) test/tap/groups/mysqlx-e2e/env.sh: comment the unconventional wiring so the next reader doesn't have to reverse-engineer it. Document why this group has no `infras.lst` / no `infra-mysqlx/` dir, why CI uses inline dbdeployer instead of ensure-infras.bash, and that setup-infras.bash + pre-cleanup.bash exist for local-only ad-hoc use today. 4) test/tap/tests/Makefile: drop the dangling `test_mysqlx_listener_smoke-t` target. That test was retired together with the dormant MysqlxWorker path in commit 98aee7db2; the unit/Makefile no longer builds it. The wrapper target in test/tap/tests/Makefile remained and would fail `make test_mysqlx_listener_smoke-t` with "no rule to make target". Replace with a NOTE pointing at where the listener-lifecycle coverage actually lives now (mysqlx_thread_unit-t, mysqlx_robustness_unit-t). Verified: the plugin still builds clean with the tier flags exported to the sub-make. No behavioural change for the docker-using groups. |
2 months ago |
|
|
1a42cd9f06 |
test: Add cluster simulator TAP groups
- Add 5 simulator-backed TAP groups (aurora, galera, group_repl, read_only, repl_lag). - Add a TAP test per group — thin wrappers around cluster_simulator sharing cluster_sim_runner.h. - start-proxysql-isolated.bash: inject CLUSTER_SIM_HOST_FILE entries into the proxysql container via docker --add-host. - ensure-infras.bash / destroy-infras.bash: tolerate groups that omit infras.lst; ensure-infras also dispatches both pre-proxysql.bash and pre-proxysql.sql. - test/infra/README.md documents the per-family build requirement. Signed-off-by: Wazir Ahmed <wazir@proxysql.com> |
2 months ago |
|
|
abda5410ea |
chore(CI): Remove regular mysql56-single infra
Signed-off-by: Wazir Ahmed <wazir@proxysql.com> |
2 months ago |
|
|
b3d4de0bc8 |
Merge remote-tracking branch 'origin/v3.0' into plugin-chassis
# Conflicts: # test/tap/groups/groups.json |
2 months ago |
|
|
baa5069eaf |
CI: Add `mysql56-single` test infra
Signed-off-by: Wazir Ahmed <wazir@proxysql.com> |
2 months 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). |
2 months 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. |
2 months 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.
|
2 months 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
|
2 months 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`.
|
2 months 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.
|
2 months 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 |
3 months ago |
|
|
65c7479557 |
fix(infra): collect SSL CA certs from ALL nodes, not just node1
dbdeployer generates separate SSL certs per MySQL node (master, node1, node2), each with a different CA. The docker-mysql-post.bash only collected from node1, so the cert bundle was missing the master's CA. This caused mysql-test_ssl_CA-t to fail with "certificate signature failure" on HG 1300 (writer/master on port 3306) while HG 1301 (reader including node1 on port 3307) succeeded. Collect CA certs from all 3 nodes into the cert bundle. |
3 months ago |
|
|
c215fab409 |
revert(infra): remove max_connect_errors, fix the root cause instead
|
3 months ago |
|
|
70a6194512 |
fix(infra): set max_connect_errors=10000 in dbdeployer entrypoints
The mysql-test_ssl_CA-t test generates many SSL connection failures (testing wrong CA bundles), which accumulate against max_connect_errors. MySQL's default of 100 is too low — the SSL test alone can generate hundreds of failed connection attempts. Set to 10000 as a reasonable threshold that won't mask real issues but tolerates SSL test failures. |
3 months ago |
|
|
bc70e570b5 |
revert(infra): remove max_connect_errors=100000 from dbdeployer entrypoints
The real fix for the blocked host errors was granting SUPER/REPLICATION SLAVE to the monitor user. Inflating max_connect_errors just masked the problem. Let MySQL use its default (100). |
3 months ago |
|
|
d5e1351860 |
fix(infra): don't delete SSL cert bundles in MariaDB docker-mysql-post
The MariaDB docker-mysql-post.bash was deleting dbservers-cert-bundle.pem and caservers-cert-bundle.pem, then failing to recreate them because MariaDB doesn't generate SSL certs in the sandbox datadir. This destroyed the MySQL CA cert that was already collected by the MySQL docker-mysql-post (which runs first), causing mysql-test_ssl_CA-t to fail with "self-signed certificate in certificate chain". The fix: skip cert bundle handling entirely in the MariaDB post script. |
3 months ago |
|
|
a3da04a4da |
fix(infra): add local_infile=ON to MySQL 8.4 dbdeployer entrypoints
MySQL 8.4 defaults local_infile to OFF. The old infra-mysql84 my.cnf had local_infile=ON. Without this, test_unsupported_queries-t fails because LOAD DATA LOCAL INFILE is disabled on the backend. |
3 months ago |
|
|
2656b312f5 |
fix(infra): don't override root/testuser hostgroup in MariaDB proxy-post
The MariaDB proxy-post was deleting and re-inserting root and testuser with default_hostgroup=1700 (MariaDB), overwriting the MySQL proxy-post's correct configuration of HG 1300 (MySQL). This caused tests to route queries to MariaDB instead of MySQL, resulting in: - "connection is locked to hostgroup 1700 but trying to reach 1300" - "Table 'test.sbtest1' doesn't exist" (tables on MySQL, query on MariaDB) The old infra-mariadb10 proxy-post didn't do this — it only loaded infra-config.sql (with INSERT OR IGNORE) and added fallback hostgroups. Match that behavior. |
3 months ago |
|
|
f17cccf435
|
Merge pull request #5622 from sysown/mariadb-rpl-helper
Use MariaDB replication helper for binlog TAP tests |
3 months ago |
|
|
e246a355b5 |
fix(infra): grant SUPER/REPLICATION SLAVE to monitor user in dbdeployer
ProxySQL's replication lag monitor runs SHOW SLAVE STATUS using the monitor user, which requires SUPER (MySQL 5.7, MariaDB) or REPLICATION SLAVE (MySQL 8.4+). Without this, every monitor check fails with "Access denied; you need SUPER, SLAVE MONITOR privilege", generating connection errors that eventually trigger max_connect_errors and block the ProxySQL host IP entirely. - MySQL 5.7 + MariaDB: add SUPER - MySQL 8.4: add REPLICATION SLAVE (SUPER is deprecated) |
3 months ago |
|
|
f5965e5c9e |
fix(infra): set max_connect_errors=100000 in all dbdeployer entrypoints
With many concurrent test groups running against dbdeployer containers, MySQL's default max_connect_errors=100 gets triggered, blocking the ProxySQL host IP. This caused cascading failures (42+ tests in g1 groups) with "Host is blocked because of many connection errors". Set max_connect_errors=100000 in all 5 dbdeployer infras. |
3 months ago |
|
|
24450eaf72 |
Use MariaDB replication helper for binlog TAP tests
- Replace the external binlog reader with a helper function which
uses mariadb replication functions.
- The helper opens replication sessions, sends `COM_REGISTER_SLAVE`,
and fetches heartbeats to verify the stream is active.
- It runs the same two-session flow required for TAP tests:
- `test_com_register_slave_enables_fast_forward-t`
- `test_binlog_reader_uses_previous_hostgroup-t`
Signed-off-by: Wazir Ahmed <wazir@proxysql.com>
|
3 months ago |