Browse code

create apt_get_update to try to work around broken mirrors

Ubuntu's apt mirroring mechanism produces inconsistent mirrors pretty
regularly. The devstack-gate apt-get update model seems to have been
more effective getting past this than what we did in devstack. Adopt
that method for our updates.

Change-Id: I97c7896ef38b275aacb4f933fc849acee1bab858

Sean Dague authored on 2015/12/02 21:47:31
Showing 1 changed files
... ...
@@ -978,6 +978,34 @@ function _get_package_dir {
978 978
     echo "$pkg_dir"
979 979
 }
980 980
 
981
+# Wrapper for ``apt-get update`` to try multiple times on the update
982
+# to address bad package mirrors (which happen all the time).
983
+function apt_get_update {
984
+    # only do this once per run
985
+    if [[ "$REPOS_UPDATED" == "True" && "$RETRY_UPDATE" != "True" ]]; then
986
+        return
987
+    fi
988
+
989
+    # bail if we are offline
990
+    [[ "$OFFLINE" = "True" ]] && return
991
+
992
+    local sudo="sudo"
993
+    [[ "$(id -u)" = "0" ]] && sudo="env"
994
+
995
+    # time all the apt operations
996
+    time_start "apt-get-update"
997
+
998
+    local proxies="http_proxy=${http_proxy:-} https_proxy=${https_proxy:-} no_proxy=${no_proxy:-} "
999
+    local update_cmd="$sudo $proxies apt-get update"
1000
+    if ! timeout 300 sh -c "while ! $update_cmd; do sleep 30; done"; then
1001
+        die $LINENO "Failed to update apt repos, we're dead now"
1002
+    fi
1003
+
1004
+    REPOS_UPDATED=True
1005
+    # stop the clock
1006
+    time_stop "apt-get-update"
1007
+}
1008
+
981 1009
 # Wrapper for ``apt-get`` to set cache and proxy environment variables
982 1010
 # Uses globals ``OFFLINE``, ``*_proxy``
983 1011
 # apt_get operation package [package ...]
... ...
@@ -1158,16 +1186,7 @@ function update_package_repo {
1158 1158
     fi
1159 1159
 
1160 1160
     if is_ubuntu; then
1161
-        local xtrace
1162
-        xtrace=$(set +o | grep xtrace)
1163
-        set +o xtrace
1164
-        if [[ "$REPOS_UPDATED" != "True" || "$RETRY_UPDATE" = "True" ]]; then
1165
-            # if there are transient errors pulling the updates, that's fine.
1166
-            # It may be secondary repositories that we don't really care about.
1167
-            apt_get update  || /bin/true
1168
-            REPOS_UPDATED=True
1169
-        fi
1170
-        $xtrace
1161
+        apt_get_update
1171 1162
     fi
1172 1163
 }
1173 1164