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
${ noResults }
285 Commits (6cdd4e697eb86982e3dfd2ceab009ead5da0efcb)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
54844df0bb
|
Merge branch 'v3.0' into v3.0-genai-plugin
|
2 months ago |
|
|
b340da9ab6 |
test(mysqlx): add behavioural TAP scaffolding for SIGTERM mid-traffic
Issue #5678 part (a) asks operators to demonstrate that an X-Protocol client connected to ProxySQL during SIGTERM receives a clean Mysqlx::Error frame with code 1053 ("Server is shutting down") rather than a TCP RST. The contract is: Mysqlx_Thread::run() -> for each session: MysqlxSession::shutdown_notify_client() -> send_error(1053, "Server is shutting down", fatal=true) -> client_ds_.write_to_net() -> if TLS: SSL_set_quiet_shutdown(1) + SSL_shutdown() (plugins/mysqlx/src/mysqlx_session.cpp:1875, plugins/mysqlx/src/mysqlx_thread.cpp:120-128). Why this is scaffolding, not an automated test: ProxySQL runs in its own Docker container under test/infra/control/run-tests-isolated.bash. Tests run in a separate test-runner container that does NOT have docker socket access, so it cannot kill -TERM the proxysql container. Even if it could, doing so mid-test would tear down the infrastructure that the rest of the TAP group expects to remain up. The harness has no "test that owns proxysql lifecycle" mode and adding one is out of scope. The equivalent automated path already exists out-of-band: test/scripts/mysqlx/behavioral_validation.py --scenario sigterm which (a) opens N X-Protocol sessions via mysql-connector-python, (b) os.kill(pid, SIGTERM)s the proxysql process directly, and (c) verifies each client's exception carries errno=1053 (Mysqlx shutdown frame), not a generic OperationalError-without-errno (TCP RST). It is invoked manually against staging or local-loop infrastructure where proxysql termination is acceptable. What this binary does: - Compiles + links, so groups.json registration exercises its existence on every CI run alongside the rest of the mysqlx-soak group; future drift in the link line or TAP harness shows up here, not at "we never built this". - At runtime, defaults to skip_all() with a pointer to the behavioral_validation.py script and the manual procedure documented in the file's header comment. - With MYSQLX_SIGTERM_INFLIGHT_OPT_IN=1 set, the binary refuses loudly (fails with a planned ok(false, ...)) rather than silently doing nothing, so an operator who flips the env var without first wiring up an automated body gets a clear signal. - Header comment includes the pseudocode for the future automated body so a follow-up PR can lift it directly. Wired into mysqlx-soak-g1 alongside the other mysqlx behavioural tests; the skip_all keeps CI green while the registration ensures the binary is built and the test name is well-known. Build: WITHASAN=1 NOJEMALLOC=1 PROXYSQLGENAI=1 make test_mysqlx_sigterm_inflight-t Verified that the binary skip_alls correctly when MYSQLX_SIGTERM_INFLIGHT_OPT_IN is unset: $ ./test_mysqlx_sigterm_inflight-t 1..0 # skip manual procedure -- see header comment. ... |
2 months ago |
|
|
9e6243026f |
test(mysqlx): add behavioural TAP test for LOAD MYSQLX ROUTES TO RUNTIME mid-traffic
Demonstrates issue #5678 part (b) end-to-end against a real ProxySQL instance with the mysqlx plugin loaded. The test: 1. Opens 5 X-Protocol clients to ProxySQL via route r1 and dispatches SELECT 1 on each so the session is past handshake/routing. 2. Connects to the admin port (classic protocol via libmariadbclient) and runs: DELETE FROM mysqlx_routes WHERE name='r1'; LOAD MYSQLX ROUTES TO RUNTIME; 3. Asserts each in-flight session can still execute SELECT 1 -- the contract from mysqlx_listener_reconcile.cpp::remove_listener_for_route ("in-flight sessions are NOT torn down on route removal; they continue against their already-resolved target_hostgroup_/target_address_/target_port_") matching MySQL's "DROP TABLE doesn't cancel in-flight queries" semantics. 4. Asserts a NEW TCP connect to the dropped route's port is refused (Mysqlx_Thread::remove_listener_for_route close()d the listener fd). 5. Restores the route via INSERT + LOAD MYSQLX ROUTES TO RUNTIME so downstream tests in the same group are not disrupted. Wired into the mysqlx-soak-g1 TAP group, which is the only group that provisions route r1 + user alice in ProxySQL (mysqlx-e2e-g1 uses SKIP_PROXYSQL=1 against a dbdeployer sandbox so the route doesn't exist there). Runs through the standard isolated docker harness (test/infra/control/run-tests-isolated.bash); requires no new infrastructure beyond what mysqlx-soak/setup-infras.bash already provisions. The test issues skip_all() if the X-Protocol listener is unreachable, which keeps it inert in groups that don't bring up the route-r1 fixture and on bare workstations without infrastructure. Build: WITHASAN=1 NOJEMALLOC=1 PROXYSQLGENAI=1 make test_mysqlx_route_drop_inflight-t Reuses the protocol helpers from plugins/mysqlx/src/mysqlx_protocol.cpp and the protobuf objects from plugins/mysqlx/proto/, identical to the existing test_mysqlx_e2e_*-t binaries. |
2 months ago |
|
|
16253a1c99 |
feat(plugins/genai): adopt ABI-3 separation-of-duties for runtime_mcp_*
Wire the genai plugin into the plugin-chassis ABI-3 contract added in PR #5688: Admin owns the editable mcp_<X> tables, the module owns the in-memory snapshot under its own mutex, and runtime_mcp_<X> is a chassis-projected view repopulated lazily by a refresh callback before each admin SELECT. No more triple-storage of profile / query-rule data. # MCP_Threads_Handler: per-table install / save / project triplets Replaces the monolithic load_target_auth_map(joined-resultset) with three independent triplets, mirroring the mysqlx config_store rework: install_<X>_from_admin reads main.mcp_<X>, replaces the in-memory snapshot vector under wrlock, rebuilds the joined target_auth_map (for profiles) save_<X>_to_admin_table REPLACEs main.mcp_<X> from the snapshot project_<X>_to_runtime_view DELETE+INSERT runtime_mcp_<X> from the snapshot — invoked only by the chassis runtime-view refresh dispatcher Two new vectors (auth_profiles_, target_profiles_, query_rules_) hold the authoritative per-table rows; target_auth_map remains as the joined view consumed by the listener and is rebuilt whenever either profile vector changes. # Plugin descriptor + table registration genai_register_admin_tables now also calls services->register_runtime_view for runtime_mcp_auth_profiles, runtime_mcp_target_profiles, and runtime_mcp_query_rules, pointing each at a project_*_to_runtime_view trampoline. The runtime_mcp_<X> tables stay registered for their CREATE TABLE schema only — their rows are entirely owned by the per-SELECT projection callbacks from this point on. # Admin SQL surface LOAD MCP PROFILES TO RUNTIME / LOAD MCP QUERY RULES TO RUNTIME now go through install_<X>_from_admin and never touch runtime_mcp_<X>. SAVE MCP PROFILES TO MEMORY is added (was missing pre-ABI-3) and joins SAVE MCP QUERY RULES TO MEMORY in pulling from the module snapshot instead of the runtime view. Query_Tool_Handler::refresh_target_registry no longer re-reads runtime_mcp_<X> via SQLite on every refresh; it consumes the in-memory snapshot directly through GloMCPH->get_all_target_auth_contexts(). # Drop stale GENAI:-prefix tests test/tap/tests/genai_{async,embedding_rerank,live_validation}-t.cpp were left over from before Step 4.A removed the GENAI: query-prefix escape hatch — they would all have failed under ai-g1. Delete them and their groups.json / ai/README.md references; equivalent coverage now flows through the MCP /mcp/ai endpoint and the genai_module-t suite that already drives the plugin surface. |
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 |
|
|
4080606672 |
feat(plugins/genai): Step 4.B — add backend_client helper for local-proxy connections
Per docs/superpowers/plans/2026-04-19-step4-mcp-subsystem-move.md
"Sub-step 4.B", introduces the helper that 4.D will use to rewire
Query_Tool_Handler and MySQL_Tool_Handler from direct-to-backend dialing
to dialing 127.0.0.1:<local-proxy-port>.
This commit is functionally a no-op: nothing in the plugin or core
calls the new helper yet. The .so links it in for future use; only
the unit test exercises it.
New files:
plugins/genai/include/backend_client.h
BackendTarget, MySQL/PgSQLDialResult, dial_*, dial_*_local,
LocalProxyEndpoint, parse_interfaces_first_tcp,
resolve_*_endpoint.
plugins/genai/src/backend_client.cpp
dial_mysql / dial_pgsql: thin wrappers around mysql_real_connect /
PQconnectdb mirroring the dial sequence currently inlined in
Query_Tool_Handler.cpp. No CLIENT_MULTI_STATEMENTS change of
semantics relative to existing code.
dial_*_local: resolve local proxy endpoint via admindb, then dial.
plugins/genai/src/local_proxy_endpoint.cpp
Reads mysql-interfaces / pgsql-interfaces from global_variables,
parses the semicolon-separated host:port format (mirrors
MySQL_Thread::listener_add's parser at lib/MySQL_Thread.cpp ~L240),
canonicalises 0.0.0.0 -> 127.0.0.1 and :: -> ::1, skips Unix-socket
tokens. No caching today; trivial to add when 4.D wires real
callers.
test/tap/tests/unit/genai_plugin_backend_client_unit-t.cpp
27 TAP assertions: parser variants (IPv4/IPv6/wildcards/multi/Unix-
skip/whitespace/port-bounds), null-admindb guards on every public
entry point, invalid-host/zero-port guards on direct-dial. Full
MySQL handshake left for the 4.D integration coverage.
Plumbing:
- plugins/genai/Makefile: compile both new .cpp into the .so.
- test/tap/tests/unit/Makefile: build genai_plugin_backend_client_unit-t
using the same compile-twice trick as genai_plugin_anomaly_unit-t.
- test/tap/groups/groups.json: register the new test in unit-tests-g1
with @proxysql_min_version:4.0.
Resolves Q-svcuser and Q-localhost-port from the carve-out spec design,
choosing existing mcp_auth_profiles credentials and admindb-driven
endpoint discovery respectively (no new mechanisms).
|
2 months ago |
|
|
974f180ca5 |
fix(groups.json): register genai_plugin_*_unit-t; drop stale anomaly entries
The lint job at .github/workflows runs check_groups.py --source which fails when a TAP source file has no registration in groups.json. Two test sources cherry-picked onto this branch (genai_plugin_load_unit-t from Step 1, genai_plugin_anomaly_unit-t from Step 3) were missing their entries. Both are plugin-chassis unit tests that don't need backend infrastructure, so they go in unit-tests-g1 alongside other plugin_*_unit-t tests, with the @proxysql_min_version:4.0 tag for the chassis dependency. Also drops four entries whose source files were deleted by Step 3's Anomaly_Detector carve-out: anomaly_detection-t, anomaly_detection_integration-t, anomaly_detector_unit-t, genai_anomaly_unit-t. (22 unrelated stale NOTE-level entries remain; left for separate cleanup.) |
2 months ago |
|
|
50f97de7a9 |
ci: add CI-unit-tests-tsan workflow + mysqlx-tsan-g1 TAP group
Wires up Phase 2 of issue #5675: ThreadSanitizer coverage for the mysqlx + plugin-chassis unit tests. Both the build AND the test execution run inside the ubuntu24_dbg_build container — staying within the isolation contract that all ProxySQL CI honors. Two parallel runs on a shared / self-hosted runner can never collide on the host filesystem (no /opt/proxysql contention, no toolchain contention, no shared-lib version skew between the build env and the run env). The build flag plumbing: * include/makefiles_vars.mk gains a WITHTSAN=1 branch that sets WASAN := -fsanitize=thread and forces NOJEMALLOC=1. WITHTSAN is mutually exclusive with WITHASAN — both reroute the same memory-management hooks and the linker rejects the combo. * docker-compose.yml passes WITHTSAN through to the build container alongside WITHASAN/WITHGCOV. PROXYSQL40 also gets explicit passthrough so chassis-only callers don't need to opt into the broader PROXYSQLGENAI cascade just to build the mysqlx plugin. * docker/.../entrypoint.bash installs libprotobuf-dev on demand when either PROXYSQL40=1 or PROXYSQLGENAI=1 is set (mysqlx plugin's pkg-config check) and forwards whichever flag the operator set explicitly to make. The workflow: * Lowers vm.mmap_rnd_bits to 28 on the runner — TSAN can't reserve its shadow region on Linux 5.18+ default of 32. The privileged container inherits the host setting, so a host-side sysctl is sufficient (same constraint the existing ASAN-coverage workflow already documents). * Runs `make ubuntu24-tap` for the build, then re-enters the same image via `docker compose run --rm` for test execution. Same volume mount (./:/opt/proxysql), same toolchain, same runtime libs — what the binaries linked against is what they load. The compose project name is recomputed from git describe so `run` lands inside the namespace `up` declared. * Installs python3-packaging + libprotobuf-dev on the fly inside the test container. The build image is package-build-focused and ships neither: python3-packaging is needed by run-tests-isolated.bash for @proxysql_min_version filtering, and libprotobuf-dev provides the libprotobuf.so.32 the mysqlx_*-t binaries link against dynamically (the build entrypoint already installs it during build, but a fresh `docker compose run` container starts clean). The TAP group: * mysqlx-tsan-g1/env.sh sets SKIP_PROXYSQL=1 (no daemon, no backend infra needed for unit tests) and TSAN_OPTIONS to collect every race in one run rather than aborting on the first. * groups.json registers all mysqlx_*-t and plugin_*-t binaries that build cleanly on plain v3.0; mysqlx_admin_commands_unit-t and mysqlx_robustness_unit-t are deliberately excluded (pre-existing v3.0 baseline failures unrelated to TSAN, also skipped in unit-tests-g1's known-failures list). plugin_runtime_views_unit-t is excluded because plain v3.0 has the .cpp file but the Makefile's PROXYSQL40 UNIT_TESTS list never registers it for build — the test suite expects chassis features added later in the stack. Verified locally — same `make ubuntu24-tap` build path the workflow uses, then `docker compose run --rm ubuntu24_dbg_build ... run-tests-isolated.bash` for execution: 26/26 unit tests pass under TSAN with no races reported. |
2 months ago |
|
|
ef32d9df87 |
ci: register plugin_runtime_views_unit-t in groups.json
Lint failure surfaced on PR #5690's CI run (job 73893199128) — the chassis runtime-view test added in PR #5688 was never registered in test/tap/groups/groups.json, and check_groups.py treats any unlisted TAP source as a lint error. Same group entry as the sibling plugin-chassis tests (plugin_dispatch _unit-t, plugin_manager_unit-t, etc.): "plugin_runtime_views_unit-t" : [ "unit-tests-g1","@proxysql_min_version:4.0" ] unit-tests-g1 is the standard host-only TAP group (no docker backend required); the @proxysql_min_version:4.0 attribute keeps it from running against pre-chassis builds. Trivial fix that belongs on the same PR as the doc updates because the lint failure is what surfaces on every PR opened against plugin-chassis until this lands. |
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 |
|
|
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 |
|
|
9f5ed235b8 |
fix(build,test groups): unblock CI on plugin-chassis
Two unrelated CI blockers, fixed together because each one alone leaves
the pipeline red and they are trivially independent:
1) `make cleanbuild` (and any other goal that recurses into plugins/mysqlx
on a v3.0/v3.1 box without libprotobuf-dev) failed in
plugins/mysqlx/Makefile because the protobuf-3.x ABI check fires at
parse time. The check is correct for *building* the plugin — running
pre-generated .pb.cc against an ABI-incompatible libprotobuf would
produce a .so that links cleanly and crashes on first virtual
dispatch — but it has no business firing for `clean`/`cleanall`,
which only delete object files. Wrap the check in
`ifeq ($(filter clean cleanall,$(MAKECMDGOALS)),)` so the safety
guarantee is preserved on build paths and clean is now usable on a
bare host. CI-builds was failing every job at Makefile:540 cleanbuild
for this reason, and the failure cascaded through every dependent
test workflow.
2) `mysqlx_compression_unit-t` was added in the X-Protocol Phase-1/2/3
compression commits but never registered in `test/tap/groups/groups.json`.
The lint workflow `check_groups.py --source` flagged it as
"executable test missing from groups.json" and exited 1, blocking
the entire CI run. Add the entry to `unit-tests-g1` with the
`@proxysql_min_version:4.0` tag, matching every other mysqlx unit
test in the file.
Also restore six MySQL test entries that lost their `mysql90-g3`,
`mysql95-g3` tags during the
|
2 months ago |
|
|
7ca0d153cc
|
Merge pull request #5654 from sysown/fix/pgsql-active-tx-on-broken-conn
fix(pgsql): surface mid-transaction backend errors instead of silently replaying |
2 months ago |
|
|
100e417179 |
test(pgsql): extended-query coverage for tx_poisoned behavior
New sibling to pgsql-tx_poisoned_recovery-t, plus a one-line semantics
fix in the extended-query poison gate.
Semantics fix (lib/PgSQL_Session.cpp):
Before, the pgsql_tx_poisoned_rejected_statements_total counter was
incremented on EVERY swallowed ext-query wire packet — one per Parse /
Bind / Describe / Close / Execute / Sync. That made a single logical
PQexecParams call count as 4+, inconsistent with the simple-query
path where a 'Q' packet bumps it exactly once.
Now P/B/D/C/E are silently swallowed (no counter bump), and Sync is
the single accounting point — the counter value matches the number
of client-visible "rejected statements" regardless of protocol.
New test pgsql-tx_poisoned_extended_query-t (plan(11)):
* Poison the session via a simple-query pg_sleep + mid-tx kill.
* While poisoned:
- PQexecParams("SELECT 42", 0 params) returns 25P02.
- PQprepare("stmt_poisoned", "SELECT 43") returns 25P02.
- PQexecPrepared on that name returns 25P02.
* The rejected counter increments by exactly 3 (one per logical
ext-query call), not by the 8-11 wire packets that libpq actually
sends. This assertion IS the mechanical proof that the semantics
fix above took effect.
* Simple-query ROLLBACK recovers the session.
* Post-recovery PQexecParams and PQprepare+PQexecPrepared both
execute cleanly and return rows.
Registered alongside the simple-query sibling in legacy-g2. Verified
against a live legacy-g2 infra: both tests pass (11/11 and 15/15),
counter deltas exactly match expected per-statement semantics.
|
2 months ago |
|
|
f1135ad453 |
test(pgsql): acceptance test for tx_poisoned recovery feature
pgsql-tx_poisoned_recovery-t covers the whole UX flow added by the
preceding commit and the admin-var-off fallback:
Case A — ROLLBACK recovery path
* Mid-tx backend kill produces ErrorResponse severity=ERROR sqlstate=25P02
(asserts no leak of the original FATAL / 57P01).
* PQstatus stays CONNECTION_OK, PQtransactionStatus is PQTRANS_INERROR.
* Any non-end-of-tx statement while poisoned returns 25P02.
* RELEASE SAVEPOINT while poisoned returns 25P02 (matches PG native).
* ROLLBACK returns PGRES_COMMAND_OK and the session goes to PQTRANS_IDLE.
* A subsequent SELECT 1 succeeds on a different backend pid than the
one that died (discovered via pg_stat_activity from a direct
superuser connection, since pg_backend_pid() via ProxySQL returns
thread_session_id, not the real backend pid — see the sibling
pgsql-retry_guard_in_txn_on_broken_backend-t).
* The three new stats counters (pgsql_tx_poisoned_total,
pgsql_tx_poisoned_recovered_total,
pgsql_tx_poisoned_rejected_statements_total) are read from
stats_pgsql_global via the admin port and asserted to have
incremented.
Case B — COMMIT recovery path
* COMMIT inside a poisoned tx returns PGRES_COMMAND_OK with command
tag 'ROLLBACK' (matches PG native — PG itself rolls back on COMMIT
inside an aborted tx).
Case C — admin variable off
* Toggle pgsql-preserve_client_on_broken_backend_in_tx=false, repeat
the mid-tx kill, assert the client session is terminated (pre-
feature fallback behavior preserved). The admin variable is
restored to true at test exit so subsequent tests in the group
see the default.
Registered in legacy-g2 alongside its sibling regression guard so
both run together on the same infra.
Related: issue #5658.
|
2 months ago |
|
|
c2200e472d |
ci(lint): catch TAP tests missing from groups.json on every PR
Previously CI-lint-groups-json only triggered when groups.json itself was
edited and only checked formatting. That can't catch the "author added a
new test source but forgot to register it" case (which is exactly what
happened with pgsql-retry_guard_in_txn_on_broken_backend-t before this
series).
- Drop the paths filter so the workflow runs on every pull_request/push.
- Add a --source mode to check_groups.py that scans test/tap/tests* for
*-t.{cpp,sh,py,php} (and extension-less -t scripts) and flags any
source file not registered in groups.json as an ERROR. Requires no
build — runs in seconds.
- The reverse direction (entry in groups.json with no matching source)
is a NOTE in source mode, because a handful of binaries are built
from differently-named sources via explicit Makefile targets (e.g.
mysql_reconnect_libmariadb-t from mysql_reconnect.cpp).
- Executable mode behavior is unchanged; run-multi-group.bash keeps
calling check_groups.py with no flag.
|
2 months ago |
|
|
292f6f6bae |
test(pgsql): register retry_guard_in_txn_on_broken_backend in groups.json
The test added in
|
2 months ago |
|
|
c723ede0cf |
Merge remote-tracking branch 'origin/plugin-chassis' into ProtocolX-rebased
# Conflicts: # lib/ProxySQL_PluginManager.cpp # plugins/mysqlx/Makefile # plugins/mysqlx/include/mysqlx_plugin.h # plugins/mysqlx/include/mysqlx_session.h # test/tap/groups/groups.json # test/tap/tests/test_mysqlx_listener_smoke-t.cpp # test/tap/tests/unit/Makefile |
2 months ago |
|
|
b3d4de0bc8 |
Merge remote-tracking branch 'origin/v3.0' into plugin-chassis
# Conflicts: # test/tap/groups/groups.json |
2 months ago |
|
|
d2e03fae36 |
fix(test groups): resolve groups.json conflict + tag plugin tests for v4.0
The `test/tap/groups/groups.json` on `origin/v3.0` was reformatted and expanded (mysql95 targets added, legacy-g1..g5 merged into mysql84-g1..g5, etc.) in commits that landed after `plugin-chassis` branched. Merging `plugin-chassis -> v3.0` therefore produced a content conflict in this file. Resolve by taking `origin/v3.0`'s current `groups.json` as the base and re-adding every plugin-chassis and mysqlx-plugin test entry on top, each tagged with `@proxysql_min_version:4.0` per the existing tier convention (`test_mcp_static_harvest-t`, `anomaly_detection-t`, etc. already use this pattern). Tests tagged v4.0: * Plugin-chassis unit tests (7): plugin_config_unit-t, plugin_dispatch_unit-t, plugin_manager_unit-t, plugin_registry_unit-t, plugin_query_hook_unit-t, plugin_prometheus_unit-t, plugin_lifecycle_unit-t * Mysqlx-plugin unit tests (22): test_mysqlx_plugin_load-t, test_mysqlx_admin_tables-t, test_mysqlx_listener_smoke-t, mysqlx_config_store_unit-t, mysqlx_config_store_concurrent_unit-t, mysqlx_config_store_pure_unit-t, mysqlx_protocol_unit-t, mysqlx_protocol_socket_unit-t, mysqlx_route_store_unit-t, mysqlx_stats_unit-t, mysqlx_admin_schema_unit-t, mysqlx_admin_commands_unit-t, mysqlx_admin_disk_commands_unit-t, mysqlx_data_stream_unit-t, mysqlx_connection_unit-t, mysqlx_session_unit-t, mysqlx_thread_unit-t, mysqlx_message_dispatch_unit-t, mysqlx_concurrent_unit-t, mysqlx_backend_auth_unit-t, mysqlx_credential_verify_unit-t, mysqlx_robustness_unit-t, mysqlx_tls_unit-t * Mysqlx E2E tests (2, group `mysqlx-e2e-g1`): test_mysqlx_e2e_handshake-t, test_mysqlx_e2e_routing-t Formatting is preserved from v3.0 (one entry per line, alphabetically sorted, 2-space indent). Entries that existed only on plugin-chassis under the old per-line layout and were never in v3.0 are now inserted in the correct alphabetical position. |
2 months ago |
|
|
99494b015d |
chore(tap): Fix lint errors in groups.json
Signed-off-by: Wazir Ahmed <wazir@proxysql.com> |
2 months ago |
|
|
baa5069eaf |
CI: Add `mysql56-single` test infra
Signed-off-by: Wazir Ahmed <wazir@proxysql.com> |
2 months ago |
|
|
885712c679 |
Merge branch 'v3.0' into session-track-system-variable
|
2 months ago |
|
|
6435524416 |
ci(mysqlx): run all mysqlx tests and fail fast when X Protocol missing
CI-mysqlx.yml previously only ran the test_mysqlx_e2e_* binaries and hard-coded the MYSQLX_E2E_* variables inline. That missed the integration smoke tests (test_mysqlx_admin_tables, test_mysqlx_listener_smoke, test_mysqlx_plugin_load) and meant the group's env.sh was never consulted, so MYSQLX_E2E_PROXYSQL_PORT was unset and test_mysqlx_e2e_routing-t silently skipped. Now the step sources test/tap/groups/mysqlx-e2e/env.sh and iterates every test_mysqlx_*-t binary. Errors out if the glob matches nothing, so a future rename that quietly elides every mysqlx test doesn't pass a green CI. env.sh: use the mysqlx_test / mysqlx_test credentials provisioned by setup-infras.bash, not root with empty password. setup-infras.bash: return exit 1 when X Protocol isn't reachable on 33060 rather than exit 0, so CI actually fails instead of running every test against a missing backend. pre-cleanup.bash: derive the sandbox version from the msb_*/ directory name rather than hardcoding 8.4.8. setup-infras.bash uses --newest so the patch level drifts with upstream MySQL releases. |
2 months ago |
|
|
98aee7db21 |
chore(mysqlx): retire dormant MysqlxWorker path and its smoke test
Deletes the mysqlx worker implementation and the TAP smoke test that was its only caller. Also removes the corresponding entries from the plugin Makefile, the unit-tests Makefile, and the CI groups manifest. Files removed: - plugins/mysqlx/src/mysqlx_worker.cpp - plugins/mysqlx/include/mysqlx_worker.h - test/tap/tests/test_mysqlx_listener_smoke-t.cpp References cleaned: - plugins/mysqlx/Makefile: dropped mysqlx_worker.cpp from SRCS - test/tap/tests/unit/Makefile: dropped test_mysqlx_listener_smoke-t from UNIT_TESTS and deleted its build rule - test/tap/groups/groups.json: removed the smoke-test entry from the unit-tests-g1 group Why: the worker was an earlier parallel implementation of the mysqlx session path (separate accept thread + worker queue + per-listener route tracking + identity.default_route -> pick_endpoint). It never reached any call site in the production proxysql binary. The only consumers of its public API were the smoke test and the worker code itself. The route-identity fix in PR #5641 used the worker's design as a reference and implemented the fix in the active session path (Mysqlx_Thread + MysqlxSession + MysqlxConfigStore::pick_endpoint). With that landed, the dormant code is pure tech debt — reviewers repeatedly mistook its logic for the active path. Why retire the smoke test at the same time: the test exercised mysqlx_start_listeners_from_runtime_routes() which was the worker's only entry function. With the worker gone, the smoke test cannot link; keeping it would produce a broken CI target. Out of scope: no changes to the active session path, no changes to the MysqlxConfigStore or admin-schema tables, no changes to any other tests. Pure deletion + Makefile/groups cleanup. |
2 months 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).
|
2 months 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
|
2 months ago |
|
|
4631b1f466 |
fix: clean groups.json diff — only add mysql-zstd_compression_level-t entry
|
2 months 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. |
2 months 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. |
2 months ago |
|
|
d212102ce5 |
fix(tests): drop pgsql-* tests from mysql{84,90,95}-g[1-5]
Follow-up to
|
2 months 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.
|
2 months 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. |
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 |
|
|
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
|
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 |
|
|
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. |
2 months ago |
|
|
3babaada88 |
fix: remove stale gtid_utils_unit-t from groups.json
This test was removed in
|
3 months 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. |
3 months ago |
|
|
6f5cf1f169 |
fix: sort groups.json keys after v3.0 merge
|
3 months ago |
|
|
732a65da5d
|
Merge branch 'v3.0' into fix/groups-json-orphaned-entries
Signed-off-by: René Cannaò <rene@proxysql.com> |
3 months ago |
|
|
1532b7f6c9 |
fix(ci): sort mysqlx entries alphabetically in groups.json
The groups.json linter requires keys sorted alphabetically. Reorder mysqlx_* entries to satisfy the CI lint check. |
3 months ago |
|
|
ce8a7d1463 |
feat(infra): swap mysql84 and mysql84-binlog groups to dbdeployer
- mysql84 group: infra-mysql84 -> infra-dbdeployer-mysql84 - mysql84-binlog group: infra-mysql84-binlog -> infra-dbdeployer-mysql84-binlog |
3 months ago |
|
|
1e069fbc11 |
Merge 'v3.0' into feature/gtid-range-update
|
3 months ago |
|
|
f55e0a47a4 |
feat(infra): swap legacy-binlog group to infra-dbdeployer-mysql57-binlog
Replace 9-container infra-mysql57-binlog with single-container dbdeployer variant. |
3 months ago |
|
|
8d0fbd443a |
fix(infra): swap legacy group to use infra-dbdeployer-mariadb10
Replace infra-mariadb10 with infra-dbdeployer-mariadb10 in the legacy group's infras.lst. |
3 months ago |
|
|
abcc8c31f9 |
refactor(infra): rename infra-dbdeployer57 to infra-dbdeployer-mysql57
More explicit name since dbdeployer will also be used for MariaDB and PostgreSQL infras in the future. |
3 months ago |
|
|
3dd6e09b6c |
fix(tests): improve check_groups.py wording for missing tests
Change WARNING to NOTE for tests in groups.json that aren't on disk. These may be scripts (PHP, Python) not yet built or feature-gated tests — not necessarily compilation failures. |
3 months ago |