#!/usr/local/bin/bash
#/ Usage: ghe-restore-live-migrations <host>
#/ Restore live-upgrade files from an rsync snapshot.
#/
#/ Note: This script typically isn't called directly. It's invoked by the
#/ ghe-restore command.
set -e

# Bring in the backup configuration
# shellcheck source=share/github-backup-utils/ghe-backup-config
. "$(dirname "${BASH_SOURCE[0]}")/ghe-backup-config"

trap_errors

# Show usage and bail with no arguments
[[ -z ${*} ]] && print_usage

bm_start "$(basename "${0}")"

# Grab host arg
GHE_HOSTNAME="${1}"

# The snapshot to restore should be set by the ghe-restore command but this lets
# us run this script directly.
: "${GHE_RESTORE_SNAPSHOT:=current}"

# Path to snapshot dir we're restoring from
GHE_RESTORE_SNAPSHOT_PATH="${GHE_DATA_DIR}/${GHE_RESTORE_SNAPSHOT}"

port="$(ssh_port_part "${GHE_HOSTNAME}")"
host="$(ssh_host_part "${GHE_HOSTNAME}")"

# Add user / -l option
user="${host%@*}"
[ "$user" = "$host" ] && user="admin"

# No need to restore anything, early exit
if [ ! -d "${GHE_RESTORE_SNAPSHOT_PATH}/live-upgrade" ]; then
  ghe_verbose "live-upgrade backup not found. Skipping ..."
  exit 0
fi

LIVE_UPGRADE_PATH="$(ghe-ssh "$GHE_HOSTNAME" -- 'ghe-config --get --default not_set live-upgrade.working-path')"
if [ "not_set" = "$LIVE_UPGRADE_PATH" ]; then
    log_warn "Warning: ghe-config live-upgrade.working-path not set. Defaulting to /data/user/live-upgrade"
    LIVE_UPGRADE_PATH="/data/user/live-upgrade"
fi

ssh_config_file_opt=
tempdir=$(mktemp -d -t backup-utils-restore-XXXXXX)
opts="$GHE_EXTRA_SSH_OPTS"

if $CLUSTER; then
  mysql_master=$(ghe-ssh "$GHE_HOSTNAME" "ghe-config cluster.mysql-master")
  if [ -z $mysql_master ]; then
    echo "Something is wrong with configuration: cluster.mysql-master not found" >&2
    exit 2
  fi

  ssh_config_file="$tempdir/ssh_config"
  ssh_config_file_opt="-F $ssh_config_file"
  opts="$opts -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o PasswordAuthentication=no"
  ghe-ssh-config "$GHE_HOSTNAME" "$mysql_master" > "$ssh_config_file"
else
  mysql_master=$host
fi

cleanup() {
  [ -d "$tempdir" ] && rm -rf "$tempdir"
}
trap_full_cleanup

# Transfer all live-upgrade data from the snapshot to the user data directory using rsync.
log_info "Restoring live-upgrade ..."
ghe_verbose "* Transferring live-upgrade files to ${mysql_master} ..."

ghe-ssh -p "${port}" "${mysql_master}" -- sudo mkdir -p "${LIVE_UPGRADE_PATH}"
ghe-ssh -p "${port}" "${mysql_master}" -- sudo chown -R admin:admin "${LIVE_UPGRADE_PATH}"

rsync_command="ghe-rsync \
  --archive \
  --hard-links \
  --relative \
  --delete \
  -e \"ssh -q $opts -p $port $ssh_config_file_opt -l $user\" \
  \"${GHE_RESTORE_SNAPSHOT_PATH}/live-upgrade/./\" \
  \"${mysql_master}:${LIVE_UPGRADE_PATH}/\""

run_rsync "$rsync_command" "live-upgrade"
bm_end "$(basename "${0}")"
