Skip to content

Commit

Permalink
Updates mongo replication script for new S3 locations and format
Browse files Browse the repository at this point in the history
  • Loading branch information
andy-collon committed Mar 10, 2024
1 parent 34dfd9d commit dbcc89a
Showing 1 changed file with 25 additions and 24 deletions.
49 changes: 25 additions & 24 deletions bin/replicate-mongodb.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,66 +11,66 @@ app="${1//_/-}"

replication_dir="${GOVUK_DOCKER_REPLICATION_DIR:-${GOVUK_DOCKER_DIR:-${GOVUK_ROOT_DIR:-$HOME/govuk}/govuk-docker}/replication}"

bucket="govuk-integration-database-backups"

mongo_version=3.6

case "$app" in
"router"|"draft-router")
hostname=mongo-router
instance=router-mongo
database="${app//-/_}"
wait_for_rs=1
;;
"licensify")
hostname=mongo-licensing
database=licensify
;;
"content-store"|"draft-content-store")
hostname=mongo-api
database="${app//-/_}_production"
;;
"asset-manager")
hostname=mongo-normal
instance=shared-documentdb
database=govuk_assets_production
;;
"publisher")
instance=shared-documentdb
database=govuk_content_production
;;
*)
hostname=mongo-normal
instance=shared-documentdb
database="${app//-/_}_production"
;;
esac

folder="govuk-integration-database-backups/$instance"

archive_dir="${replication_dir}/mongodb"
archive_file="${hostname}.tar.gz"
archive_file="${database}.gz"
archive_path="${archive_dir}/${archive_file}"

echo "Replicating mongodb for $app"
echo "Replicating mongodb for $app from $folder"

if [[ -e "$archive_path" ]]; then
echo "Skipping download - remove ${archive_path} to force a new download on the next run"
else
mkdir -p "$archive_dir"
remote_file_name=$(aws s3 ls "s3://${bucket}/${hostname}/" | grep "[[:digit:]]-$database.gz" | tail -n1 | sed 's/^.* .* .* //')
aws s3 cp "s3://${bucket}/${hostname}/${remote_file_name}" "$archive_path"
remote_file_name=$(aws s3 ls "s3://${folder}/" | grep "[[:digit:]]Z-$database.gz" | tail -n1 | sed 's/^.* .* .* //')
aws s3 cp "s3://${folder}/${remote_file_name}" "$archive_path"
fi

if [[ -n "${SKIP_IMPORT:-}" ]]; then
echo "Skipping import as \$SKIP_IMPORT is set"
exit 0
fi

extract_path="${archive_path}-${app}"
extract_dir="${archive_dir}/${app}"
extract_file="${database}"

if [[ -d "$extract_path" ]]; then
rm -r "$extract_path"
if [[ -d "$extract_dir" ]]; then
rm -r "$extract_dir"
fi
mkdir -p "$extract_path"
mkdir -p "$extract_dir"

echo "Extracting to $extract_dir/$extract_file"

pv "$archive_path" | gunzip | tar -x -f - -C "$extract_path" "${database}"
gunzip --stdout "$archive_path" > "$extract_dir/$extract_file"

echo "stopping running govuk-docker containers..."
govuk-docker down

container=$(govuk-docker run -d --rm -v "${extract_path}:/replication" --name "mongo-${mongo_version}" mongo-${mongo_version} | tail -n1)
container=$(govuk-docker run --detach --rm --volume "${extract_dir}:/replication" --name "mongo-${mongo_version}" mongo-${mongo_version} | tail -n1)

# we want $container to be expanded now
# shellcheck disable=SC2064
trap "docker stop '$container'" EXIT
Expand All @@ -86,7 +86,7 @@ until docker exec "$container" mongo --eval 1 &>/dev/null; do
sleep 1
done

docker exec "$container" mongorestore --drop --db "$app" "/replication/${database}/"
docker exec "$container" mongorestore --drop --nsFrom="${database}".* --nsTo="${app}".* --archive="/replication/${extract_file}"

case "$app" in
"router")
Expand All @@ -100,3 +100,4 @@ case "$app" in
mongo --quiet --eval 'db = db.getSiblingDB("draft-router"); db.backends.find().forEach( function(b) { b.backend_url = b.backend_url.replace(".integration.govuk-internal.digital", ".dev.gov.uk").replace("https","http"); db.backends.save(b); } );'
;;
esac

0 comments on commit dbcc89a

Please sign in to comment.