diff options
author | Fedja Beader <fedja@protonmail.ch> | 2024-10-08 19:53:22 +0000 |
---|---|---|
committer | Fedja Beader <fedja@protonmail.ch> | 2024-10-08 19:53:22 +0000 |
commit | 614abb5d6b13ab92cd601de7a61256198af822a0 (patch) | |
tree | 979f6cb4fd27d3275b4b562c802fc76d8ef2718d | |
parent | 54744581d3b2cd4a554939cced0fd1913bbdf376 (diff) | |
download | clientdata-614abb5d6b13ab92cd601de7a61256198af822a0.tar.gz clientdata-614abb5d6b13ab92cd601de7a61256198af822a0.tar.bz2 clientdata-614abb5d6b13ab92cd601de7a61256198af822a0.tar.xz clientdata-614abb5d6b13ab92cd601de7a61256198af822a0.zip |
Port 1999cc4e from ManaVerse: "deduplicate repeating retries"
Honestly, why do we even need retries?
(Sync from ML)
****
legacy/clientdata!644
-rwxr-xr-x | .tools/init.sh | 58 |
1 files changed, 27 insertions, 31 deletions
diff --git a/.tools/init.sh b/.tools/init.sh index 4fe533ef..01a6d3d5 100755 --- a/.tools/init.sh +++ b/.tools/init.sh @@ -7,6 +7,30 @@ function check_error { fi } +retry_with_increasing_wait() +{ + local wait_time=1 + + while true; do + "$@" + local retval=$? + + if [[ $retval -eq 0 || $wait_time -gt 16 ]]; then + break + fi + + printf "command %s failed (exit code %d), waiting %d seconds until next try.\n"\ + "$*" "$retval" "$wait_time" + + sleep "$wait_time" + # 1, 2, 4, 8, 16... + (( wait_time = 2 * wait_time )) + done + + return "$retval" +} + + function gitclone1 { echo git clone $2 $3 git clone $2 $3 @@ -23,19 +47,7 @@ function gitclone { export name2=${CI_BUILD_REPO##*@} export name2=https://${name2%/*}/$2 - gitclone1 "$name1" "$name2" $3 - if [ "$?" != 0 ]; then - sleep 1s - gitclone1 "$name1" "$name2" $3 - if [ "$?" != 0 ]; then - sleep 3s - gitclone1 "$name1" "$name2" $3 - if [ "$?" != 0 ]; then - sleep 5s - gitclone1 "$name1" "$name2" $3 - fi - fi - fi + retry_with_increasing_wait gitclone1 "$name1" "$name2" "$3" check_error $? } @@ -57,28 +69,12 @@ function update_repos { function aptget_update { update_repos - apt-get update - if [ "$?" != 0 ]; then - sleep 1s - apt-get update - if [ "$?" != 0 ]; then - sleep 1s - apt-get update - fi - fi + retry_with_increasing_wait apt-get update check_error $? } function aptget_install { - apt-get -y -qq install $* - if [ "$?" != 0 ]; then - sleep 1s - apt-get -y -qq install $* - if [ "$?" != 0 ]; then - sleep 2s - apt-get -y -qq install $* - fi - fi + retry_with_increasing_wait apt-get -y -qq install $* check_error $? } |