Skip to content

Commit 3a43b7c

Browse files
FarihaIScvicentiu
authored andcommitted
MDEV-36124 Fix missing binary failures from test_upgrade.sh
Some jobs in the test stage of the pipeline are failing due to mysql_install_db not being found in the expected location for newer versions (11.4) of mariadb when executing test_upgrade.sh. Fix missing binary failures in test_upgrade.sh: - Modify commands that look for variables and binaries to account for both mysql and mariadb prefixes of the binaries - Add more directories to the list of locations where the binaries are searched for All new code of the whole pull request, including one or several files that are either new files or modified ones, are contributed under the BSD-new license. I am contributing on behalf of my employer Amazon Web Services, Inc.
1 parent c92add2 commit 3a43b7c

File tree

1 file changed

+81
-67
lines changed

1 file changed

+81
-67
lines changed

tests/upgrade_from/test_upgrade.sh

Lines changed: 81 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ if [[ -z "$target_version" ]]; then
7777
echo "Using default RPM directory"
7878
rpm_dir="rpm/"
7979
fi
80-
if [ ! -d $rpm_dir ]; then
80+
if [ ! -d "$rpm_dir" ]; then
8181
echo "Error: directory $rpm_dir not found"
8282
usage
8383
exit 1
@@ -96,17 +96,18 @@ function wait_for_socket {
9696
SOCK="$1"
9797
LIMIT="${2:-10}"
9898
log "Waiting $LIMIT seconds for Unix socket to be created at $SOCK ..."
99-
for ii in $(seq $LIMIT); do
100-
[ -S $SOCK ] && break || sleep 1
99+
for ii in $(seq "$LIMIT"); do
100+
[ -S "$SOCK" ] && break
101+
sleep 1
101102
done
102-
if [ $ii == $LIMIT ]; then
103+
if [ "$ii" == "$LIMIT" ]; then
103104
log "Unix socket was not created within $LIMIT seconds"
104105
false
105106
fi
106107
}
107108

108109
# Install dependencies
109-
log Installing dependencies
110+
log "Installing dependencies"
110111
dnf install -y wget libxcrypt-compat libaio ncurses-compat-libs numactl-libs
111112

