From 1ebe4de9b77ade1d8ed73bcd9a766d7ebf4e49f3 Mon Sep 17 00:00:00 2001 From: Rene Cannao Date: Tue, 24 Mar 2026 23:22:51 +0000 Subject: [PATCH] Fix mysql84 pre-proxysql hook, basictests setup, and move flaky tests - mysql84 pre-proxysql.bash: use docker exec for all ProxySQL admin commands (was using mysql -h127.0.0.1 which can't reach the container) - basictests setup-infras.bash: use INSERT OR REPLACE when remapping hostgroups 1300/1301 -> 0/1 to avoid UNIQUE constraint violation when target hostgroups already have entries - proxysql-tester.py: skip per-stage coverage generation when MULTI_GROUP=1 (was spawning 32 gcov processes on 35k .gcno files) - Move test_cluster_sync-t and test_read_only_actions_offline_hard_servers-t to legacy-g5 pending investigation of cluster sync algorithm issues. Move reg_test_3765_ssl_pollout-t from legacy-g5 to legacy-g4. --- test/scripts/bin/proxysql-tester.py | 5 ++- test/tap/groups/basictests/setup-infras.bash | 10 ++++-- test/tap/groups/groups.json | 6 ++-- test/tap/groups/mysql84/pre-proxysql.bash | 37 ++++++++++---------- 4 files changed, 32 insertions(+), 26 deletions(-) diff --git a/test/scripts/bin/proxysql-tester.py b/test/scripts/bin/proxysql-tester.py index c6315f221..6bb9fe03a 100755 --- a/test/scripts/bin/proxysql-tester.py +++ b/test/scripts/bin/proxysql-tester.py @@ -1636,7 +1636,10 @@ def main(argv): log.debug(f"TEST_PY_TAP_SHUFFLE_LIMIT is disabled (current value: {shuffle_limit})") # Options - coverage = int(os.environ.get('WITHGCOV', 0)) or int(os.environ.get('COVERAGE_MODE', 0)) + # When MULTI_GROUP=1, coverage collection is handled centrally by + # run-multi-group.bash after all groups finish — skip it here. + multi_group = int(os.environ.get('MULTI_GROUP', 0)) + coverage = (int(os.environ.get('WITHGCOV', 0)) or int(os.environ.get('COVERAGE_MODE', 0))) and not multi_group for opt, arg in opts: if opt in ('-h', "--help"): diff --git a/test/tap/groups/basictests/setup-infras.bash b/test/tap/groups/basictests/setup-infras.bash index 228582595..519ce0c53 100755 --- a/test/tap/groups/basictests/setup-infras.bash +++ b/test/tap/groups/basictests/setup-infras.bash @@ -27,9 +27,13 @@ READER_HG=$(echo "${PAIR}" | awk '{print $2}') echo ">>> Remapping hostgroup pair ${WRITER_HG}/${READER_HG} -> 0/1" -# Move servers: update hostgroup IDs in-place -${MYSQL_CMD} -e "UPDATE mysql_servers SET hostgroup_id = 0 WHERE hostgroup_id = ${WRITER_HG};" -${MYSQL_CMD} -e "UPDATE mysql_servers SET hostgroup_id = 1 WHERE hostgroup_id = ${READER_HG};" +# Move servers: copy into target hostgroups with INSERT OR REPLACE, then remove originals. +# Cannot UPDATE in-place because hostgroup 0/1 may already have entries with the same +# hostname:port, causing a UNIQUE constraint violation. +${MYSQL_CMD} -e "INSERT OR REPLACE INTO mysql_servers (hostgroup_id, hostname, port, gtid_port, status, weight, compression, max_connections, max_replication_lag, use_ssl, max_latency_ms, comment) SELECT 0, hostname, port, gtid_port, status, weight, compression, max_connections, max_replication_lag, use_ssl, max_latency_ms, comment FROM mysql_servers WHERE hostgroup_id = ${WRITER_HG};" +${MYSQL_CMD} -e "INSERT OR REPLACE INTO mysql_servers (hostgroup_id, hostname, port, gtid_port, status, weight, compression, max_connections, max_replication_lag, use_ssl, max_latency_ms, comment) SELECT 1, hostname, port, gtid_port, status, weight, compression, max_connections, max_replication_lag, use_ssl, max_latency_ms, comment FROM mysql_servers WHERE hostgroup_id = ${READER_HG};" +${MYSQL_CMD} -e "DELETE FROM mysql_servers WHERE hostgroup_id = ${WRITER_HG};" +${MYSQL_CMD} -e "DELETE FROM mysql_servers WHERE hostgroup_id = ${READER_HG};" # Replace replication hostgroup mapping ${MYSQL_CMD} -e "DELETE FROM mysql_replication_hostgroups WHERE writer_hostgroup = ${WRITER_HG};" diff --git a/test/tap/groups/groups.json b/test/tap/groups/groups.json index 69f0a263e..3a4817b2a 100644 --- a/test/tap/groups/groups.json +++ b/test/tap/groups/groups.json @@ -166,7 +166,7 @@ "reg_test_3606-mysql_warnings-t" : [ "legacy-g1","mysql84-g1","mysql-auto_increment_delay_multiplex=0-g1","mysql-multiplexing=false-g1","mysql-query_digests=0-g1","mysql-query_digests_keep_comment=1-g1" ], "reg_test_3625-sqlite3_session_client_error_limit-t" : [ "legacy-g1","mysql84-g1","mysql-auto_increment_delay_multiplex=0-g1","mysql-multiplexing=false-g1","mysql-query_digests=0-g1","mysql-query_digests_keep_comment=1-g1" ], "reg_test_3690-admin_large_pkts-t" : [ "legacy-g1","mysql84-g1","mysql-auto_increment_delay_multiplex=0-g1","mysql-multiplexing=false-g1","mysql-query_digests=0-g1","mysql-query_digests_keep_comment=1-g1" ], - "reg_test_3765_ssl_pollout-t" : [ "legacy-g5","mysql84-g2","mysql-auto_increment_delay_multiplex=0-g2","mysql-multiplexing=false-g2","mysql-query_digests=0-g2","mysql-query_digests_keep_comment=1-g2" ], + "reg_test_3765_ssl_pollout-t" : [ "legacy-g4","mysql84-g2","mysql-auto_increment_delay_multiplex=0-g2","mysql-multiplexing=false-g2","mysql-query_digests=0-g2","mysql-query_digests_keep_comment=1-g2" ], "reg_test_3838-restapi_eintr-t" : [ "legacy-g2","mysql84-g2","mysql-auto_increment_delay_multiplex=0-g2","mysql-multiplexing=false-g2","mysql-query_digests=0-g2","mysql-query_digests_keep_comment=1-g2" ], "reg_test_3847_admin_lock-t" : [ "legacy-g2","mysql84-g2","mysql-auto_increment_delay_multiplex=0-g2","mysql-multiplexing=false-g2","mysql-query_digests=0-g2","mysql-query_digests_keep_comment=1-g2" ], "reg_test_3992_fast_forward_malformed_packet-mysqlsh-t" : [ "legacy-g2","mysql84-g2","mysql-auto_increment_delay_multiplex=0-g2","mysql-multiplexing=false-g2","mysql-query_digests=0-g2","mysql-query_digests_keep_comment=1-g2" ], @@ -229,7 +229,7 @@ "test_clickhouse_server_libmysql-t" : [ "legacy-clickhouse-g1","mysql84-g3","mysql-auto_increment_delay_multiplex=0-g3","mysql-multiplexing=false-g3","mysql-query_digests=0-g3","mysql-query_digests_keep_comment=1-g3" ], "test_client_limit_error-t" : [ "todo-g1" ], "test_cluster1-t" : [ "legacy-g3","mysql-auto_increment_delay_multiplex=0-g3","mysql-multiplexing=false-g3","mysql-query_digests=0-g3","mysql-query_digests_keep_comment=1-g3" ], - "test_cluster_sync-t" : [ "legacy-g3","mysql-auto_increment_delay_multiplex=0-g3","mysql-multiplexing=false-g3","mysql-query_digests=0-g3","mysql-query_digests_keep_comment=1-g3" ], + "test_cluster_sync-t" : [ "legacy-g5","mysql-auto_increment_delay_multiplex=0-g3","mysql-multiplexing=false-g3","mysql-query_digests=0-g3","mysql-query_digests_keep_comment=1-g3" ], "test_cluster_sync_mysql_servers-t" : [ "legacy-g3","mysql-auto_increment_delay_multiplex=0-g3","mysql-multiplexing=false-g3","mysql-query_digests=0-g3","mysql-query_digests_keep_comment=1-g3" ], "test_com_binlog_dump_enables_fast_forward-t" : [ "legacy-binlog-g1" ], "test_com_register_slave_enables_fast_forward-t" : [ "legacy-g3","mysql84-g3","mysql-auto_increment_delay_multiplex=0-g3","mysql-multiplexing=false-g3","mysql-query_digests=0-g3","mysql-query_digests_keep_comment=1-g3" ], @@ -301,7 +301,7 @@ "test_query_rules_fast_routing_algorithm-t" : [ "legacy-g4","mysql84-g4","mysql-auto_increment_delay_multiplex=0-g4","mysql-multiplexing=false-g4","mysql-query_digests=0-g4","mysql-query_digests_keep_comment=1-g4" ], "test_query_rules_routing-t" : [ "legacy-g4","mysql84-g4","mysql-auto_increment_delay_multiplex=0-g4","mysql-multiplexing=false-g4","mysql-query_digests=0-g4","mysql-query_digests_keep_comment=1-g4" ], "test_query_timeout-t" : [ "legacy-g4","mysql84-g4","mysql-auto_increment_delay_multiplex=0-g4","mysql-multiplexing=false-g4","mysql-query_digests=0-g4","mysql-query_digests_keep_comment=1-g4" ], - "test_read_only_actions_offline_hard_servers-t" : [ "legacy-g4","mysql84-g4","mysql-auto_increment_delay_multiplex=0-g4","mysql-multiplexing=false-g4","mysql-query_digests=0-g4","mysql-query_digests_keep_comment=1-g4" ], + "test_read_only_actions_offline_hard_servers-t" : [ "legacy-g5","mysql84-g4","mysql-auto_increment_delay_multiplex=0-g4","mysql-multiplexing=false-g4","mysql-query_digests=0-g4","mysql-query_digests_keep_comment=1-g4" ], "test_rw_binary_data-t" : [ "legacy-g4","mysql84-g4","mysql-auto_increment_delay_multiplex=0-g4","mysql-multiplexing=false-g4","mysql-query_digests=0-g4","mysql-query_digests_keep_comment=1-g4" ], "test_server_sess_status-t" : [ "legacy-g4","mysql84-g4","mysql-auto_increment_delay_multiplex=0-g4","mysql-multiplexing=false-g4","mysql-query_digests=0-g4","mysql-query_digests_keep_comment=1-g4" ], "test_session_status_flags-t" : [ "legacy-g4","mysql84-g4","mysql-auto_increment_delay_multiplex=0-g4","mysql-multiplexing=false-g4","mysql-query_digests=0-g4","mysql-query_digests_keep_comment=1-g4" ], diff --git a/test/tap/groups/mysql84/pre-proxysql.bash b/test/tap/groups/mysql84/pre-proxysql.bash index 380fea592..8a86b2669 100755 --- a/test/tap/groups/mysql84/pre-proxysql.bash +++ b/test/tap/groups/mysql84/pre-proxysql.bash @@ -3,20 +3,24 @@ set -e set -o pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)" # -# change infra config -# inherits env from tester script +# mysql84 pre-proxysql hook +# Runs on the HOST after ProxySQL container is up, before test runner starts. +# All ProxySQL admin commands must go through docker exec. # +export INFRA_ID="${INFRA_ID:-dev-$USER}" +PROXY_CONTAINER="proxysql.${INFRA_ID}" + +MYSQL_CMD="docker exec ${PROXY_CONTAINER} mysql -uradmin -pradmin -h127.0.0.1 -P6032 -NB" + # Start ProxySQL Cluster if available ${REPO_ROOT}/test/infra/control/cluster_start.bash ${REPO_ROOT}/test/infra/control/cluster_init.bash -[[ $(mysql --skip-ssl-verify-server-cert -h 2>&1) =~ skip-ssl-verify-server-cert ]] || export SSLOPT=--skip-ssl-verify-server-cert - INFRA=infra-$(basename $(dirname "$0") | sed 's/-g[0-9]//' | sed 's/_.*//') # cleanup -mysql ${SSLOPT} -h127.0.0.1 -P6032 -uadmin -padmin -e " \ +${MYSQL_CMD} -e " \ DELETE FROM mysql_users; \ LOAD MYSQL USERS TO RUNTIME; \ SAVE MYSQL USERS TO DISK; \ @@ -35,33 +39,28 @@ SAVE PGSQL USERS TO DISK; \ DELETE FROM pgsql_servers; \ LOAD PGSQL SERVERS TO RUNTIME; \ SAVE PGSQL SERVERS TO DISK; \ -#DELETE FROM pgsql_query_rules; \ -#LOAD PGSQL QUERY RULES TO RUNTIME; \ -#SAVE PGSQL QUERY RULES TO DISK; \ -" 2>&1 | grep -vP 'mysql: .?Warning' +" # load environment for infra source ${REPO_ROOT}/test/infra/${INFRA}/.env # Start infra -# ${REPO_ROOT}/test/infra/control/infra-docker-hoster/docker-compose-init.bash ${REPO_ROOT}/test/infra/${INFRA}/docker-compose-init.bash # create default users for MYUSER in root user testuser sbtest1 sbtest2 sbtest3 sbtest4 ssluser ; do - # FIXME: using 0 as default hostgroup - mysql ${SSLOPT} -h127.0.0.1 -P6032 -uadmin -padmin -e " \ + ${MYSQL_CMD} -e " \ INSERT OR IGNORE INTO mysql_users (username,password,active,default_hostgroup,comment) values ('${MYUSER}','${MYUSER}',1,${WHG},'${INFRA}'); \ UPDATE mysql_users SET default_hostgroup=0,comment='${INFRA}' WHERE username='${MYUSER}'; \ - " 2>&1 | grep -vP 'mysql: .?Warning' + " done -mysql ${SSLOPT} -h127.0.0.1 -P6032 -uadmin -padmin -e " \ +${MYSQL_CMD} -e " \ LOAD MYSQL USERS TO RUNTIME; \ SAVE MYSQL USERS TO DISK; \ -" 2>&1 | grep -vP 'mysql: .?Warning' +" # create default hostgroups -mysql ${SSLOPT} -h127.0.0.1 -P6032 -uadmin -padmin -e " \ +${MYSQL_CMD} -e " \ DELETE FROM mysql_servers WHERE hostgroup_id IN (0,1,2,3); \ INSERT INTO mysql_servers (hostgroup_id,hostname,port,max_replication_lag,comment) VALUES (0,'mysql1.${INFRA}',3306,1,'mysql1.${INFRA}'); \ INSERT INTO mysql_servers (hostgroup_id,hostname,port,max_replication_lag,comment) VALUES (1,'mysql1.${INFRA}',3306,1,'mysql1.${INFRA}'); \ @@ -69,10 +68,10 @@ INSERT INTO mysql_servers (hostgroup_id,hostname,port,max_replication_lag,commen INSERT INTO mysql_servers (hostgroup_id,hostname,port,max_replication_lag,comment) VALUES (1,'mysql3.${INFRA}',3306,1,'mysql3.${INFRA}'); \ LOAD MYSQL SERVERS TO RUNTIME; \ SAVE MYSQL SERVERS TO DISK; \ -" 2>&1 | grep -vP 'mysql: .?Warning' +" # create default routing -mysql ${SSLOPT} -h127.0.0.1 -P6032 -uadmin -padmin -e " \ +${MYSQL_CMD} -e " \ DELETE FROM mysql_query_rules WHERE destination_hostgroup IN (0,1,2,3,4); \ INSERT INTO mysql_query_rules (rule_id,active,username,match_digest,destination_hostgroup,apply) VALUES (1,1,'root','^SELECT.*FOR UPDATE',0,1); \ INSERT INTO mysql_query_rules (rule_id,active,username,match_digest,destination_hostgroup,apply) VALUES (2,1,'root','^SELECT',1,1); \ @@ -80,7 +79,7 @@ INSERT INTO mysql_query_rules (rule_id,active,username,match_digest,destination_ INSERT INTO mysql_query_rules (rule_id,active,username,match_digest,destination_hostgroup,apply) VALUES (5,1,'testuser','^SELECT',1,1); \ LOAD MYSQL QUERY RULES TO RUNTIME; \ SAVE MYSQL QUERY RULES TO DISK; \ -" 2>&1 | grep -vP 'mysql: .?Warning' +" # wait for infra to stabilize sleep 10