#!${:dash}

# DO NOT RUN THIS SCRIPT ON PRODUCTION INSTANCE
# OR MYSQL DATA WILL BE ERASED.

# This script will import the dump of the mysql database to the real
# database. It is launched by the clone (importer) instance of webrunner
# in the end of the import script.

# Depending on the output, it will create a file containing
# the status of the restoration (success or failure)

set -e

mysql_executable='${binary-wrap-mysql:wrapper-path}'
mariadb_data_directory='${directory:mariadb-data}'
mariadb_backup_directory='${directory:mariadb-backup-full}'
instance_directory='${buildout:directory}'
pid_file='${my-cnf-parameters:pid-file}'
binlog_path='${my-cnf-parameters:binlog-path}'

# Make sure mariadb is not already running
if [ -e "$pid_file" ]; then
  pid=$(cat "$pid_file") > /dev/null 2>&1
  if kill -0 "$pid"; then
    echo "Mariadb is already running with pid $pid. Aborting."
    exit 1
  fi
fi

echo "Deleting existing database..."
rm -r "$mariadb_data_directory"/* >/dev/null 2>&1 || true

# $binlog_path can be empty if incremental_backup_retention_days <= -1
if [ -n "$binlog_path" ]; then
  new_binlog_directory="$(dirname "$binlog_path")"
  binlog_index_file="$new_binlog_directory/binlog.index"
  if [ -e "$binlog_index_file" ]; then
    echo "Adapting binlog database to new paths..."
    old_binlog_directory="$(dirname $(head -n 1 $binlog_index_file))"
    sed -e "s|$old_binlog_directory|$new_binlog_directory|g" $binlog_index_file > $binlog_index_file
  fi
fi

echo "Starting mariadb..."
# XXX hardcoded
$instance_directory/etc/run/mariadb &
mysqld_pid=$!
trap "kill $mysqld_pid" EXIT TERM INT
sleep 30
# If mysql has stopped, abort
if ! [ -d /proc/$mysql_pid ]; then
  echo "mysqld exited, aborting."
  exit 1
fi
$instance_directory/etc/run/mariadb_update &
mariadb_update_pid=$!
sleep 60
# If mariadb_update is still running, abort
if [ -d /proc/$mariadb_update_pid ]; then
  echo "mariadb_update still running after timeout, aborting."
  kill $mariadb_update_pid
  exit 1
fi

echo "Importing data..."
# Use latest dump XXX can contain funny characters
dump=$(ls -r "$mariadb_backup_directory" | head -1)
zcat "$mariadb_backup_directory/$dump" | $mysql_executable -u root --socket="$instance_directory/var/run/mariadb.sock"
RESTORE_EXIT_CODE=$?

if [ $RESTORE_EXIT_CODE -eq 0 ]; then
  echo 'Backup restoration successfully completed.'
else
  echo 'Backup restoration failed.'
fi

exit $RESTORE_EXIT_CODE