From b0301e47dbe3a6c4e17849a12c69c2b1e74d2c33 Mon Sep 17 00:00:00 2001 From: "Kyle J. McKay" Date: Tue, 9 Jun 2020 21:32:58 -0700 Subject: [PATCH] taskd/clone.sh: pack lotsa loose git-svn objects on retry The `git-svn fetch` process only very sporadically runs the `git gc --auto` routine. If it repeatedly gets interrupted (e.g. flaky network) and restarted, it may *never* run the `git gc --auto` routine! Therefore, perform a check and if there are `lotsa_loose_objects` go ahead and pack up the loose objects during the "brief pause" before retrying. Signed-off-by: Kyle J. McKay --- taskd/clone.sh | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/taskd/clone.sh b/taskd/clone.sh index c7db20b..a4096b2 100755 --- a/taskd/clone.sh +++ b/taskd/clone.sh @@ -3,6 +3,7 @@ # Invoked from taskd/taskd.pl . @basedir@/shlib.sh +. @basedir@/jobd/gc-util-functions.sh set -e @@ -397,8 +398,21 @@ case "$url" in [ "$(( $svn_progress_retries - $svn_retries ))" -lt 5 ] || break # failure fi # Pause briefly before retrying to be friendly to the server - echo 'Pausing for 120 seconds before retrying' - sleep 120 + # Use that time to pack up loose objects if there are "lotsa" them + if ! lotsa_loose_objects; then + echo 'Pausing for 120 seconds before retrying' + sleep 120 + else + pausestop="$(( $(date '+%s') + 120 ))" + echo 'Pausing and packing loose objects for 120 seconds before retrying' + pack_incremental_loose_objects + timenow="$(date '+%s')" + if [ "$timenow" -lt "$pausestop" ]; then + sleepamt="$(( $pausestop - $timenow ))" + [ "$sleepamt" -le 120 ] || sleepamt=120 # paranoia check + sleep "$sleepamt" + fi + fi cleanup_git_svn_leftovers echo 'Retrying fetch' done -- 2.11.4.GIT