Skip to content

Commit bd83f9b

Browse files
authored
Merge pull request #5469 from sysown/v3.0-ci_84_mysql84
Fix multiple TAP tests [CI migration - mysql84-g1, mysql84-g2, mysql84-g3, mysql84-g4, mysql84-binlog-g1]
2 parents 8579f4d + 7ce2043 commit bd83f9b

53 files changed

Lines changed: 1244 additions & 185 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

test/infra/control/env-isolated.bash

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,10 @@ export TEST_PY_TAP_EXCL="${TEST_PY_TAP_EXCL:-reg_test_3273_ssl_con-t}"
125125
export TEST_PY_TAPINT_INCL="${TEST_PY_TAPINT_INCL:-}"
126126
export TEST_PY_TAPINT_EXCL="${TEST_PY_TAPINT_EXCL:-}"
127127

128-
# Hostgroup configuration for isolated environment
129-
export TAP_REG_TEST_3549_AUTOCOMMIT_TRACKING___MYSQL_SERVER_HOSTGROUP=1300
128+
# Source infra-specific environment (exports WHG, RHG, and TAP test variables)
129+
if [ -n "${INFRA_TYPE}" ] && [ -f "${WORKSPACE}/test/infra/${INFRA_TYPE}/.env" ]; then
130+
source "${WORKSPACE}/test/infra/${INFRA_TYPE}/.env"
131+
fi
130132

131133
echo ">>> Isolated Environment Loaded (INFRA_ID: ${INFRA_ID})"
132134
if [ "${TAP_USE_NOISE}" = "1" ] || [ "${TAP_USE_NOISE}" = "true" ]; then

test/infra/control/run-tests-isolated.bash

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,23 @@ if [ -z "${INFRAS_TO_CHECK}" ]; then
7575
INFRAS_TO_CHECK="${INFRA_TYPE}"
7676
fi
7777

78+
# Derive INFRA_TYPE from TAP_GROUP if not set
79+
# This is simple and deterministic - matches group naming convention
80+
if [ -z "${INFRA_TYPE}" ]; then
81+
case "${TAP_GROUP}" in
82+
mysql84*) export INFRA_TYPE=infra-mysql84 ;;
83+
mysql90*) export INFRA_TYPE=infra-mysql90 ;;
84+
mysql91*) export INFRA_TYPE=infra-mysql91 ;;
85+
mysql92*) export INFRA_TYPE=infra-mysql92 ;;
86+
mysql93*) export INFRA_TYPE=infra-mysql93 ;;
87+
mariadb*) export INFRA_TYPE=infra-mariadb10 ;;
88+
legacy*) export INFRA_TYPE=infra-mysql57 ;;
89+
esac
90+
if [ -n "${INFRA_TYPE}" ]; then
91+
echo ">>> Derived INFRA_TYPE from TAP_GROUP: ${INFRA_TYPE}"
92+
fi
93+
fi
94+
7895
# 2. Automatically derive DEFAULT_MYSQL_INFRA and DEFAULT_PGSQL_INFRA
7996
# We take the first compatible infrastructure found in the list.
8097
if [ -n "${INFRAS_TO_CHECK}" ]; then
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.deb
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Standalone proxysql_binlog_reader (v2.3+ with MySQL 8.4 support)
2+
FROM debian:bookworm-slim
3+
4+
COPY proxysql-mysqlbinlog_*.deb /tmp/
5+
RUN dpkg -i /tmp/proxysql-mysqlbinlog_*.deb || apt-get -f install -y && \
6+
rm -f /tmp/proxysql-mysqlbinlog_*.deb
7+
8+
RUN mkdir -p /var/log/mysqlbinlog
9+
10+
EXPOSE 6020
11+
12+
CMD ["bash", "-c", "while true; do sleep 5; proxysql_binlog_reader -h \"${MYSQL_HOST:-127.0.0.1}\" -u \"${MYSQL_USER:=root}\" -p \"${MYSQL_PASSWORD:-root}\" -P \"${MYSQL_PORT:-3306}\" -l \"${LISTEN_PORT:-6020}\" -f 2>&1 | tee -a /var/log/mysqlbinlog/error.log; done"]
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/bin/bash
2+
set -e
3+
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
cd "${SCRIPT_DIR}"
6+
7+
IMAGE_TAG="${1:-proxysql/ci-infra:proxysql-mysqlbinlog-v2.3}"
8+
9+
# Check that the .deb is present in the build context
10+
if ! ls proxysql-mysqlbinlog_*.deb >/dev/null 2>&1; then
11+
echo "ERROR: No proxysql-mysqlbinlog .deb found in ${SCRIPT_DIR}"
12+
echo ""
13+
echo "Build it from https://github.com/sysown/proxysql_mysqlbinlog (tag 2.3+):"
14+
echo " cd /tmp/proxysql_mysqlbinlog && make build-debian12"
15+
echo " cp binaries/proxysql-mysqlbinlog_*.deb ${SCRIPT_DIR}/"
16+
exit 1
17+
fi
18+
19+
echo "Building ${IMAGE_TAG} ..."
20+
docker build -f Dockerfile.reader -t "${IMAGE_TAG}" .
21+
22+
echo ""
23+
echo "Done. To push:"
24+
echo " docker push ${IMAGE_TAG}"

