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 }
220 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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
885712c679 |
Merge branch 'v3.0' into session-track-system-variable
|
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 |
|
|
3babaada88 |
fix: remove stale gtid_utils_unit-t from groups.json
This test was removed in
|
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 |
|
|
1e069fbc11 |
Merge 'v3.0' into feature/gtid-range-update
|
3 months ago |
|
|
30e86ae04d |
fix(tests): resolve 3 additional TAP test failures
- Fix INFRA_LOGS_PATH in infra-mysql57-binlog/.env: removed INFRA_LOGS_PATH=./logs which overrode the proper default from docker-compose-init.bash, causing logs to be written inside test/infra/ instead of ci_infra_logs/ and never cleaned up - Increase PostgreSQL max_connections to 120 (from default 100) in docker-pgsql16-single and infra-pgsql17-repl configs to prevent connection slot exhaustion during monitor SSL tests - Skip session_track_gtids test cases in set_testing-240-t when running against MariaDB, which doesn't support this variable (issues #2134, #3059) |
3 months ago |
|
|
98083cdf0f |
fix: resolve 4 TAP test failures in multi-group runs
- set_testing-240-t: Fix crash (json type_error.302) when MySQL returns NULL variable values or fails the session_variables query. Add null guards in parseResult() and all implicit std::string conversions. - Add show_compatibility_56=ON to MySQL 5.7 configs so querying performance_schema.session_variables works reliably. - test_gtid_forwarding-t: Move from legacy-g5 to legacy-binlog-g1 (requires infra with session_track_gtids=OWN_GTID configured). - test_binlog_reader-t: Create own GTID query rules for sbtest8 instead of relying on pre-existing infra rules that may be deleted. - test_ffto_pgsql_error_stats-t: Remove from mysql84-g4 group (no PostgreSQL backend available in mysql84 infrastructure). |
3 months ago |
|
|
5c1549dcc6 |
merge: resolve conflicts with v3.0 branch
Merge origin/v3.0 into ProtocolX. One conflict in test/tap/tests/unit/Makefile resolved by keeping both mysqlx unit tests (ProtocolX) and pgsql_servers_ssl_params unit test + GENAI vec.o link (v3.0). |
3 months ago |
|
|
9757835a5f |
Merge branch 'v3.0' into fix-fc-parsing
|
3 months ago |
|
|
0f1aa30f4c |
TAP: Test `min_gtid` annotation in prepare statements
Signed-off-by: Wazir Ahmed <wazir@proxysql.com> |
3 months ago |
|
|
8de0a60c25 |
test: add admin schema unit tests, expand listener smoke, update build (42 new assertions)
Create mysqlx_admin_schema_unit-t.cpp (15 assertions) testing the DDL registration and command registration from mysqlx_admin_schema in isolation using mock ProxySQL_PluginServices. Verifies all 8 table names registered (mysqlx_users, runtime_mysqlx_users, mysqlx_routes, runtime_mysqlx_routes, mysqlx_backend_endpoints, runtime_mysqlx_backend _endpoints, stats_mysqlx_routes, stats_mysqlx_processlist), null guard for register_table/register_command, and exactly 6 LOAD/SAVE commands. Expand test_mysqlx_listener_smoke-t.cpp from 8 to 15 assertions. Added listener count before start (0), empty routes table (count stays 0), two-route two-port listener creation, stop-and-restart lifecycle, TCP connect verification to both ports, and idempotent stop. Update Makefiles and groups.json to register all new test targets in unit-tests-g1 build group. |
3 months ago |
|
|
f606f1ba84 |
fix: sort groups.json entries alphabetically
|
3 months ago |
|
|
80ff2242e6 |
merge: resolve v3.0 conflict and add pgsql_servers_ssl_params cluster sync
v3.0 added pgsql_servers_ssl_params table. Integrate into pgsql cluster sync path: - Add CLUSTER_QUERY_PGSQL_SERVERS_SSL_PARAMS to Admin_Handler interception block alongside other pgsql cluster queries - Add ssl_params fetch query to pull_pgsql_servers_v2_from_peer - Add update_pgsql_servers_ssl_params() for applying synced data - Update convert_pgsql_servers_resultsets to handle 5 result sets - Include ssl_params in v2 checksum computation (4 tables) |
3 months ago |
|
|
7f14beedc1
|
Merge pull request #5583 from sysown/v3.0_pgsql_ssl_backend_5582
Per-server SSL parameters for PostgreSQL backends |
3 months ago |
|
|
1a8e4ed918
|
Merge pull request #5567 from sysown/v3.0_pgsql_sslkeylog_5281
Add SSL/TLS traffic decryption for PostgreSQL backend connections |
3 months ago |
|
|
b771e4f6eb
|
Merge branch 'v3.0' into v3.0_ci_min_proxysql_version_5561
Signed-off-by: René Cannaò <rene@proxysql.com> |
3 months ago |
|
|
f8dcf88bc2
|
Merge branch 'v3.0' into fix/postgresql-cluster-sync_2
Signed-off-by: René Cannaò <rene@proxysql.com> |
3 months ago |
|
|
7ce2043b61
|
Merge branch 'v3.0' into v3.0-ci_84_mysql84
Signed-off-by: René Cannaò <rene@proxysql.com> |
3 months ago |
|
|
93eabfc7bc |
fix: address code review issues in PostgreSQL cluster sync
- Fix fetch_and_store incrementing success counter on failure - Fix sqlite3_stmt leak in pull_pgsql_variables_from_peer (use RAII) - Convert get_peer_to_sync_pgsql_query_rules and _servers_v2 to unified framework delegates (fixes atomic data race on .load()) - Merge dual scan loops in set_checksums to respect enabled_check - Remove spurious "deprecated" label from new checksum_pgsql_variables - Replace sprintf with snprintf in pgsql diffs_before_sync getters - Fix indentation on cluster_pgsql_variables blocks - Fix TAP plan mismatch: replace MYSQL_QUERY with inline mysql_query - Fix trivially-true table accessibility assertions - Add mysql_close on failed connect in test - Move test_cluster_sync_pgsql-t to legacy-g5 group |
3 months ago |