Skip to content

Commit 71bb148

Browse files
authored
Merge branch 'master' into lildude/release-improv
2 parents 4d8ad30 + cb1c001 commit 71bb148

File tree

6 files changed

+81
-7
lines changed

6 files changed

+81
-7
lines changed

bin/ghe-restore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,10 +271,10 @@ bm_end "ghe-import-redis"
271271
# Unified and enhanced restore method to 2.13.0 and newer
272272
if $CLUSTER || [ "$(version $GHE_REMOTE_VERSION)" -ge "$(version 2.13.0)" ]; then
273273
echo "Restoring Git repositories ..."
274-
ghe-restore-repositories "$GHE_HOSTNAME" 1>&3
274+
ghe-restore-repositories "$GHE_HOSTNAME"
275275

276276
echo "Restoring Gists ..."
277-
ghe-restore-repositories-gist "$GHE_HOSTNAME" 1>&3
277+
ghe-restore-repositories-gist "$GHE_HOSTNAME"
278278
else
279279
echo "Restoring Git repositories and Gists ..."
280280
ghe-restore-repositories-rsync "$GHE_HOSTNAME" 1>&3

share/github-backup-utils/ghe-restore-pages

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ if $CLUSTER; then
148148
bm_start "$(basename $0) - Finalizing routes"
149149
ghe_verbose "Finalizing routes"
150150
ghe-ssh "$GHE_HOSTNAME" -- /bin/bash >&3 <<EOF
151-
split -l 1000 $routes_list $tempdir/chunk
152-
chunks=\$(find $tempdir/ -name chunk\*)
151+
split -l 1000 $remote_routes_list $remote_tempdir/chunk
152+
chunks=\$(find $remote_tempdir/ -name chunk\*)
153153
parallel -i /bin/sh -c "cat {} | github-env ./bin/dpages-cluster-restore-finalize" -- \$chunks
154154
EOF
155155
bm_end "$(basename $0) - Finalizing routes"

share/github-backup-utils/ghe-restore-repositories

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ to_restore=$tempdir/to_restore
5252
remote_to_restore=$remote_tempdir/remote_to_restore
5353
routes_list=$tempdir/routes_list
5454
remote_routes_list=$remote_tempdir/remote_routes_list
55+
remote_warnings=$remote_tempdir/repo_warnings
5556

5657
if $CLUSTER; then
5758
ssh_config_file="$tempdir/ssh_config"
@@ -163,7 +164,7 @@ if $CLUSTER; then
163164
ghe-ssh "$GHE_HOSTNAME" -- /bin/bash >&3 <<EOF
164165
split -l 1000 $remote_to_restore $remote_tempdir/chunk
165166
chunks=\$(find $remote_tempdir/ -name chunk\*)
166-
parallel -i /bin/sh -c "cat {} | github-env ./bin/dgit-cluster-restore-finalize" -- \$chunks
167+
parallel -i /bin/sh -c "cat {} | github-env ./bin/dgit-cluster-restore-finalize 2>>$remote_warnings" -- \$chunks
167168
EOF
168169
bm_end "$(basename $0) - Finalizing routes"
169170
fi
@@ -190,4 +191,10 @@ else
190191
fi
191192
bm_end "$(basename $0) - Updating repository info data"
192193

194+
restore_warnings="$(ghe-ssh "$GHE_HOSTNAME" -- cat "$remote_warnings" 2>/dev/null || true)"
195+
if [ -n "$restore_warnings" ]; then
196+
echo "Warning: One or more repository networks failed to restore successfully. Please contact GitHub Enterprise Support for assistance."
197+
echo "$restore_warnings"
198+
fi
199+
193200
bm_end "$(basename $0)"

share/github-backup-utils/ghe-restore-repositories-gist

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ to_restore=$tempdir/to_restore
5454
remote_to_restore=$remote_tempdir/remote_to_restore
5555
routes_list=$tempdir/routes_list
5656
remote_routes_list=$remote_tempdir/remote_routes_list
57+
remote_warnings=$remote_tempdir/gist_warnings
5758

5859
if $CLUSTER; then
5960
ssh_config_file="$tempdir/ssh_config"
@@ -154,9 +155,15 @@ if $CLUSTER; then
154155
ghe-ssh "$GHE_HOSTNAME" -- /bin/bash >&3 <<EOF
155156
split -l 1000 $remote_to_restore $remote_tempdir/chunk
156157
chunks=\$(find $remote_tempdir/ -name chunk\*)
157-
parallel -i /bin/sh -c "cat {} | github-env ./bin/gist-cluster-restore-finalize" -- \$chunks
158+
parallel -i /bin/sh -c "cat {} | github-env ./bin/gist-cluster-restore-finalize 2>>$remote_warnings" -- \$chunks
158159
EOF
159160
bm_end "$(basename $0) - Finalizing routes"
160161
fi
161162

