diff options
author | Fedja Beader <fedja@protonmail.ch> | 2024-10-08 00:31:24 +0200 |
---|---|---|
committer | Fedja Beader <fedja@protonmail.ch> | 2024-10-08 00:31:24 +0200 |
commit | bb04af993a548f47a110fe23e9e14eb7e8fd34b3 (patch) | |
tree | ac38d593573313988c41a349a982c3a0361c6cd9 | |
parent | eed1c44eca77490141f886d425a3074d3c5c0cea (diff) | |
download | clientdata-bb04af993a548f47a110fe23e9e14eb7e8fd34b3.tar.gz clientdata-bb04af993a548f47a110fe23e9e14eb7e8fd34b3.tar.bz2 clientdata-bb04af993a548f47a110fe23e9e14eb7e8fd34b3.tar.xz clientdata-bb04af993a548f47a110fe23e9e14eb7e8fd34b3.zip |
Port 1999cc4e from ManaVerse: "deduplicate repeating retries"
Honestly, why do we even need retries?
-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 $? } |