From: Dan Seefeldt Date: Tue, 31 Oct 2017 14:52:00 +0000 (-0500) Subject: Add retry logic for setup of dotnet cli (dotnet/core-setup#3368) X-Git-Tag: submit/tizen/20210909.063632~11032^2~1069 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=882667ae3fe94b63148ea7ebedf3d8bd2f35b0b9;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Add retry logic for setup of dotnet cli (dotnet/core-setup#3368) Add retry logic for setup of dotnet cli Commit migrated from https://github.com/dotnet/core-setup/commit/e7e15cf0a77659b942af12fe4a59625c96a80ab2 --- diff --git a/src/installer/init-tools.sh b/src/installer/init-tools.sh index c1c3ef6..98a3ce3 100755 --- a/src/installer/init-tools.sh +++ b/src/installer/init-tools.sh @@ -43,6 +43,27 @@ display_error_message() cat "$__init_tools_log" 1>&2 } +# Executes a command and retries if it fails. +execute_with_retry() { + local count=0 + local retries=${retries:-5} + local waitFactor=${waitFactor:-6} + until "$@"; do + local exit=$? + count=$(( $count + 1 )) + if [ $count -lt $retries ]; then + local wait=$(( waitFactor ** (( count - 1 )) )) + echo "Retry $count/$retries exited $exit, retrying in $wait seconds..." + sleep $wait + else + say_err "Retry $count/$retries exited $exit, no more retries left." + return $exit + fi + done + + return 0 +} + if [ ! -e $__DOTNET_PATH ]; then if [ -z "$__DOTNET_PKG" ]; then if [ "$(uname -m | grep "i[3456]86")" = "i686" ]; then @@ -97,15 +118,20 @@ if [ ! -e $__DOTNET_PATH ]; then echo "Installing dotnet cli..." __DOTNET_LOCATION="https://dotnetcli.azureedge.net/dotnet/Sdk/${__DOTNET_TOOLS_VERSION}/${__DOTNET_PKG}.tar.gz" - # curl has HTTPS CA trust-issues less often than wget, so lets try that first. - echo "Installing '${__DOTNET_LOCATION}' to '$__DOTNET_PATH/dotnet.tar'" >> $__init_tools_log - if command -v curl > /dev/null; then - curl --retry 10 -sSL --create-dirs -o $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION} - else - wget -q -O $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION} - fi - cd $__DOTNET_PATH - tar -xf $__DOTNET_PATH/dotnet.tar + + install_dotnet_cli() { + echo "Installing '${__DOTNET_LOCATION}' to '$__DOTNET_PATH/dotnet.tar'" >> "$__init_tools_log" + rm -rf -- "$__DOTNET_PATH/*" + # curl has HTTPS CA trust-issues less often than wget, so lets try that first. + if command -v curl > /dev/null; then + curl --retry 10 -sSL --create-dirs -o $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION} + else + wget -q -O $__DOTNET_PATH/dotnet.tar ${__DOTNET_LOCATION} + fi + cd $__DOTNET_PATH + tar -xf $__DOTNET_PATH/dotnet.tar + } + execute_with_retry install_dotnet_cli >> "$__init_tools_log" 2>&1 cd $__scriptpath fi