1
0
mirror of https://github.com/MariaDB/server.git synced 2025-04-18 21:44:20 +03:00

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.
This commit is contained in:
Fariha Shaikh 2025-02-06 23:01:45 +00:00 committed by Vicențiu-Marian Ciorbaru
parent c92add291e
commit 3a43b7c60b

View File

@ -77,7 +77,7 @@ if [[ -z "$target_version" ]]; then
echo "Using default RPM directory"
rpm_dir="rpm/"
fi
if [ ! -d $rpm_dir ]; then
if [ ! -d "$rpm_dir" ]; then
echo "Error: directory $rpm_dir not found"
usage
exit 1
@ -96,17 +96,18 @@ function wait_for_socket {
SOCK="$1"
LIMIT="${2:-10}"
log "Waiting $LIMIT seconds for Unix socket to be created at $SOCK ..."
for ii in $(seq $LIMIT); do
[ -S $SOCK ] && break || sleep 1
for ii in $(seq "$LIMIT"); do
[ -S "$SOCK" ] && break
sleep 1
done
if [ $ii == $LIMIT ]; then
if [ "$ii" == "$LIMIT" ]; then
log "Unix socket was not created within $LIMIT seconds"
false
fi
}
# Install dependencies
log Installing dependencies
log "Installing dependencies"
dnf install -y wget libxcrypt-compat libaio ncurses-compat-libs numactl-libs
install_mariadb_from_archive() {
@ -116,19 +117,20 @@ install_mariadb_from_archive() {
# Certain required libraries are missing in the latest version of the distribuiton this test is being run on (currently Fedora).
# The missing libraries depned on the latest distribution version, so that is found by scanning the MariaDB archive directory.
log Finding MariaDB RPM repository for version $version
latest_distro=$(curl -s https://archive.mariadb.org/mariadb-$version/yum/fedora/ | (grep -Eo '^<a href="[0-9]+/">' || true) |
sort -V | tail -n 1 | sed -n 's/^<a href="\([0-9]*\)\/">/\1/p')
if [ -z $latest_distro ]; then
log Could not find repository. Exiting.
log "Finding MariaDB RPM repository for version $version"
latest_distro=$(curl -s https://archive.mariadb.org/mariadb-"$version"/yum/fedora/ |
(grep -Eo '^<a href="[0-9]+/">' || true) |
sort -V | tail -n 1 | sed -n 's/^<a href="\([0-9]*\)\/">/\1/p')
if [ -z "$latest_distro" ]; then
log "Could not find repository. Exiting."
exit 1
fi
rpm_repository=https://archive.mariadb.org/mariadb-$version/yum/fedora/$latest_distro/$(uname -m)/
log RPM repository: $rpm_repository
log "RPM repository: $rpm_repository"
# log Fedora distribution: $latest_distro # Currently only supports tests on Fedora
# Use custom repository
log Using custom MariaDB repository
log "Using custom MariaDB repository"
cat <<EOF >/etc/yum.repos.d/MariaDB.repo
[mariadb]
name=MariaDB
@ -141,12 +143,12 @@ EOF
# Get version of MariaDB server. This is necessary to check which additional dependencies must be installed.
# Full version has been defined
major_version=$(echo $version | cut -d '.' -f1-2)
minor_version=$(echo $version | cut -d '.' -f3)
major_version=$(echo "$version" | cut -d '.' -f1-2)
minor_version=$(echo "$version" | cut -d '.' -f3)
# Only major version has been defined, get minor version from RPM
if [ -z $minor_version ]; then
if [ -z "$minor_version" ]; then
rpm_version=$(dnf list MariaDB-server | grep -oP 'MariaDB-server.x86_64\s+\K[0-9]+\.[0-9]+\.[0-9]+(?=-)')
minor_version=$(echo $rpm_version | cut -d '.' -f3)
minor_version=$(echo "$rpm_version" | cut -d '.' -f3)
fi
# Install missing dependencies that are version/distro specific
log "Installing missing libraries"
@ -162,19 +164,22 @@ EOF
(dnf install -y boost-program-options-1.81.0 ||
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)
if [[ $major_version == "10.4" ]] && [[ $minor_version -ge 24 ]]; then
log RPMs not available for version 10.4.24+ from this repository. You may try testing by installing from the .tar.gz binaries.
log "RPMs not available for version 10.4.24+ from this repository. You may try testing by installing from the .tar.gz binaries."
exit 1
fi
log Begin installation of MariaDB version $version
log "Begin installation of MariaDB version $version"
dnf install -y MariaDB-server
}
install_mariadb_from_archive $source_version
install_mariadb_from_archive "$source_version"
# Set variables and binaries
MYSQLD=$([ -f /usr/sbin/mariadbd ] && echo "/usr/sbin/mariadbd" || echo "/usr/sbin/mysqld")
MYSQL_BIN=/usr/bin
MYSQL_CLIENT=$(command -v mariadb || command -v mysql)
MYSQL_INSTALL_DB=$(command -v mariadb-install-db || command -v mysql_install_db ||
find /usr/bin /usr/sbin /usr/local/bin -name 'mariadb-install-db' -o -name 'mysql_install_db' 2>/dev/null |
head -n 1)
TMP_DATA_DIR=/tmp/var/lib/mysql
rm -rf $TMP_DATA_DIR test_upgrade.log # clean up from old tests
SOCK=/var/lib/mysql/mysql.sock
@ -182,90 +187,99 @@ SOCK=/var/lib/mysql/mysql.sock
start_mariadb_server() {
$MYSQLD --version # check version
log Creating system tables with mysql_install_db
$MYSQL_BIN/mysql_install_db --user=mysql --datadir=$TMP_DATA_DIR
if [ -z "$MYSQL_INSTALL_DB" ]; then
log "Error: mysql_install_db or mariadb-install-db not found"
exit 1
fi
log "Creating system tables"
$MYSQL_INSTALL_DB --user=mysql --datadir=$TMP_DATA_DIR
chown -R mysql $TMP_DATA_DIR
# Start server
log Starting mariadb daemon
sudo -u mysql $MYSQLD --datadir=$TMP_DATA_DIR &
wait_for_socket $SOCK 10
$MYSQL_BIN/mysql --skip-column-names -e "SELECT @@version, @@version_comment" # Show version
log "Starting mariadb daemon"
sudo -u mysql "$MYSQLD" --datadir=$TMP_DATA_DIR &
wait_for_socket "$SOCK" 10
$MYSQL_CLIENT --skip-column-names -e "SELECT @@version, @@version_comment" # Show version
}
shutdown_and_wait() {
while $MYSQL_BIN/mysql -e 'SELECT 1' 2>&1 >/dev/null; do
$MYSQL_BIN/mysql -e 'SHUTDOWN'
while $MYSQL_CLIENT -e 'SELECT 1' >/dev/null 2>&1; do
$MYSQL_CLIENT -e 'SHUTDOWN'
sleep 1
[ ! -S $SOCK ] && break
[ ! -S "$SOCK" ] && break
done
}
log Start server with source version
log "Start server with source version"
start_mariadb_server
log Dump database contents in installed state
$MYSQL_BIN/mysqldump --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >old-installed-database.sql
log Check if tables need upgrade
$MYSQL_BIN/mysqlcheck --all-databases --check-upgrade | tee -a test_upgrade.log
MYSQL_DUMP=$(command -v mariadb-dump || command -v mysqldump)
MYSQL_CHECK=$(command -v mariadb-check || command -v mysqlcheck)
MYSQL_UPGRADE=$(command -v mariadb-upgrade || command -v mysql_upgrade)
log "Dump database contents in installed state"
$MYSQL_DUMP --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >old-installed-database.sql
log "Check if tables need upgrade"
$MYSQL_CHECK --all-databases --check-upgrade | tee -a test_upgrade.log
# Generate user tables filled with random data
$MYSQL_BIN/mysql -e "CREATE DATABASE random_data;" || true
$MYSQL_BIN/mysql -e "USE random_data;"
$MYSQL_CLIENT -e "CREATE DATABASE random_data;" || true
$MYSQL_CLIENT -e "USE random_data;"
# Varchars
$MYSQL_BIN/mysql -D random_data -e "CREATE TABLE random_strings (string VARCHAR(255) NOT NULL);" || true
for i in {1..10}; do
$MYSQL_BIN/mysql -D random_data -e "INSERT INTO random_strings ( string ) VALUES ( MD5(RAND()) );"
$MYSQL_CLIENT -D random_data -e "CREATE TABLE random_strings (string VARCHAR(255) NOT NULL);" || true
for _ in {1..10}; do
$MYSQL_CLIENT -D random_data -e "INSERT INTO random_strings ( string ) VALUES ( MD5(RAND()) );"
done
$MYSQL_BIN/mysql -D random_data -e "SELECT count(*) FROM random_strings;"
$MYSQL_CLIENT -D random_data -e "SELECT count(*) FROM random_strings;"
# Integers
$MYSQL_BIN/mysql -D random_data -e "CREATE TABLE random_numbers (number INT NOT NULL);" || true
for i in {1..10}; do
$MYSQL_BIN/mysql -D random_data -e "INSERT INTO random_numbers ( number ) VALUES ( RAND() );"
$MYSQL_CLIENT -D random_data -e "CREATE TABLE random_numbers (number INT NOT NULL);" || true
for _ in {1..10}; do
$MYSQL_CLIENT -D random_data -e "INSERT INTO random_numbers ( number ) VALUES ( RAND() );"
done
$MYSQL_BIN/mysql -D random_data -e "SELECT count(*) FROM random_numbers;"
$MYSQL_CLIENT -D random_data -e "SELECT count(*) FROM random_numbers;"
# Run mysql_upgrade which should have no effect
log Do upgrade
$MYSQL_BIN/mysql_upgrade -u root -v | tee -a test_upgrade.log
log Dump database contents in upgraded state
$MYSQL_BIN/mysqldump --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >old-upgraded-database.sql
$MYSQL_BIN/mysql --skip-column-names -e "SELECT @@version, @@version_comment" # Show version
log Shutdown
log "Do upgrade"
$MYSQL_UPGRADE -u root -v | tee -a test_upgrade.log
log "Dump database contents in upgraded state"
$MYSQL_DUMP --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >old-upgraded-database.sql
$MYSQL_CLIENT --skip-column-names -e "SELECT @@version, @@version_comment" # Show version
log "Shutdown"
shutdown_and_wait
log Uninstall source version
log "Uninstall source version"
dnf remove -y MariaDB-server
log ------------------------------------------------
log "------------------------------------------------"
if [[ -n "$target_version" ]]; then
install_mariadb_from_archive $target_version
install_mariadb_from_archive "$target_version"
elif [[ -n "$rpm_dir" ]]; then
log Begin installation of MariaDB from local RPMs
log "Begin installation of MariaDB from local RPMs"
log "rpm_dir: $rpm_dir"
dnf install -y $rpm_dir/*.rpm # from previous job
dnf install -y "$rpm_dir"/*.rpm # from previous job
fi
start_mariadb_server
log Dump database contents in installed state
$MYSQL_BIN/mysqldump --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >new-installed-database.sql || true
log "Dump database contents in installed state"
$MYSQL_DUMP --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >new-installed-database.sql || true
# The step above fails on: mariadb-dump: Couldn't execute 'show events': Cannot proceed, because event scheduler is disabled (1577)
log Run check for upgrade
$MYSQL_BIN/mysqlcheck --all-databases --check-upgrade --check --extended | tee -a test_upgrade.log
log "Run check for upgrade"
$MYSQL_CHECK --all-databases --check-upgrade --check --extended | tee -a test_upgrade.log
log Run upgrade
$MYSQL_BIN/mysql_upgrade -u root | tee -a test_upgrade.log # minor version is the same, so no upgrade done
log "Run upgrade"
$MYSQL_UPGRADE -u root | tee -a test_upgrade.log # minor version is the same, so no upgrade done
log Force upgrade
$MYSQL_BIN/mysql_upgrade -u root --force | tee -a test_upgrade.log
log "Force upgrade"
$MYSQL_UPGRADE -u root --force | tee -a test_upgrade.log
log Dump database contents in upgraded state
$MYSQL_BIN/mysqldump --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >new-upgraded-database.sql
$MYSQL_BIN/mysql --skip-column-names -e "SELECT @@version, @@version_comment" # Show version
log "Dump database contents in upgraded state"
$MYSQL_DUMP --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert >new-upgraded-database.sql
$MYSQL_CLIENT --skip-column-names -e "SELECT @@version, @@version_comment" # Show version
log Shutdown
log "Shutdown"
shutdown_and_wait
echo