mirror of https://github.com/sysown/proxysql
v3.0-unified-large-pr
v3.0-noise-testing
v3.0-ff_inspect
v4.0-mcp-stats2
v3.0-5384
v3.0
v3.0-ai260221
v3.0-misc0221
v2.7.3-test260221
v3.0-pgsql_monitor_repl_lag
v3.0-2233
v3.0_3596_3597
v3.0_fix-pgsql-extended-query-routing_5387
v3.0-5243
v3.0-tsdb-feature
v4.0-mcp-stats
v3.0_pgsql_advanced_logging
v3.0-set_parser_v3
copilot/uninstall-amazon-linux-2023
v3.0-MCP_multi
GH-Actions
v3.0_pgsql_meta_command_describe_table
fix-prometheus-labels-test
v3.0-test0213
v3.0_pgsql-prepared-statement-refcount-race-5352
v3.0_improve_mysql_monitoring_5256
tap-mcp-client
v3.0-openssl-fix
v3.0-fixes0212
v3.0-5069
agent-skill-tap-test
v3.0_pgsql-meta-cmd-admin-5365
v3.0-webui_2602
v3.0-fix_5256
v3.0-5359
v3.0-misc260209
v3.0-5355
v3.0.6-fix_rustc_check
v3.0-mac3
v3.0_mac2
v3.0-scram_strtok
v3.0_mac
v3.0.6-revert_build_image_versions
v3.0.6-implement_FLUSH_STATS
fix/remove-wrong-index-connection-cleanup
session-track-system-variable
v3.0-merge-v4.0-genai
fix-genai-critical-issues
v3.0.6-add_fedora43
copilot/sub-pr-5329
gh-pages
feature/modern-docs
v4.0
v4.0_rag_ingest_sqlite_server
v4.0-fix-vec-search
v4.0-rag_tools_stats
v4.0_rag_ingest_2
v4.0_rag_sys_prompt
v3.0.6-fix_reg_test_5233_set_warning-t
v4.0-mcp_rules_test
v4.0_rag_mcp
v4.0-tsdb1
v4.0-tsdb
pr-5312-fixes
feature/v4-docs-init
v4.0-update-docker-build-image-versions
otel_system_libs
otel_clean
v3.0-5288
otel
otel_2
fix/postgresql-cluster-sync_2
v3.0.6-bump_version
v3.0_fix-pgsql-threshold-deadlock_5300
v3.0_pg-cancel-terminate-backend-param-support_5298
fix/postgresql-cluster-sync
v3.0-releate_notes_scripts_fixes
v3.0_fix_reg_test_5233_set_warning-t_test
v3.0.5-groups.json_add_missing_test
v3.0_pgsql-use-ssl-issue-5284
v3.0-misc260111
v3.0_buildTap
v3.0_bind-format-issue-5273-fix
v3.0-poll_doc
test_gh-actions_triggers
v3.0-timezone-parser-fix
v3.0-keylog_doc
v3.0_5272
v3.0_fork
v3.0_readme_update_postgres
v3.0_restapi_improvement
v3.0_mysql_monitor_crash_5256
v3.0.5-bump_version
v3.0-304release
v3.0-304-docInstall
v3.0-misc251220
v3.0-handle_unexp_ping
v3.0_mysql_monitor_cur_cmd_cmnt_fix
v3.0_pgsql-query-digest-gen-5253
misc251219
v3.0-set_testing_version
v3.0-issue5248
feature/gtid-range-update
v3.0_pgsql-monitor-sslsupport-5205
v3.0-issue5246
v3.0-issue5244
v3.0_get_server_version
v3.0_wait_timeout
v3.0-5062_2
v3.0-5062
postgresql-digest-testing-improvement
v3.0.4-rpm_spec_rework
v3.0_refactor_prepared_statement_cache_design_5211
v3.0.agentics
fix/issue-4855
v3.0_select_auto_commit
v3.0-5218
fix-5221
v3.0-5212
v3.0.4-add_opensuse16
refactor-gtid-events-count
refactor-gtid-events-count_doc
fix/5186-proxysql-stop-admin-crash
v3.0-4951
add-claude-github-actions-1763877527835
fix-rpm
feature/add-tap-test-documentation
v3.0-DS_crash
add-claude-github-actions-1763663272333
add-claude-github-actions-1763663091346
add-claude-github-actions-1763663091411
v3.0_FastForwardGracefulClose
v3.0.4-balance_test_groups
add-claude-github-actions-1763476725261
add-claude-github-actions-1763476725489
v3.0.4-bump_version
v3.0_optimizations_and_stability
v3.0_refactor_monitoring_ping
v3.0_add_delay_tap_test
v2.7.3.1
v3.0-stmt_exec_bounds_check
v3.0-fix_proclist_use_after_free
v3.0-fullauth_sid
v3.0_default_interface_global_var_5189
v3.0_add_delay_watchdog
v3.0_bind_fmt_patch
v3.0_admin_cmd_5170
v3.0.3-revert-opensuse16
v3.0-fix_use_after_free_in_pgsql_proclist
v3.0-fix_test_server_sess_status
v3.0-fix_use_after_free_in_proclist
v3.0.3-tap_groups_fix
revert-gtid-refactoring
v3.0_optimise_extended_query_response
v3.0.3-upgrade_json
fix-rest-api-tap-test
v3.0.3-upgrade_coredumper
crash-sqlite-max-len
v3.0-debug_log_pass
v3.0.3-makefiles_cleanup
v3.0_assert_to_warning
revert-5129-include_settings_information_schema_stats_expiry
v3.0_disable_pgsql_prometheus_5159
v3.0_pgsql_stat_activity_issue_4682
v3.0.3-upgrade_deps
v3.0.3-upgrade_curl
v3.0_transaction_alias_support_5152
v3.0.3-upgrade_clickhouse
v3.0.3-upgrade_sqlite3
v3.0.3-upgrade_libmicrohttp
v3.0_track_search_path_param_5148
v3.0_parameter_status_case_sensitive_issue_5145
v3.0_datestyle-parser-tweak
v3.0_fix-describe-portal-nodata-empty-query
v3.0_bind_fmt_bug_fix_5140
v3.0.3-add_debian13_builds
v3.0.3-add_centos10_builds
v3.0.3-add_fedora42_builds
v3.0_pgsql_query_cancel_terminate_issue_5136
v3.0_extended_query_pgsql_query_rules_5132
v3.0_postgres_query_logging_issue_5123
5127.changelog.update
v3.0_clang_compilation_fix
v3.0_extend_multiplex_status_test
v3.0_extended_query_protocol_issue_5118
v3.0_extended_query_protocol_phase_2
add_action_php_pdo_pgsql
v3.0_issue_5101
v3.0.sonar-cli
v3.0_issue_5102
v3.0_issue_5100
v3.0.sonar-config
v3.0_fix_issue_5086
v3.0_extended_query_protocol
v3.0.3-bump_version
v3.0_session_param_reset_connection
otel-tracepoint
v3.0_mirror_crash_fix
v3.0-pgsql_mon_table_fix
v3.0_qp_mem_leak_fix
v3.0.2-merge-upgrade_deps-add_new_distros
v3.0.2-upgrade_deps
v3.0-4976
v3.0.2-add_new_distros
v3.0-add_more_testing_groups-v2
v3.0-add_more_testing_groups
v3.0-upgrade_prometheus-cpp
v3.0_mysql_deprecate_native
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_structured_libpq_error_message
v3.0-bump_version_to_3.0.2
v3.0-ReadySet1
v3.0-4935
v3.0-sliced_groups
v3.0-4861_fixes1
v3.0_track_transaction_param_state_4907
v3.0-4918
v3.0-4930
v3.0-build_tap_tests_in_container
v3.0_unknown_param_crash_fix_4919
v3.0_read_only_action_deprecated
v3.0-4861-mysql-logging_prepared_statement_parameters
v3.0-ff_conns_eof_caps_match
v3.0_refactor_connection_info_param
v3.0_reg_4867_tap_test
v3.0-4727
v3.0_auth_negotiation
v3.0-4877
v3.0-sqlite3_permission
v3.0-pass_env_to_docker
v3.0-4803_20250313
v3.0_shutdown_debug
v2.7
v2.7-fix_run_name
v3.0-fix_run_name
v3.0-ci_fixes_172
v3.0_improve_copy_stdin
v3.0_issue_4867
v3.0-4856
v3.0_session_parameter_tracking
v3.0_4799_4827
v3.0-3687
v2.7-pmm_runtime_servers_metrics
v2.7-4839
v3.0-4839
v2.7-4841
v2.7-bump_version_to_2.7.3
2.6.6-4841
v3.0-flush_debug
v3.0_collation_255
v2.x_pg_PrepStmtBase_240714
v3.0-4803-4817
v3.0-4803
v2.7-minorBugs
v3.0_debugFastLog
v3.0-privates
v3.0_compression_test_fix
v3.0-rev4806
v3.0-SetThreadName_optional
v3.0-rm_malloc_conf_on_version
v3.0-fix_aux_threads_ssl_leaks
v3.0-fix_ssl_params_leak
v3.0-conns_eof_caps_match
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
v3.0_compression
openssl_enhancement
v3.0-actions-add-3p-test-parameter
v2.7-actions-add-3p-tests-parameter
v3.0_notice_support
v3.0-fix-builds
v3.0_dynamic_fast_forward
none
ssl_dynamic_lib
v3.0-fix_hang_on_resume
v2.7-fix_hang_on_resume
v3.0-remove-obsolete-distros
v3.0_refactor_query_cache
v2.x-logging_mem
v2.7_servers_defaults
v3.0_ssl_warnings
v3.0_copy_out_support
v3.0_randomized_cache_ttl
v3.0_issue_4707_threshold_resultset_size
v3.0-mariadb_column_metadata_integrity_check
v2.7-mariadb_column_metadata_integrity_check
ssl_optimization
v3.0-postgres_read_only
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_env_opt_support
v3.0-fix_ubuntu24_fedora41_builds
v3.0_fix_multiple_builds
v3.0_servers_defaults
v3.0-bump_version_to_3.0.1
v3.0_reg_test_4716_single_semicolon
v2.7-update_actions_triggers_v2
v3.0-update_actions_triggers_v2
v3.0_test_aurora_build
v3.0_mem_leak_fixes
v3.0_escape_connection_param
v3.0_clang_linking_fix
v3.0-postgres_monitor_poc
v2.7-update_actions_triggers
v3.0_unsupported_features_error
v3.0_remove_pkgroot
v3.0_md5_auth_support
v3.0-update_actions_triggers
v3.0_pgsql_digest_stats_tables
v3.0-add_pkglist_targets
v2.7-bump_version_to_2.7.2
v3.0-doc240920
v3.0-4658_4659
v3.0_obsolete
v2.6
v2.7-4658_4659
v2.6_dns_cache_fixes
v2.7_dns_cache_fixes
v2.6.x-update_triggers
v2.6-4646
v2.7-4646
v2.7-PackageSpeedup
v2.7.1-update_actions
v2.7.1-add_fedora41
v2.7.1-update_gh_triggers
v2.7.1-bump_version_to_2.7.1
v2.7-update_version_to_2.7.0
v2.x
v2.x-4628
v2.x_stats_digest_uppercase
v2.x_proxy
v2.x-4589
v2.x-fix_connpool_metrics_init_val
v2.x-fix_change_user_assert
v2.6.x-use_versioned_build_images
v2.6.x-add_test_groups
v2.x-4612
v2.6.x-fix_gcov_files
v2.x_4598
v2.x-AT
v2.x-backend_conns_ssl_err_clear
v2.x-client_ssl_busy_wait
v2.6.4-fix_fedora40_arm64_build
v2.x-240708
set-thread-names
v2.x-POLLHUP
v2.x_240702
x509_mmap
v2.x-4572
v2.6.x-testing-global-multiplexing-disabled
v2.x-4567
v2.6.x-update_to_openssl_3.3.1
use-wrlock-in-dns-cache-empty
v2.6.x-fix_use_local_includes
v2.x-digest_spaces_fix
v2.6.x-fix-darwin
v2.6.x-freebsd_fixes
v2.x_monitor_slave_lag_when_null_4521
v2.x-fix_cluster_leaks
v2.x-disable_ssl_tickets
v2.6.x-ubuntu24-fedora40
v2.x_hostgroup_online_servers
fix-tests-build
v2.x_240429-2
v2.x_240429
v2.x_240427
v2.x_240424
v2.x-admin_list_ciphers
v2.x_240421_fixes
v2.x-4493
v2.x-4510
v2.x_240421
v2.6.x-freebsd_fixes_2
v2.x-jemalloc_defaults
v2.x-4491
v2.6.x-fix_docker_compose
2.x-AWS_RDS_autodiscovery
v2.x-stmt_explain
v2.x-sqlite3_pass_exts-2
v2.x-caching_sha2_compress
v2.x-ps3371
v2.x-restartbackoff
v2.x-doc240320
v2.x-sqlite3_pass_exts
v2.x-tap_tests_opt_ssl
v2.6-4466
v2.x-clang_cppdotenv
v2.6.0-update_to_libhttpserver_v0.19
v2.x_Servers_SSL_Params
v2.x_sha2pass_draft3
v2.x_openssl_verify_load_cacert_duration
v2.x_memleak_fix_stats_mysql_prepared_statements_info
v2.x_shun_replication_lag
v2.6.0-fix-test_ssl-poolout
v2.x_dns_stale_record_fix
v2.x_router_2ports
v2.6.0-update_to_openssl_v3.2.1
v2.6.0-update_to_openssl_v3.1.5
v2.6.0-fix-package-licensing
v2.x-2411025
v2.x-profiling_poc1
v2.6.0-4437-deprecate-old-distros
v2.x-4438
v2.x-year
v2.x-4335
v2.x-4241
v2.x-pause_status
v2.x-4396
v2.x-4355
v2.x-2091
v2.x-aurora_autodiscovery-refactor_cluster_mysql_servers-gr_bootstrap_mode
v2.x_issue_4399
v2.x-4415
v2.x_fixed_tap_rpath
v2.6.0-set_testing-240-iterate-all-rhg
v2.x_update_mariadb_connector_to_3.3.8
v2.6.0-clang-fix
v2.x_unified_makefile_fixes
v2.x_issue_4402
v2.x_sha2pass_draft2
v2.x_cleanup231208
v2.x-webui_fixes
v2.6.0-centos9
v2.6.0-more-makefile-fixes
v2.x_warning_support
v2.x_testing_ci_test_failures
v2.x_issue_4380
v2.x_no_reg_test_3273
v2.x-set_testing_fix
v2.x-depr_checksum_vars_fix
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_2
v2.6-deprecate_old_clickhouse
v2.x-4300
v2.x_update_dns_records_count
v2.x-clickhouse230726
v2.6.0-tap_test_fixes
v2.x-4272
v2.x-4264
v2.x-fast_routing_race_cond_fix
v2.x_refactor_cluster_mysql_servers
v2.x-aurora_autodiscovery
v2.x_read_only_actions_offline_hard_servers
v2.x-patch_libdaemon_umask
v2.x-prometheus0717
v2.x-change_user_compression
v2.x-zd70545
v2.x-aurora_autodiscovery_shunned_promotion
v2.x-tap20230609
v2.x_unix_socket_ssl
v2.x_ssl_support_kill_query
v2.x_ssl_keylog_support
v2.x-dynamic_test_mysql_query_rules_fast_routing
v2.x_coredump_stats_fix
v2.x_issue_4194
v2.x-test20230530
v2.x-poll_optimization
v2.x_troubleshooting-feature
v2.x-fix_charset_init_handshake
v2.x_sha2pass_draft2-TEST
v.2x_dns_cache_issue_4210
v2.x-gr_autodiscovery
v2.x-hostgroup_attributes_servers_defaults
v2.x_dns_cache_update_message
v2.x-ssl3_warnings2
v2.x-log_insert_id2
v2.x-cluster_sync_disabled_modules_checksums
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
CodeQL
v2.x-3863
v2.2.0-sqliteserver_read_only
v2.x-digest_umap_aux-comparison
v2.4.8
v2.x-HG_init_connect
v2.x-4105_4114
v2.x-3583-server_closed_conn
v2.x-4066-upgrade_deps
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-3238
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.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
${ noResults }
8501 Commits (v3.0-MCP_multi)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
253d098653 |
security: fix SQL injection vulnerabilities in SQLite catalog queries
Address Gemini Code Assist review feedback on PR #5386: 1. Discovery_Schema::resolve_run_id - Replace string concatenation with replace_str escaping with proper parameterized queries using sqlite3_prepare_v2 and sqlite3_bind_* functions. 2. PgSQL_Static_Harvester - Remove unsafe escape_sql_string() function and replace its usages with: - New lookup_object_id() helper using parameterized queries - Parameterized UPDATE statements in harvest_view_definitions() These changes ensure complete protection against SQL injection for the catalog database, following the pattern already used in create_run(). |
5 days ago |
|
|
0da772a4c1 |
tap groups: add new MCP test assignments to ai-g1 group
Add test_mcp_claude_headless_flow-t, test_mcp_llm_discovery_phaseb-t, and test_mcp_static_harvest-t to the ai-g1 test group. |
5 days ago |
|
|
2fa1401b05 |
MCP query+harvest hardening: HGM-based target routing, weighted backend selection, pgsql schema fix, and TAP robustness
This squashed commit consolidates the recent MCP stabilization work across query execution and static-discovery tests.
1) Query endpoint routing/executability now uses Hostgroup Manager runtime snapshots
- File: lib/Query_Tool_Handler.cpp
- Removed dependency on direct SQL probes against runtime_mysql_servers/runtime_pgsql_servers from inside the MCP query handler path.
- Target backend resolution now reuses the same Hostgroup Manager runtime snapshot APIs that feed Admin runtime server visibility:
- MyHGM->dump_table_mysql("mysql_servers")
- PgHGM->dump_table_pgsql("pgsql_servers")
- Non-executable diagnostics now summarize statuses from HGM snapshots instead of ad hoc runtime-table SQL.
2) Backend endpoint selection changed to weighted random
- File: lib/Query_Tool_Handler.cpp
- Selection remains constrained by:
- matching target hostgroup_id
- ONLINE backend status
- Candidate choice now uses random selection with linear probability by weight, replacing deterministic ordering.
3) Read-only validation and guardrail adjustments
- File: lib/Query_Tool_Handler.cpp
- Fixed false negatives for valid read-only queries such as SELECT literals (no FROM clause required).
- Added additional dangerous-query patterns for file-write variants:
- INTO OUTFILE
- INTO DUMPFILE
4) PostgreSQL static harvester schema query fix
- File: lib/PgSQL_Static_Harvester.cpp
- Fixed harvest_schemas() failure on PostgreSQL caused by querying non-existent information_schema.schemata.default_collation_name.
- Replaced with PostgreSQL-safe projection while preserving the insert_schema() column contract.
5) TAP reliability improvements for MCP test phases
- File: test/tap/tests/mcp_rules_testing/test_phase11_pgsql_target.sh
- Isolated phase state by clearing MCP rules before setup.
- Added verbose response prints for T11.1-T11.4.
- Added LOGENTRY phase start/end markers and EXIT trap for guaranteed end watermark.
- Replaced fragile grep/escaping checks with robust string assertions.
- Fixed NULL-concat stats assertions with COALESCE(username,'') and COALESCE(target_id,'').
- File: test/tap/tests/test_mcp_static_harvest-t.sh
- Hardened escaped-JSON parsing in MCP response checks (run_id extraction + key/value assertions).
- Reworked target/protocol/object assertions to avoid transport-format false negatives.
- Corrected cross-target negative assertion to check MCP isError semantics.
Observed result in user verification
- Phase 11 pgsql target/rules/stats checks pass.
- Static harvest phase-A checks pass for mixed mysql/pgsql target_id flow.
This commit intentionally keeps runtime ONLINE-only target executability semantics and improves observability/diagnostic quality for future MCP routing/test failures.
|
5 days ago |
|
|
9ffc3f8d71 |
mcp tests: add phase-B TAP coverage and optional real Claude CLI E2E runner
Add two complementary TAP tests for phase-B validation and an optional real Claude CLI E2E helper, so we can validate both 'without Claude credentials' and 'with real Claude CLI' workflows.
What was added:
1) CI-safe deterministic phase-B TAP
- New: test/tap/tests/test_mcp_llm_discovery_phaseb-t.sh
- Validates MCP phase-B primitives end-to-end without external LLM API:
- list_targets
- discovery.run_static (target_id-scoped setup)
- catalog.list_objects
- agent.run_start / agent.run_finish
- llm.summary_upsert / llm.summary_get
- llm.domain_upsert / llm.domain_set_members
- llm.metric_upsert
- llm.question_template_add
- llm.search
- Uses unique per-run markers to assert persisted artifacts are retrievable
2) Claude headless flow TAP smoke
- New: test/tap/tests/test_mcp_claude_headless_flow-t.sh
- Always validates integration path without external dependencies:
- static_harvest.sh wrapper executes and yields run_id
- two_phase_discovery.py --dry-run executes with target_id/run_id context
- Optional real Claude execution:
- enabled via TAP_RUN_REAL_CLAUDE=1
- skipped by default to keep CI deterministic
3) Manual real-CLI E2E runner
- New: scripts/mcp/DiscoveryAgent/ClaudeCode_Headless/run_real_claude_e2e.sh
- Runs full two-step flow manually when credentials/CLI are available:
- phase-A static harvest (or --skip-phase-a + --run-id)
- phase-B real Claude run via two_phase_discovery.py
4) Documentation updates
- scripts/mcp/DiscoveryAgent/ClaudeCode_Headless/README.md:
- documents run_real_claude_e2e.sh usage
- test/tap/groups/ai/README.md:
- adds manual run instructions for:
- phase-A static harvest test
- phase-B deterministic TAP test
- Claude headless smoke (with optional real mode)
Validation run:
- bash -n:
- test_mcp_llm_discovery_phaseb-t.sh
- test_mcp_claude_headless_flow-t.sh
- run_real_claude_e2e.sh
- static_harvest.sh
- python3 -m py_compile:
- two_phase_discovery.py
|
5 days ago |
|
|
ade0130e67 |
discoveryagent: update Claude Code headless flow for target_id-scoped MCP tools
Enhance the existing Claude Code custom-prompt discovery examples to match the new MCP contract introduced by multi-target routing and target-scoped catalog semantics.
Changes included:
- static_harvest.sh
- added required --target-id argument (with MCP_TARGET_ID env fallback)
- always sends target_id in discovery.run_static arguments
- updated usage/help/examples to include target_id
- two_phase_discovery.py
- added required --target-id argument
- static-harvest bootstrap call now passes target_id
- improved run_id error guidance with target_id-aware commands
- injects <TARGET_ID> placeholder into user prompt template
- improved runtime logging to display target_id
- Prompt templates
- two_phase_discovery_prompt.md:
- catalog/agent/llm tool signatures updated to include target_id
- Stage 0 and workflow text updated to use provided target_id + run_id
- removed contradictory instruction that asked to call discovery.run_static in Phase 2
- two_phase_user_prompt.md:
- added target_id input section
- all example calls updated to pass target_id
- start instructions now require target_id + run_id
- README and utility example
- README quick-start curl and script examples now include target_id
- test_catalog.sh now accepts/prints target_id and passes it to catalog/llm calls
Validation:
- bash -n passed for updated shell scripts
- python3 -m py_compile passed for two_phase_discovery.py
|
6 days ago |
|
|
2538e303cf |
tap ai: add dual-backend static-harvest fixtures and target_id coverage test
Implement phase-A (static harvesting) TAP coverage for MCP multi-target discovery by seeding deterministic schemas on both MySQL and PostgreSQL and validating discovery/catalog behavior per target_id.
What this commit adds:
- AI group deterministic seed datasets
- Added test/tap/groups/ai/mysql-seed.sql with:
- tap_mysql_static_customers
- tap_mysql_static_orders (FK to customers)
- Added test/tap/groups/ai/pgsql-seed.sql with:
- tap_pgsql_static_accounts
- tap_pgsql_static_events (FK to accounts)
- pre-proxysql hook integration
- Updated test/tap/groups/ai/pre-proxysql.bash to seed both backends after container startup:
- seed_mysql_test_data() executes mysql-seed.sql via mysql CLI
- seed_pgsql_test_data() executes pgsql-seed.sql via psql (or docker compose exec fallback)
- Existing monitor-user/profile setup is preserved
- New TAP test: test/tap/tests/test_mcp_static_harvest-t.sh
- Validates MCP/ProxySQL reachability
- Validates list_targets exposes both mysql and pgsql target_id entries
- Runs discovery.run_static for MySQL target_id and validates run_id + protocol=mysql
- Validates catalog.list_objects returns seeded MySQL table for that run
- Runs discovery.run_static for PostgreSQL target_id and validates run_id + protocol=pgsql
- Validates catalog.list_objects returns seeded PostgreSQL table for that run
- Validates run isolation across targets (cross-target run_id lookup fails as expected)
- Documentation update
- Updated test/tap/groups/ai/README.md with seeded-table details and manual run instructions for the new static-harvest test
Notes:
- This commit focuses strictly on phase-A static harvesting, as requested.
- Phase-B (LLM-driven discovery) tests are intentionally not included here.
|
6 days ago |
|
|
9685cdaa4b |
mcp discovery: enforce target-scoped run model and add protocol-aware static harvesting (mysql+pgsql)
Refactor the MCP query/discovery stack to remove prototype-era MySQL-only assumptions and make discovery/catalog semantics explicitly target-scoped. This commit is intentionally not backward compatible with legacy single-target catalog metadata. Key implementation details: - Discovery_Schema: - runs table now stores target_id, protocol, and server_version - resolve_run_id() now requires target_id and resolves schemas within target scope - create_run() now records target/protocol/server version - added legacy schema detection + destructive catalog table rebuild when old runs layout is found - fixed resultset lifetime/escaping issues in target-aware run resolution - New PostgreSQL static harvester: - added PgSQL_Static_Harvester class and build wiring - harvests schemas/objects/columns/indexes/fks/view definitions into Discovery_Schema - maps pg metadata to object_id-based insert APIs used by Discovery_Schema - Query_Tool_Handler: - constructor simplified to catalog_path only (no mcp-mysql_* runtime ctor deps) - discovery.run_static now requires target_id and dispatches protocol-aware harvester at runtime - catalog.*, agent.run_start, and llm.* tool contracts now require target_id when resolving run_id - all run_id resolution call sites switched to resolve_run_id(target_id, ...) - list_schemas catalog query now scoped by target_id via runs join - digest logging path now resolves run_id in target context - ProxySQL_MCP_Server: - updated Query_Tool_Handler construction to new signature - Docs updated: - added explicit target_id scoping guidance for discovery/catalog/agent/llm workflows - clarified protocol-aware routing and noted legacy examples still present in large script docs Build validation: - Recompiled changed objects with PROXYSQLGENAI=1: - Query_Tool_Handler.oo - Discovery_Schema.oo - PgSQL_Static_Harvester.oo - ProxySQL_MCP_Server.oo |
6 days ago |
|
|
7e54883ba5 |
mcp query debugging: surface rule-id context for blocks and add backend failure SQL details
Observed confusion:
- MCP failures like 'Error 100' / 'Error 101' were visible at endpoint level but gave no direct clue whether they came from query-rule blocks or backend execution failures.
- Connection/firewall-style failures also lacked enough target/query context in lower-level logs.
Changes in this commit:
1) Log MCP query-rule block/OK matches with rule id and context
- In Discovery_Schema::evaluate_mcp_query_rules():
- when error_msg rule action is applied, log:
rule_id, tool, target_id, schema, error_msg, query preview.
- when OK_msg rule action is applied, log:
rule_id, tool, target_id, schema, ok_msg.
- This makes it explicit which runtime_mcp_query_rules row produced the returned error.
2) Add detailed backend execution error logs in Query_Tool_Handler
- For MySQL and PostgreSQL execution paths (with and without schema switching), failures now log:
- target_id
- schema (when applicable)
- backend error text
- SQL query text
- Added context for PG search_path failures too.
- This disambiguates rule-block errors from actual backend connectivity/authorization/firewall failures.
Behavioral notes:
- API responses are unchanged (to avoid breaking tests expecting exact messages).
- Logging is now sufficiently descriptive to trace each failure to either:
- a specific MCP rule id/action, or
- a concrete backend execution error.
Validation:
- Recompiled successfully:
- lib/obj/Discovery_Schema.oo
- lib/obj/Query_Tool_Handler.oo
|
6 days ago |
|
|
8fbd570c79 |
mcp variables: stop writing runtime_global_variables during LOAD MCP VARIABLES TO RUNTIME
Issue: - MCP variable load path was writing rows into runtime_global_variables. - For MCP this is incorrect and misleading; runtime_global_variables should not be used as a write target in this flow. - Logs showed explicit INSERT statements into runtime_global_variables for mcp-* entries. Fix implemented: 1) Removed runtime_global_variables population from MCP database->runtime flow - In flush_mcp_variables___database_to_runtime(), removed the block that called: flush_mcp_variables___runtime_to_database(..., runtime=true, ...) - LOAD MCP VARIABLES TO RUNTIME now applies mcp-* variables to GloMCPH and reloads MCP server state, without runtime_global_variables writes. 2) Removed runtime_global_variables writes from MCP runtime->database helper - In flush_mcp_variables___runtime_to_database(): - removed DELETE FROM runtime_global_variables WHERE variable_name LIKE 'mcp-%' - removed INSERT INTO runtime_global_variables(...) per variable - Function now persists MCP variables only to global_variables (main/disk paths), which is the intended save behavior. 3) Removed temporary MCP info-level debug noise related to runtime_global_variables inserts - Deleted MCP info logs that printed per-variable INSERT SQL into runtime_global_variables. Build validation: - Recompiled successfully: - lib/obj/Admin_FlushVariables.oo Expected result after this commit: - Executing LOAD MCP VARIABLES TO RUNTIME should no longer emit any INSERT/DELETE against runtime_global_variables for mcp-* variables. - MCP runtime behavior remains: variables are applied in-memory and MCP server reload logic is triggered via load_mcp_server(). |
6 days ago |
|
|
f15460348c |
mcp query diagnostics: include runtime hostgroup status breakdown when target lacks ONLINE backend
Adds targeted debug context for non-executable MCP targets. When Query_Tool_Handler reports that a target has no ONLINE backend, it now appends a status summary read from the corresponding runtime server table for that hostgroup: - MySQL: runtime_mysql_servers - PostgreSQL: runtime_pgsql_servers Example diagnostics now include status aggregates such as: - ONLINE=0, SHUNNED=1 - OFFLINE_SOFT=1 - no rows in runtime_*_servers for hostgroup X This closes the observability gap where users saw 'target non-executable' but could not immediately tell why the hostgroup failed ONLINE eligibility. Validation: - Recompiled lib/obj/Query_Tool_Handler.oo successfully. |
6 days ago |
|
|
f4bc1943fb |
mcp query diagnostics: restore strict ONLINE requirement and explain target non-executable failures
This change does two things:
1) Reverts executable-target policy to strict ONLINE backend status
- Query target resolution in Query_Tool_Handler is restored to require UPPER(status)='ONLINE' in runtime_mysql_servers/runtime_pgsql_servers.
- This matches expected semantics: non-ONLINE backends should not be considered executable MCP targets.
2) Replaces generic non-executable errors with actionable diagnostics
- Added Query_Tool_Handler::format_target_unavailable_error(target_id).
- All query-tool paths that previously returned the generic:
'Target is not executable by this handler'
now return a reasoned error with context, including:
- target_id
- protocol
- hostgroup_id
- auth_profile_id
- concrete reason (for example: empty db_username in auth profile, or no ONLINE backend in runtime_*_servers)
- Internal logs in get_connection()/get_pgsql_connection() now emit the same detailed reason.
3) Improves MCP endpoint failure logging with SQL/target context
- In MCP_JSONRPC_Resource::handle_tools_call(), failed tool calls now log:
- endpoint/tool/error
- full arguments payload (existing)
- additional parsed details when present:
target_id, schema, sql (trimmed for safety)
- This makes it explicit what SQL was requested when a tool call fails before execution.
4) Protocol normalization retained for robustness
- MCP_Threads_Handler::load_target_auth_map() lowercases protocol values when loading runtime profile joins.
- This avoids protocol-casing drift causing inconsistent routing behavior.
Build validation:
- Successfully recompiled modified objects:
- lib/obj/Query_Tool_Handler.oo
- lib/obj/MCP_Endpoint.oo
- lib/obj/MCP_Thread.oo
Resulting behavior expected on next test run:
- If a target is non-executable, the response and logs will state exactly why (ONLINE/backend/auth reason), instead of a generic error.
- Failure logs will also include the attempted SQL text (for tool calls that carry sql arguments), clarifying whether a backend query was actually executed or blocked before execution.
|
6 days ago |
|
|
49f811a638 |
mcp query: stop misclassifying reachable targets as non-executable
Observed failure: - MCP tools received valid target_id values, but /mcp/query returned 'Target is not executable by this handler'. - This prevented rule evaluation, digest accounting, and hit counters from advancing, causing multiple TAP phases to fail. Root cause addressed in this commit: - Target endpoint resolution required runtime server status to be exactly ONLINE. - In practice, reachable backends can temporarily appear in other statuses (for example monitor-related transitions), while MCP direct connections with profile credentials are still valid. - Protocol casing inconsistencies could also lead to fragile routing behavior when profile data is consumed. Changes: 1) Relax backend eligibility during endpoint resolution - In Query_Tool_Handler::refresh_target_registry(), endpoint discovery now accepts any server status except OFFLINE_HARD. - ONLINE is still preferred deterministically via ORDER BY, but non-ONLINE candidates remain eligible for MCP execution. 2) Normalize protocol values to lowercase - In MCP_Threads_Handler::load_target_auth_map(), target protocol is normalized to lowercase when loaded from runtime profiles. - In Query_Tool_Handler::refresh_target_registry(), protocol is normalized again defensively before routing decisions. 3) Improve diagnostics for target executability - Added explicit warnings when: - a target resolves to a backend but has empty db_username, - a target has no eligible backend for its hostgroup/protocol. - These logs make it clear why a target is being marked non-executable. Expected behavioral impact: - MCP query tools should execute for valid target_id entries even when monitor status is not strictly ONLINE. - Query-rules blocking/rewriting/OK actions should be exercised again. - stats_mcp_query_rules hits and stats_mcp_query_digest counters should resume incrementing once queries run. Validation performed: - Recompiled modified objects successfully: - lib/obj/Query_Tool_Handler.oo - lib/obj/MCP_Thread.oo |
6 days ago |
|
|
6a788e48c4 |
mcp: make /mcp/query self-healing when targets/backends appear after startup
Problem addressed: - MCP query endpoint could stay unusable with 'Tool Handler not initialized' after restart/reload flows. - This was triggered when Query_Tool_Handler could not build an executable pool at init time (for example profiles loaded before ONLINE servers), leaving runtime commands like 'LOAD MCP QUERY RULES FROM MEMORY' blocked behind a NULL query tool handler. - Users had to manually toggle MCP enablement to recover, which is the opposite of expected self-healing behavior. What this commit changes: 1) Query_Tool_Handler pool init is now resilient and idempotent - init_connection_pool() now starts with close() so reinitialization fully resets stale mysql/pgsql pool state before rebuilding from runtime profile + server tables. - If no executable targets are available, init_connection_pool() now returns success with a warning instead of hard failure. This allows the query tool handler (and /mcp/query endpoint) to stay initialized even before backends are ready. 2) Lazy auto-rebuild on first query usage - get_connection() and get_pgsql_connection() now: - refresh target registry before resolution, - attempt to use an existing pooled connection, - if unavailable, trigger a full pool rebuild (init_connection_pool()) and retry once. - This provides automatic recovery when hostgroups/servers/profiles are loaded or changed after MCP startup, without requiring manual MCP disable/enable. 3) Admin runtime rule load path attempts MCP recovery - load_mcp_query_rules_to_runtime() now detects NULL query tool handler and calls load_mcp_server() once before failing. - This turns a hard, immediate admin error into a self-recovery attempt consistent with MCP runtime semantics. Behavioral impact: - /mcp/query endpoint remains online even when there are temporarily zero executable targets. - As soon as compatible runtime targets/backends exist, run_sql_readonly/explain_sql can recover automatically on demand. - LOAD MCP QUERY RULES TO/FROM RUNTIME no longer fails immediately on first NULL handler condition; it retries after MCP server recovery. Validation performed: - Recompiled modified objects successfully: - lib/obj/Query_Tool_Handler.oo - lib/obj/ProxySQL_Admin.oo - Full TAP runtime test execution is not possible in this sandbox due blocked local TCP socket creation; validation should be run in the normal test environment where ProxySQL/MySQL/PGSQL are reachable. |
6 days ago |
|
|
998bd82387 |
MCP TAP startup: fix tool-handler initialization order, improve MCP PROFILES observability, and seed monitor users
This change fixes recurring MCP TAP failures where `/mcp/query` returned: Tool Handler not initialized for endpoint: query and where backend monitor auth failures flooded logs. Problem summary - MCP server startup can occur before runtime target/auth profiles and backend server mappings are loaded. - If that happens, Query_Tool_Handler initialization sees no executable targets and remains NULL. - MCP endpoint resources bind the handler pointer at creation time, so a NULL query handler at startup breaks `/mcp/query` until server restart. Code changes 1) Add explicit admin command logging for MCP PROFILES commands - Added `Received <command>` logging in the MCP PROFILES command block, matching behavior of other admin command handlers. - File: `lib/Admin_Handler.cpp` 2) Trigger MCP server refresh after `LOAD MCP PROFILES TO RUNTIME` - After copying profiles into runtime and rebuilding target/auth map, call `ProxySQL_Admin::load_mcp_server()`. - This allows MCP to self-heal when profiles become available after initial startup. - File: `lib/Admin_Handler.cpp` 3) Restart MCP server when query handler is missing - Extended `ProxySQL_Admin::load_mcp_server()` restart checks to include: - running server + `query_tool_handler == NULL` - Restart reason now includes tool handler initialization mismatch. - File: `lib/ProxySQL_Admin.cpp` 4) Fix TAP configurator load order to avoid early MCP startup - Reordered `test/tap/tests/mcp_rules_testing/configure_mcp.sh` runtime sequence: - `LOAD MYSQL SERVERS TO RUNTIME` - `LOAD PGSQL SERVERS TO RUNTIME` (best effort) - `LOAD MCP PROFILES TO RUNTIME` - `LOAD MCP VARIABLES TO RUNTIME` (last) - This ensures MCP starts only after routing/auth context is present. 5) Seed monitor credentials in AI local infra pre-hook - Added backend user/role creation for default monitor credentials `monitor/monitor`: - MySQL: create user + monitor-relevant grants - PostgreSQL: create role + `pg_monitor` + DB connect grants - Reduces monitor auth noise in local AI TAP dockerized setup. - File: `test/tap/groups/ai/pre-proxysql.bash` 6) Mark new TAP phase scripts executable - `test_phase10_eval_explain.sh` - `test_phase11_pgsql_target.sh` Expected outcome - MCP query endpoint no longer stays stuck with an uninitialized tool handler after TAP configuration. - MCP query-rules admin commands stop failing due to missing Query_Tool_Handler. - MCP profile command flow is visible in logs for easier debugging. - Local AI TAP infra no longer emits continuous monitor authentication failures for default monitor credentials. |
6 days ago |
|
|
af0411bd46 |
MCP: add target-aware rules/stats tests, explain_sql rule coverage, and AI local docker TAP infra
This commit completes end-to-end MCP query-rules validation for multi-target routing and introduces a self-contained TAP infra for the `ai` group that can run both in Jenkins and manually. Main MCP/runtime changes: - Extended MCP query-rule matching context to include both `target_id` and resolved backend `username`. - Added `target_id` column to `mcp_query_rules` and `runtime_mcp_query_rules` table definitions. - Extended `stats_mcp_query_rules` to include `username` and `target_id` alongside `rule_id` and `hits`. - Updated load/save/runtime refresh paths to persist and rehydrate the expanded MCP rule schema. - Wired the rule engine into `explain_sql` so MCP rules apply consistently across `run_sql_readonly` and `explain_sql`. - Included startup-order fix in `src/main.cpp` to initialize MCP/GenAI thread handlers early, preventing startup crashes in PROXYSQLGENAI builds. Test coverage changes: - Updated existing MCP TAP phases to assert target-aware and username-aware behavior: - `test_phase4_stats.sh` - `test_phase6_eval_block.sh` - Added new MCP TAP phases: - `test_phase10_eval_explain.sh` (rule engine coverage for `explain_sql`) - `test_phase11_pgsql_target.sh` (pgsql target routing/rule/stats coverage; graceful skip if no pgsql target is configured) - Updated `test_mcp_query_rules-t.sh` runner to execute new phases. AI group isolated infra (manual + CI compatible): - Added `test/tap/groups/ai/docker-compose.yml` with MySQL 9.0 and PostgreSQL 16 backends. - Added lifecycle scripts: - `docker-compose-init.bash` - `docker-compose-destroy.bash` - `pre-proxysql.bash` - `post-proxysql.bash` - Extended `test/tap/groups/ai/env.sh` with local default ports/credentials/target IDs used by MCP TAP tests. - Added `test/tap/groups/ai/README.md` documenting manual execution flow outside Jenkins. Outcome: - MCP tests now validate routing-aware rule enforcement and stats attribution for both MySQL and PostgreSQL targets. - The `ai` TAP group can be run with an isolated local backend stack without relying on external Jenkins infra repositories. |
6 days ago |
|
|
b46fb575ea |
TAP MCP client: port PR5372 coverage to MCP profiles/target_id routing model
This commit ports the TAP MCP client test coverage from PR #5372 to the new MCP profiles architecture, replacing legacy direct backend variable assumptions with target/profile-based routing. What was updated: - Reworked test setup to use `mcp_target_profiles` + `mcp_auth_profiles` rather than legacy `mcp-mysql_*` config variables. - Updated MCP request payloads and helper flows to route via `target_id`. - Aligned assertions with profile-backed runtime behavior and removed obsolete expectations tied to static mysql host/user/password globals. Why this was needed: - The previous tests were written before MCP target/profile routing existed. - Without this update, TAP coverage would exercise deprecated paths and miss regressions in the current MCP execution model. Result: - Test suite now validates the same functional intent as PR #5372 but against the current profile-driven MCP routing implementation. |
6 days ago |
|
|
67cb1b72b5 |
MCP TAP: pass target_id explicitly in query-rules test payloads
This commit updates MCP TAP query-rules tests to always include `target_id` in tool call payloads where query execution is expected. Details: - Added explicit `target_id` arguments to MCP `/mcp/query` tool invocations in rule evaluation tests. - Removed implicit dependence on server-selected defaults during test execution. Why this change is important: - Query-rules behavior is now route-aware and can depend on logical target selection. - Explicit routing in tests prevents non-determinism and ensures assertions are tied to the intended backend target. Result: - More deterministic TAP behavior and clearer validation of rule evaluation under target-based routing. |
6 days ago |
|
|
4a8b224038 |
MCP TAP/docs: migrate tests and documentation from legacy MCP mysql vars to profile-based routing
This commit migrates MCP TAP assets and related docs away from deprecated `mcp-mysql_*` style configuration toward the profile-based model centered on auth profiles, target profiles, and `target_id` routing. Changes included: - Updated TAP configuration helpers and test inputs to build and load MCP auth/target profiles. - Replaced legacy variable-driven setup assumptions with runtime profile loading (`LOAD MCP PROFILES ...`). - Refreshed documentation snippets and examples to describe the profile-based configuration flow. Motivation: - Keep test and documentation surfaces aligned with the current MCP architecture. - Eliminate ambiguity between old POC paths and supported profile-driven routing. Outcome: - TAP and docs now consistently describe and exercise MCP routing through profile tables and `target_id` selection. |
6 days ago |
|
|
013864b36f |
MCP: introduce profile-based target/auth routing and unified LOAD/SAVE MCP PROFILES commands
This commit introduces the core MCP routing architecture that decouples client-facing target selection from backend connection details. Architecture introduced: - New MCP auth profile table to store backend credentials/policy (`mcp_auth_profiles`). - New MCP target profile table to map opaque `target_id` -> protocol/hostgroup/auth profile (`mcp_target_profiles`). - Runtime mirrors for both profile tables. Behavioral changes: - MCP query tools resolve execution context by `target_id` and route internally by protocol + hostgroup. - Client no longer needs backend-specific connection details; only logical target identifiers. - Unified admin commands for profile lifecycle management: - `LOAD MCP PROFILES TO/FROM MEMORY/RUNTIME/DISK` - `SAVE MCP PROFILES TO/FROM MEMORY/RUNTIME/DISK` Design goals: - Support multi-backend MCP execution (MySQL + PostgreSQL) behind one endpoint. - Provide server-side credential management and cleaner operational model. - Replace legacy one-backend POC configuration with scalable target/auth abstractions. Result: - MCP routing is now dynamic, protocol-agnostic at the client layer, and fully managed through profile tables and unified load/save commands. |
6 days ago |
|
|
5de836a4c1
|
Merge pull request #5373 from sysown/v3.0_improve_mysql_monitoring_5256
Improve MySQL Monitor connection management |
1 week ago |
|
|
3b578db4bf
|
Merge pull request #5374 from sysown/v3.0-test0213
Fix Valgrind-reported uninitialized memory issues |
1 week ago |
|
|
83209da487
|
Merge pull request #5356 from sysown/v3.0-5355
Fix #5355: Add null pointer check in RequestEnd() to prevent use-after-free crash |
1 week ago |
|
|
37e72ea3f9 |
Fix PROXY protocol detection in MySQL_Data_Stream::read_from_net
When pkts_recv==0, the code reads 4 bytes expecting a MySQL packet header, but PROXY protocol starts with 'PROXY ' which gets misinterpreted as a MySQL header with a huge packet length (0x504f5250 = ~1.3GB). Add check for 'PROX' prefix before parsing as MySQL header. This prevents passing an incorrect length parameter to recv() that exceeds the buffer size. Fixes #5376 |
1 week ago |
|
|
11a43bf768 |
Fix uninitialized max_allowed_pkt in MySQL_Connection constructor
Initialize options.max_allowed_pkt to 0 to prevent Valgrind errors when logging handshake debug information. |
1 week ago |
|
|
ca4f858b29 |
Fix uninitialized memory read in pgsql tokenizer
Change malloc() to calloc() in get_result_buffer() to zero-initialize the query digest buffer before use. This prevents stage_2_parsing() from reading uninitialized memory when processing query digests. Fixes #5375 |
1 week ago |
|
|
85952373d9 |
Fix uninitialized mondb pointer in MySQL_Monitor_State_Data constructor
Add mondb = NULL initialization to prevent Valgrind errors when monitor threads access the pointer before it's properly set. |
1 week ago |
|
|
200fdecb8d |
Apply AI agent review fixes to PR #5374
Critical Fixes: - Fix NULL pointer dereferences in MySQL_Logger.cpp: * Add null checks for myds->myconn->parent in log_audit_entry() * Fix cleanup code in log_request() and log_audit_entry() * Change sprintf to snprintf for buffer safety - Remove redundant pthread_rwlock_init in debug.cpp: * filters_rwlock already initialized with PTHREAD_RWLOCK_INITIALIZER * Re-initialization caused undefined behavior per POSIX Major Improvements: - Add bounded wait helper wait_for_glo_mth() in proxysql_utils.h: * Replaces indefinite while loops with 10s timeout * Applied to 26 locations across 4 files Build System: - Require C++17 in Makefile (remove C++11 fallback): * Code uses C++17 structured bindings extensively * Cleanest solution vs adding fallback guards to 27+ locations Compilation fixes: - Add unistd.h include for usleep - Remove conflicting GloMyMon extern declaration Files changed: - Makefile - include/proxysql_utils.h - lib/MySQL_Logger.cpp - lib/debug.cpp - lib/MySQL_Monitor.cpp - lib/ProxySQL_Admin.cpp - lib/ClickHouse_Server.cpp - src/SQLite3_Server.cpp |
1 week ago |
|
|
1cccfb3220 |
Fix connection cleanup in failure paths
|
1 week ago |
|
|
941e6b7320 |
Fix filters_rwlock initialization race condition
Add static initialization PTHREAD_RWLOCK_INITIALIZER to filters_rwlock in debug.cpp to prevent race condition where proxy_debug() is called before init_debug_struct() initializes the rwlock. This fixes Valgrind errors in filter_debug_entry() where threads were accessing an uninitialized rwlock. |
1 week ago |
|
|
3c85c593cf |
Add GloMTH initialization wait to all monitor and server threads
Fix race condition where threads were accessing GloMTH before it was fully
initialized, causing Valgrind errors in get_variable_int() and related
functions.
Added wait loop pattern (while GloMTH==NULL { usleep(50000); }) followed
by usleep(100000) to ensure GloMTH is fully initialized before use:
In lib/MySQL_Monitor.cpp:
- monitor_connect(), monitor_ping(), monitor_read_only()
- monitor_group_replication(), monitor_galera(), monitor_replication_lag()
- monitor_AWS_Aurora_thread_HG(), monitor_aws_aurora()
- init_mysql_thread_struct()
In src/SQLite3_Server.cpp:
- SQLite3_Server_session_handler
In lib/ProxySQL_Admin.cpp:
- admin_session_handler
In lib/ClickHouse_Server.cpp:
- ClickHouse_Server_session_handler
The pattern ensures threads wait for GloMTH initialization during startup,
then check for NULL during shutdown to exit cleanly.
|
1 week ago |
|
|
aa53d990ed |
Add GloMTH initialization wait to all monitor threads
Fix race condition where monitor threads were accessing GloMTH before
it was fully initialized, causing Valgrind errors in get_variable_int().
Added wait loop pattern (while GloMTH==NULL { usleep(50000); }) followed
by usleep(100000) to:
- monitor_ping_thread
- monitor_read_only_thread
- monitor_replication_lag_thread
- monitor_group_replication_thread (also moved check before MySQL_Thread creation)
- monitor_galera_thread (also moved check before MySQL_Thread creation)
This matches the existing pattern in monitor_connect_thread.
|
1 week ago |
|
|
f4cd34be5c |
Fix race condition in monitor_connect_thread
Add wait loop for GloMTH initialization before accessing variables. Other monitor threads (MonitorPing, MonitorReadOnly, etc.) already had this pattern, but monitor_connect_thread was missing it. This fixes Valgrind errors about uninitialized values in get_variable_uint16() when strcasecmp reads from memory that hasn't been fully initialized yet. |
1 week ago |
|
|
33ce4217f0 |
Merge remote-tracking branch 'v3.0' into v3.0_improve_mysql_monitoring_5256
|
1 week ago |
|
|
9eac5f6420 |
Improve async ping mmsd ownership tracking and pool validation
|
1 week ago |
|
|
09d0dcb808 |
Fix uninitialized tmp_charset in Data_Stream constructors
Initialize tmp_charset=0 in MySQL_Data_Stream and PgSQL_Data_Stream constructors. This field was used uninitialized in process_pkt_handshake_response() when calling proxy_debug(), causing Valgrind errors about uninitialized values in vsnprintf. |
1 week ago |
|
|
7c67eb25f1 |
Fix uninitialized fd and status in Data_Stream constructors
Initialize fd=-1 and status=0 in MySQL_Data_Stream and PgSQL_Data_Stream constructors. These fields were not initialized, causing Valgrind errors when GPFC_Statuses2() checked mybe->server_myds->status and fd. |
1 week ago |
|
|
2af3b0d333 |
Add notes about Valgrind and SQLite memory management
Add comments to Makefile and deps/Makefile explaining that SQLite's internal memory allocator (enabled by SQLITE_ENABLE_MEMORY_MANAGEMENT) can cause false positives in Valgrind. To avoid this when running Valgrind, rebuild SQLite without this flag. |
1 week ago |
|
|
4e39297ef9 |
Fix more Valgrind uninitialized value errors
1. Base_Thread.cpp: Initialize member variables in constructor - curtime, last_move_to_idle_thread_time, epoll_thread, shutdown, mysql_sessions were not initialized, causing uninitialized value use in ProcessAllMyDS_BeforePoll and ProcessAllMyDS_AfterPoll. 2. MySQL_Logger.cpp: Initialize query_ptr, query_len, and buf in MySQL_Event constructor. These fields were used without initialization, causing Valgrind errors in JSON serialization and other operations. |
1 week ago |
|
|
fdbea2a32e |
Fix uninitialized memory in Command_Counter::_counters
Replace _counters{} initialization syntax with explicit memset() to ensure
the _counters array is properly zero-initialized. The _counters{} syntax
may not reliably zero-initialize arrays in all compiler implementations,
causing Valgrind to report use of uninitialized values when
add_and_reset() reads from the array.
Also remove the safety checks added previously since the root cause
is now properly fixed.
|
1 week ago |
|
|
c2f82b3d4e |
Fix more Valgrind uninitialized value errors
1. MySQL_Logger.cpp: Initialize username_len, schemaname_len, and server_len to 0 in MySQL_Event constructor. These fields were uninitialized and used in copy constructor and JSON serialization. 2. debug.cpp: Add default member initializers to DebugLogEntry struct to ensure POD fields are zero-initialized. Move errno save/restore to after early return checks to avoid potential TLS access issues before thread is fully initialized. |
1 week ago |
|
|
ee7ee0b387 |
Fix multiple Valgrind-reported uninitialized memory issues
1. MySQL_Logger.cpp: Add NULL checks for myconn->parent before accessing address/port. Client connections (frontend) have parent=NULL, causing uninitialized value reads when logging. 2. debug.cpp: Add NULL check for GloVars.global.gdbg_lvl before accessing debug level configuration. Prevents use of uninitialized data when proxy_debug_func is called before init_debug_struct() completes. 3. ProxySQL_Admin.cpp: Add NULL checks for debug filter database fields before constructing filter strings. Prevents undefined behavior when constructing std::string from NULL pointers. |
1 week ago |
|
|
af58865b06 |
Fix uninitialized memory in QueryParserArgs.buf
Use memset to zero-initialize the entire QueryParserArgs struct instead of individually setting only digest_text and first_comment to NULL. This fixes Valgrind errors about use of uninitialised values in strcasestr() when reading from the uninitialized buf array. Fixes errors like: Use of uninitialised value of size 8 at tolower (ctype.c:46) by strcasestr by MySQL_Connection::ProcessQueryAndSetStatusFlags(char*) |
1 week ago |
|
|
cc53ddca23 |
Merge branch 'v3.0-openssl-fix' into v3.0-test0213
|
1 week ago |
|
|
52718df11f |
Fix memory leak in stats processlist functions
- Add missing delete resultset in stats___mysql_processlist - Add missing delete resultset in stats___pgsql_processlist |
1 week ago |
|
|
0654efd62b
|
Merge pull request #5371 from sysown/v3.0-fixes0212
Fix admin shutdown races, RAII sqlite3 statements, and unsafe sprintf usage |
1 week ago |
|
|
746eca9f7c |
More sprintf to snprintf conversions and indentation fixes
- Replace remaining sprintf with snprintf in Admin_FlushVariables.cpp - Fix indentation in flush_GENERIC_variables__process__database_to_runtime - Apply same pattern to ProxySQL_Admin.cpp and ProxySQL_Admin_Stats.cpp |
1 week ago |
|
|
3e37337877 |
Use RAII for sqlite3 statements across codebase
- Convert prepare_v2() calls to use unique_ptr RAII pattern - Remove manual sqlite3_finalize calls (now handled by RAII) - Update flush_*_variables functions to use new prepare_v2 return pattern - Apply changes to Admin, Cluster, Monitor, Catalog, and other modules |
1 week ago |
|
|
335be9ec72 |
Fix unsafe sprintf and error message handling
- Replace sprintf with snprintf in flush_*_variables functions - Add null value safety with safe_val in variable flushing - Fix error message to use send_error_msg_to_client instead of send_ok_msg_to_client |
1 week ago |
|
|
61ce0a96e8 |
Remove redundant sqlite3_finalize calls in pgSQL stats
Statements are managed by RAII and auto-finalized |
1 week ago |
|
|
afd6dffb05 |
Fix admin shutdown races and implement graceful teardown
- Add coordinated shutdown for PROXYSQL KILL/SHUTDOWN in debug builds - Track active admin client threads with admin_client_threads_active counter - Add shutdown checks to prevent new connections during shutdown - Wait for all admin client threads to finish before cleanup in admin_shutdown() - Handle accept failures gracefully |
1 week ago |