163+
restore_warnings="$(ghe-ssh "$GHE_HOSTNAME" -- cat "$remote_warnings" 2>/dev/null || true)"
164+
if [ -n "$restore_warnings" ]; then
165+
echo "Warning: One or more Gists failed to restore successfully. Please contact GitHub Enterprise Support for assistance."
166+
echo "$restore_warnings"
167+
fi
168+
162169
bm_end "$(basename $0)"

test/bin/ghe-fake-finalize-command

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,15 @@
22
# Emulates a remote GitHub restore finalize command. Each of the *-finalize utilities
33
# that are run on the remote side have corresponding commands in this directory
44
# that symlink to this file. The command just writes a simple success message.
5-
echo "$(basename $0) OK"
5+
binname="$(basename "$0")"
6+
echo "$binname OK"
7+
8+
# The RESTORE_FINALIZE_WARNING environment variables can be used to simulate a
9+
# warning from each finalize step on the remote side.
10+
if [ "$binname" == "dgit-cluster-restore-finalize" ] && [ -n "$GHE_DGIT_CLUSTER_RESTORE_FINALIZE_WARNING" ]; then
11+
echo "1: /data/repositories/c/nw/c4/ca/42/1" >&2
12+
fi
13+
14+
if [ "$binname" == "gist-cluster-restore-finalize" ] && [ -n "$GHE_GIST_CLUSTER_RESTORE_FINALIZE_WARNING" ]; then
15+
echo "aabbccdd: /data/repositories/c/nw/c4/ca/42/1/gist/aabbccdd.git" >&2
16+
fi

test/test-ghe-restore.sh

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,8 +466,57 @@ begin_test "ghe-restore cluster"
466466
grep -q "Pages to git-server-fake-uuid2" "$TRASHDIR/restore-out"
467467
grep -q "dpages-cluster-restore-finalize OK" "$TRASHDIR/restore-out"
468468

469+
# verify no warnings printed
470+
! grep -q "Warning" "$TRASHDIR/restore-out"
469471

470472
# Verify all the data we've restored is as expected
471473
verify_all_restored_data
472474
)
473475
end_test
476+
477+
begin_test "ghe-restore missing directories or files from source snapshot displays warning"
478+
(
479+
# Tests the scenario where something exists in the database, but not on disk.
480+
set -e
481+
rm -rf "$GHE_REMOTE_ROOT_DIR"
482+
setup_remote_metadata
483+
setup_remote_cluster
484+
echo "cluster" > "$GHE_DATA_DIR/current/strategy"
485+
486+
# set as configured, enable maintenance mode and create required directories
487+
setup_maintenance_mode "configured"
488+
489+
# set restore host environ var
490+
GHE_RESTORE_HOST=127.0.0.1
491+
export GHE_RESTORE_HOST
492+
493+
# CI servers may have moreutils parallel and GNU parallel installed. We need moreutils parallel.
494+
if [ -x "/usr/bin/parallel.moreutils" ]; then
495+
ln -sf /usr/bin/parallel.moreutils "$ROOTDIR/test/bin/parallel"
496+
fi
497+
498+
# Tell dgit-cluster-restore-finalize and gist-cluster-restore-finalize to return warnings
499+
export GHE_DGIT_CLUSTER_RESTORE_FINALIZE_WARNING=1
500+
export GHE_GIST_CLUSTER_RESTORE_FINALIZE_WARNING=1
501+
502+
# run ghe-restore and write output to file for asserting against
503+
if ! ghe-restore -v -f > "$TRASHDIR/restore-out" 2>&1; then
504+
cat "$TRASHDIR/restore-out"
505+
: ghe-restore should have exited successfully
506+
false
507+
fi
508+
509+
if [ -h "$ROOTDIR/test/bin/parallel" ]; then
510+
unlink "$ROOTDIR/test/bin/parallel"
511+
fi
512+
513+
# for debugging
514+
cat "$TRASHDIR/restore-out"
515+
516+
grep -q "Warning: One or more repository networks failed to restore successfully." "$TRASHDIR/restore-out"
517+
grep -q "Warning: One or more Gists failed to restore successfully." "$TRASHDIR/restore-out"
518+
519+
# Verify all the data we've restored is as expected
520+
verify_all_restored_data
521+
)
522+
end_test

0 commit comments

Comments
 (0)