test/infra/infra-mariadb10/.env

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,6 @@ MARIADB1_PORT=${PREFIX}306
1111
MARIADB2_PORT=${PREFIX}307
1212
MARIADB3_PORT=${PREFIX}308
1313

14+
15+
# Export hostgroup for TAP tests that need it
16+
export TAP_REG_TEST_3549_AUTOCOMMIT_TRACKING___MYSQL_SERVER_HOSTGROUP=${WHG}

test/infra/infra-mysql57-binlog/.env

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,6 @@ INFRA_LOGS_PATH=${INFRA_LOGS_PATH:-./logs}
2424

2525
# Dynamic password derived from INFRA_ID (used for root user across MySQL and ProxySQL)
2626
ROOT_PASSWORD=${ROOT_PASSWORD:-$(echo -n "${INFRA_ID:-dev}" | sha256sum | head -c 10)}
27+
28+
# Export hostgroup for TAP tests that need it
29+
export TAP_REG_TEST_3549_AUTOCOMMIT_TRACKING___MYSQL_SERVER_HOSTGROUP=${WHG}

test/infra/infra-mysql57/.env

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,6 @@ WHG=1300
33
RHG=1301
44
BHG=1302
55
OHG=1303
6+
7+
# Export hostgroup for TAP tests that need it
8+
export TAP_REG_TEST_3549_AUTOCOMMIT_TRACKING___MYSQL_SERVER_HOSTGROUP=${WHG}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
MYSQL_VERSION=8.4
2+
3+
PREFIX=14
4+
5+
WHG=${PREFIX}00
6+
RHG=${PREFIX}01
7+
BHG=${PREFIX}02
8+
OHG=${PREFIX}03
9+
10+
export BINLOG_WHG=${WHG}
11+
export BINLOG_RHG=${RHG}
12+
13+
MYSQL1_PORT=${PREFIX}306
14+
MYSQL2_PORT=${PREFIX}307
15+
MYSQL3_PORT=${PREFIX}308
16+
17+
BINLOG1_PORT=${PREFIX}021
18+
BINLOG2_PORT=${PREFIX}022
19+
BINLOG3_PORT=${PREFIX}023
20+
21+
ORC1_PORT=${PREFIX}101
22+
ORC2_PORT=${PREFIX}102
23+
ORC3_PORT=${PREFIX}103
24+
25+
INFRA=${INFRA:-infra-mysql84-binlog}
26+
27+
# Export hostgroup for TAP tests that need it
28+
export TAP_REG_TEST_3549_AUTOCOMMIT_TRACKING___MYSQL_SERVER_HOSTGROUP=${WHG}
29+
export TAP_MYSQL8_BACKEND_HG=${WHG}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#!/bin/bash
2+
set -e
3+
set -o pipefail
4+
[ -f .env ] && . .env
5+
6+
for i in 1 2 3; do
7+
SERVICE="mysql$i"
8+
CONTAINER="${COMPOSE_PROJECT}-${SERVICE}-1"
9+
echo -n "Waiting for container '${CONTAINER}' ..."
10+
11+
MAX_WAIT=120
12+
COUNT=0
13+
PASS_OPT=""
14+
while true; do
15+
if [ $COUNT -ge $MAX_WAIT ]; then echo " TIMEOUT"; docker logs "${CONTAINER}" | tail -n 20; exit 1; fi
16+
STATE=$(docker inspect -f '{{.State.Running}}' "${CONTAINER}" 2>/dev/null || echo "false")
17+
if [ "${STATE}" != "true" ]; then echo -e "\nERROR: Container ${CONTAINER} is NOT running!"; docker logs "${CONTAINER}" | tail -n 20; exit 1; fi
18+
# Try dynamic password first
19+
if docker exec "${CONTAINER}" mysql -h127.0.0.1 -uroot -p"${ROOT_PASSWORD}" -e "SELECT 1" >/dev/null 2>&1; then
20+
PASS_OPT="-p${ROOT_PASSWORD}"
21+
echo " OK (Auth: Dynamic)."
22+
break
23+
fi
24+
# Try default root password from image
25+
if docker exec "${CONTAINER}" mysql -h127.0.0.1 -uroot -proot -e "SELECT 1" >/dev/null 2>&1; then
26+
PASS_OPT="-proot"
27+
echo " OK (Auth: Default root)."
28+
break
29+
fi
30+
# Try empty password
31+
if docker exec "${CONTAINER}" mysql -h127.0.0.1 -uroot -e "SELECT 1" >/dev/null 2>&1; then
32+
PASS_OPT=""
33+
echo " OK (Auth: Empty)."
34+
break
35+
fi
36+
echo -n "."; sleep 2; COUNT=$((COUNT+2))
37+
done
38+
39+
if [ "$i" -eq 1 ]; then
40+
echo "Configuring master (mysql1)..."
41+
docker exec -i "${CONTAINER}" mysql -h127.0.0.1 -uroot ${PASS_OPT} <<SQL || { echo "ERROR: Failed master configuration on ${CONTAINER}"; exit 1; }
42+
SET GLOBAL READ_ONLY=0;
43+
44+
-- Ensure root user has the correct dynamic password (replicated to replicas)
45+
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED WITH 'mysql_native_password' BY '${ROOT_PASSWORD}';
46+
ALTER USER 'root'@'%' IDENTIFIED WITH 'mysql_native_password' BY '${ROOT_PASSWORD}';
47+
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY '${ROOT_PASSWORD}';
48+
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
49+
50+
-- Monitor user (replicated to replicas)
51+
CREATE USER IF NOT EXISTS 'monitor'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'monitor';
52+
GRANT USAGE, REPLICATION CLIENT ON *.* TO 'monitor'@'%';
53+
54+
-- testuser (replicated to replicas)
55+
CREATE USER IF NOT EXISTS 'testuser'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'testuser';
56+
GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'%';
57+
58+
-- Binlog user (required for binlog reader, replicated to replicas)
59+
CREATE USER IF NOT EXISTS 'binlog'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'binlog';
60+
GRANT USAGE, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'binlog'@'%';
61+
62+
-- sbtest7 and sbtest8 users (specifically for binlog tests, replicated to replicas)
63+
CREATE USER IF NOT EXISTS 'sbtest7'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'sbtest7';
64+
GRANT ALL PRIVILEGES ON *.* TO 'sbtest7'@'%';
65+
CREATE USER IF NOT EXISTS 'sbtest8'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'sbtest8';
66+
GRANT ALL PRIVILEGES ON *.* TO 'sbtest8'@'%';
67+
68+
-- Create test databases
69+
CREATE DATABASE IF NOT EXISTS sysbench;
70+
CREATE DATABASE IF NOT EXISTS test;
71+
CREATE DATABASE IF NOT EXISTS t1;
72+
CREATE DATABASE IF NOT EXISTS jdbc_test;
73+
GRANT ALL PRIVILEGES ON sysbench.* TO 'sbtest7'@'%';
74+
GRANT ALL PRIVILEGES ON sysbench.* TO 'sbtest8'@'%';
75+
GRANT ALL PRIVILEGES ON test.* TO 'sbtest7'@'%';
76+
GRANT ALL PRIVILEGES ON test.* TO 'sbtest8'@'%';
77+
78+
FLUSH PRIVILEGES;
79+
SQL
80+
else
81+
echo "Configuring replica (mysql${i})..."
82+
docker exec -i "${CONTAINER}" mysql -h127.0.0.1 -uroot ${PASS_OPT} <<SQL || { echo "ERROR: Failed replica configuration on ${CONTAINER}"; exit 1; }
83+
SET GLOBAL READ_ONLY=1;
84+
RESET BINARY LOGS AND GTIDS;
85+
86+
-- Configure replication using MySQL 8.4 syntax
87+
CHANGE REPLICATION SOURCE TO SOURCE_HOST='mysql1.${INFRA}', SOURCE_USER='root', SOURCE_PASSWORD='${ROOT_PASSWORD}', SOURCE_AUTO_POSITION=1;
88+
START REPLICA;
89+
90+
FLUSH PRIVILEGES;
91+
SQL
92+
fi
93+
done
94+
95+
echo "================================================================================"
96+
echo "MySQL cluster configuration complete."
97+
echo "================================================================================"

0 commit comments

Comments
 (0)