Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 14 additions & 21 deletions common/startup/check_database_connection.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,30 @@
source /startup/logger.sh

function check_database_connection {
local IS_MYSQL_ALIVE=false
local FAILURE_COUNT=0
local MAX_FAILURE_COUNT=31

while [[ "${IS_MYSQL_ALIVE}" != "mysqld is alive" ]]; do
log_debug "Starting MySQL connection check (max attempts: ${MAX_FAILURE_COUNT})..."

while [[ $FAILURE_COUNT -lt $MAX_FAILURE_COUNT ]]; do
FAILURE_COUNT=$((FAILURE_COUNT + 1))
if [[ $FAILURE_COUNT -gt $MAX_FAILURE_COUNT ]]; then
log_startup_error_header
log_error "MySQL is not responding after ${MAX_FAILURE_COUNT} attempts. Exiting."
log_error "Please ensure the MySQL server is running and accessible from this container."
exit 1
fi

if [[ "${IS_MYSQL_ALIVE}" =~ "error" ]]; then
log_error "MySQL response contained error: ${IS_MYSQL_ALIVE}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maintaining these error logs would be better, as they allow people to diagnose their DB.

log "We will continue to retry the connection."
# Try the connection using exit code
if mysqladmin ping --host="${MAUTIC_DB_HOST}" --port="${MAUTIC_DB_PORT}" \
--user="${MAUTIC_DB_USER}" --password="${MAUTIC_DB_PASSWORD}" &>/dev/null; then
log_debug "MySQL is alive and reachable on attempt ${FAILURE_COUNT}/${MAX_FAILURE_COUNT}!"
return 0
else
log "MySQL is not ready yet, waiting..."
log "MySQL is not ready yet, waiting... Attempt ${FAILURE_COUNT}/${MAX_FAILURE_COUNT}"
fi
sleep 1

# try the connection
log_debug "Checking DB connection to ${MAUTIC_DB_HOST}:${MAUTIC_DB_PORT} with user ${MAUTIC_DB_USER}"
IS_MYSQL_ALIVE=$(mysqladmin --host="${MAUTIC_DB_HOST}" --port="${MAUTIC_DB_PORT}" --user="${MAUTIC_DB_USER}" --password="${MAUTIC_DB_PASSWORD}" ping 2>&1)
sleep 1
done

# we either maxed our connection attempts or we got a successful response
log_debug "MySQL connection check response: ${IS_MYSQL_ALIVE}"
if [[ "${IS_MYSQL_ALIVE}" == "mysqld is alive" ]]; then
log_debug "MySQL is alive and well."
fi
# Max attempts reached
log_error "MySQL is not responding after ${MAX_FAILURE_COUNT} attempts. Exiting."
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
log_error "MySQL is not responding after ${MAX_FAILURE_COUNT} attempts. Exiting."
log_startup_error_header
log_error "MySQL is not responding after ${MAX_FAILURE_COUNT} attempts. Exiting."

log_error "Please ensure the MySQL server is running and accessible from this container."
exit 1
}

log_debug "Checking database connection is alive and well..."
Expand Down