112113
install_mariadb_from_archive() {
@@ -116,19 +117,20 @@ install_mariadb_from_archive() {
116117
# Certain required libraries are missing in the latest version of the distribuiton this test is being run on (currently Fedora).
117118
# The missing libraries depned on the latest distribution version, so that is found by scanning the MariaDB archive directory.
118119

119-
log Finding MariaDB RPM repository for version $version
120-
latest_distro=$(curl -s https://archive.mariadb.org/mariadb-$version/yum/fedora/ | (grep -Eo '^<a href="[0-9]+/">' || true) |
121-
sort -V | tail -n 1 | sed -n 's/^<a href="\([0-9]*\)\/">/\1/p')
122-
if [ -z $latest_distro ]; then
123-
log Could not find repository. Exiting.
120+
log "Finding MariaDB RPM repository for version $version"
121+
latest_distro=$(curl -s https://archive.mariadb.org/mariadb-"$version"/yum/fedora/ |
122+
(grep -Eo '^<a href="[0-9]+/">' || true) |
123+
sort -V | tail -n 1 | sed -n 's/^<a href="\([0-9]*\)\/">/\1/p')
124+
if [ -z "$latest_distro" ]; then
125+
log "Could not find repository. Exiting."
124126
exit 1
125127
fi
126128
rpm_repository=https://archive.mariadb.org/mariadb-$version/yum/fedora/$latest_distro/$(uname -m)/
127-
log RPM repository: $rpm_repository
129+
log "RPM repository: $rpm_repository"
128130
# log Fedora distribution: $latest_distro # Currently only supports tests on Fedora
129131

130132
# Use custom repository
131-
log Using custom MariaDB repository
133+
log "Using custom MariaDB repository"
132134
cat <<EOF >/etc/yum.repos.d/MariaDB.repo
133135
[mariadb]
134136
name=MariaDB
@@ -141,12 +143,12 @@ EOF
141143

142144
# Get version of MariaDB server. This is necessary to check which additional dependencies must be installed.
143145
# Full version has been defined
144-
major_version=$(echo $version | cut -d '.' -f1-2)
145-
minor_version=$(echo $version | cut -d '.' -f3)
146+
major_version=$(echo "$version" | cut -d '.' -f1-2)
147+
minor_version=$(echo "$version" | cut -d '.' -f3)
146148
# Only major version has been defined, get minor version from RPM
147-
if [ -z $minor_version ]; then
149+
if [ -z "$minor_version" ]; then
148150
rpm_version=$(dnf list MariaDB-server | grep -oP 'MariaDB-server.x86_64\s+\K[0-9]+\.[0-9]+\.[0-9]+(?=-)')
149-
minor_version=$(echo $rpm_version | cut -d '.' -f3)
151+
minor_version=$(echo "$rpm_version" | cut -d '.' -f3)
150152
fi
151153
# Install missing dependencies that are version/distro specific
152154
log "Installing missing libraries"
@@ -162,110 +164,122 @@ EOF
162164
(dnf install -y boost-program-options-1.81.0 ||
163165
dnf install -y https://rpmfind.net/linux/fedora/linux/releases/39/Everything/x86_64/os/Packages/b/boost-program-options-1.81.0-8.fc39.x86_64.rpm)
164166
if [[ $major_version == "10.4" ]] && [[ $minor_version -ge 24 ]]; then
165-
log RPMs not available for version 10.4.24+ from this repository. You may try testing by installing from the .tar.gz binaries.
167+
log "RPMs not available for version 10.4.24+ from this repository. You may try testing by installing from the .tar.gz binaries."
166168
exit 1
167169
fi
168170

169-
log Begin installation of MariaDB version $version
171+
log "Begin installation of MariaDB version $version"
170172
dnf install -y MariaDB-server
171173
}
172174

173-
install_mariadb_from_archive $source_version
175+
install_mariadb_from_archive "$source_version"
174176

175177
# Set variables and binaries
176178
MYSQLD=$([ -f /usr/sbin/mariadbd ] && echo "/usr/sbin/mariadbd" || echo "/usr/sbin/mysqld")
177-
MYSQL_BIN=/usr/bin
179+
MYSQL_CLIENT=$(command -v mariadb || command -v mysql)
180+
MYSQL_INSTALL_DB=$(command -v mariadb-install-db || command -v mysql_install_db ||
181+
find /usr/bin /usr/sbin /usr/local/bin -name 'mariadb-install-db' -o -name 'mysql_install_db' 2>/dev/null |
182+
head -n 1)
178183
TMP_DATA_DIR=/tmp/var/lib/mysql
179184
rm -rf $TMP_DATA_DIR test_upgrade.log # clean up from old tests
180185
SOCK=/var/lib/mysql/mysql.sock
181186

182187
start_mariadb_server() {
183188
$MYSQLD --version # check version
184189

185-
log Creating system tables with mysql_install_db
186-
$MYSQL_BIN/mysql_install_db --user=mysql --datadir=$TMP_DATA_DIR
190+
if [ -z "$MYSQL_INSTALL_DB" ]; then
191+
log "Error: mysql_install_db or mariadb-install-db not found"
192+
exit 1
193+
fi
194+
195+
log "Creating system tables"
196+
$MYSQL_INSTALL_DB --user=mysql --datadir=$TMP_DATA_DIR
187197
chown -R mysql $TMP_DATA_DIR
188198

189199
# Start server
190-
log Starting mariadb daemon
191-
sudo -u mysql $MYSQLD --datadir=$TMP_DATA_DIR &
192-
wait_for_socket $SOCK 10
193-
$MYSQL_BIN/mysql --skip-column-names -e "SELECT @@version, @@version_comment" # Show version
200+
log "Starting mariadb daemon"
201+
sudo -u mysql "$MYSQLD" --datadir=$TMP_DATA_DIR &
202+
wait_for_socket "$SOCK" 10
203+
$MYSQL_CLIENT --skip-column-names -e "SELECT @@version, @@version_comment" # Show version
194204
}
195205

196206
shutdown_and_wait() {
197-
while $MYSQL_BIN/mysql -e 'SELECT 1' 2>&1 >/dev/null; do
198-
$MYSQL_BIN/mysql -e 'SHUTDOWN'
207+
while $MYSQL_CLIENT -e 'SELECT 1' >/dev/null 2>&1; do
208+
$MYSQL_CLIENT -e 'SHUTDOWN'
199209
sleep 1
200-
[ ! -S $SOCK ] && break
210+
[ ! -S "$SOCK" ] && break
201211
done
202212
}
203213

204-
log Start server with source version
214+
log "Start server with source version"
205215
start_mariadb_server
206216

207-
log Dump database contents in installed state
208-
$MYSQL_BIN/mysqldump --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >old-installed-database.sql
209-
log Check if tables need upgrade
210-
$MYSQL_BIN/mysqlcheck --all-databases --check-upgrade | tee -a test_upgrade.log
217+
MYSQL_DUMP=$(command -v mariadb-dump || command -v mysqldump)
218+
MYSQL_CHECK=$(command -v mariadb-check || command -v mysqlcheck)
219+
MYSQL_UPGRADE=$(command -v mariadb-upgrade || command -v mysql_upgrade)
220+
221+
log "Dump database contents in installed state"
222+
$MYSQL_DUMP --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >old-installed-database.sql
223+
log "Check if tables need upgrade"
224+
$MYSQL_CHECK --all-databases --check-upgrade | tee -a test_upgrade.log
211225

212226
# Generate user tables filled with random data
213-
$MYSQL_BIN/mysql -e "CREATE DATABASE random_data;" || true
214-
$MYSQL_BIN/mysql -e "USE random_data;"
227+
$MYSQL_CLIENT -e "CREATE DATABASE random_data;" || true
228+
$MYSQL_CLIENT -e "USE random_data;"
215229
# Varchars
216-
$MYSQL_BIN/mysql -D random_data -e "CREATE TABLE random_strings (string VARCHAR(255) NOT NULL);" || true
217-
for i in {1..10}; do
218-
$MYSQL_BIN/mysql -D random_data -e "INSERT INTO random_strings ( string ) VALUES ( MD5(RAND()) );"
230+
$MYSQL_CLIENT -D random_data -e "CREATE TABLE random_strings (string VARCHAR(255) NOT NULL);" || true
231+
for _ in {1..10}; do
232+
$MYSQL_CLIENT -D random_data -e "INSERT INTO random_strings ( string ) VALUES ( MD5(RAND()) );"
219233
done
220-
$MYSQL_BIN/mysql -D random_data -e "SELECT count(*) FROM random_strings;"
234+
$MYSQL_CLIENT -D random_data -e "SELECT count(*) FROM random_strings;"
221235
# Integers
222-
$MYSQL_BIN/mysql -D random_data -e "CREATE TABLE random_numbers (number INT NOT NULL);" || true
223-
for i in {1..10}; do
224-
$MYSQL_BIN/mysql -D random_data -e "INSERT INTO random_numbers ( number ) VALUES ( RAND() );"
236+
$MYSQL_CLIENT -D random_data -e "CREATE TABLE random_numbers (number INT NOT NULL);" || true
237+
for _ in {1..10}; do
238+
$MYSQL_CLIENT -D random_data -e "INSERT INTO random_numbers ( number ) VALUES ( RAND() );"
225239
done
226-
$MYSQL_BIN/mysql -D random_data -e "SELECT count(*) FROM random_numbers;"
240+
$MYSQL_CLIENT -D random_data -e "SELECT count(*) FROM random_numbers;"
227241

228242
# Run mysql_upgrade which should have no effect
229-
log Do upgrade
230-
$MYSQL_BIN/mysql_upgrade -u root -v | tee -a test_upgrade.log
231-
log Dump database contents in upgraded state
232-
$MYSQL_BIN/mysqldump --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >old-upgraded-database.sql
233-
$MYSQL_BIN/mysql --skip-column-names -e "SELECT @@version, @@version_comment" # Show version
234-
log Shutdown
243+
log "Do upgrade"
244+
$MYSQL_UPGRADE -u root -v | tee -a test_upgrade.log
245+
log "Dump database contents in upgraded state"
246+
$MYSQL_DUMP --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >old-upgraded-database.sql
247+
$MYSQL_CLIENT --skip-column-names -e "SELECT @@version, @@version_comment" # Show version
248+
log "Shutdown"
235249
shutdown_and_wait
236250

237-
log Uninstall source version
251+
log "Uninstall source version"
238252
dnf remove -y MariaDB-server
239253

240-
log ------------------------------------------------
254+
log "------------------------------------------------"
241255
if [[ -n "$target_version" ]]; then
242-
install_mariadb_from_archive $target_version
256+
install_mariadb_from_archive "$target_version"
243257
elif [[ -n "$rpm_dir" ]]; then
244-
log Begin installation of MariaDB from local RPMs
258+
log "Begin installation of MariaDB from local RPMs"
245259
log "rpm_dir: $rpm_dir"
246-
dnf install -y $rpm_dir/*.rpm # from previous job
260+
dnf install -y "$rpm_dir"/*.rpm # from previous job
247261
fi
248262

249263
start_mariadb_server
250264

251-
log Dump database contents in installed state
252-
$MYSQL_BIN/mysqldump --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >new-installed-database.sql || true
265+
log "Dump database contents in installed state"
266+
$MYSQL_DUMP --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >new-installed-database.sql || true
253267
# The step above fails on: mariadb-dump: Couldn't execute 'show events': Cannot proceed, because event scheduler is disabled (1577)
254268

255-
log Run check for upgrade
256-
$MYSQL_BIN/mysqlcheck --all-databases --check-upgrade --check --extended | tee -a test_upgrade.log
269+
log "Run check for upgrade"
270+
$MYSQL_CHECK --all-databases --check-upgrade --check --extended | tee -a test_upgrade.log
257271

258-
log Run upgrade
259-
$MYSQL_BIN/mysql_upgrade -u root | tee -a test_upgrade.log # minor version is the same, so no upgrade done
272+
log "Run upgrade"
273+
$MYSQL_UPGRADE -u root | tee -a test_upgrade.log # minor version is the same, so no upgrade done
260274

261-
log Force upgrade
262-
$MYSQL_BIN/mysql_upgrade -u root --force | tee -a test_upgrade.log
275+
log "Force upgrade"
276+
$MYSQL_UPGRADE -u root --force | tee -a test_upgrade.log
263277

264-
log Dump database contents in upgraded state
265-
$MYSQL_BIN/mysqldump --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >new-upgraded-database.sql
266-
$MYSQL_BIN/mysql --skip-column-names -e "SELECT @@version, @@version_comment" # Show version
278+
log "Dump database contents in upgraded state"
279+
$MYSQL_DUMP --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >new-upgraded-database.sql
280+
$MYSQL_CLIENT --skip-column-names -e "SELECT @@version, @@version_comment" # Show version
267281

268-
log Shutdown
282+
log "Shutdown"
269283
shutdown_and_wait
270284
echo
271285

0 commit comments

Comments
 (0)