Browse code

Merge "yum_install_package: fix errexit and retry"

Jenkins authored on 2016/03/19 05:22:59
Showing 1 changed files
... ...
@@ -1322,13 +1322,14 @@ function yum_install {
1322 1322
 
1323 1323
     time_start "yum_install"
1324 1324
 
1325
-    # Warning: this would not work if yum output message
1326
-    # have been translated to another language
1325
+    # - We run with LC_ALL=C so string matching *should* be OK
1326
+    # - Exit 1 if the failure might get better with a retry.
1327
+    # - Exit 2 if it is fatal.
1327 1328
     parse_yum_result='             \
1328 1329
         BEGIN { result=0 }         \
1329 1330
         /^YUM_FAILED/ { exit $2 }  \
1330
-        /^No package/ { result=1 } \
1331
-        /^Failed:/    { result=1 } \
1331
+        /^No package/ { result=2 } \
1332
+        /^Failed:/    { result=2 } \
1332 1333
         //{ print }                \
1333 1334
         END { exit result }'
1334 1335
 
... ...
@@ -1336,15 +1337,21 @@ function yum_install {
1336 1336
     # missing or failed packages are OK.
1337 1337
     # See https://bugzilla.redhat.com/show_bug.cgi?id=965567
1338 1338
     (sudo_with_proxies "${YUM:-yum}" install -y "$@" 2>&1 || echo YUM_FAILED $?) \
1339
-        | awk "$parse_yum_result"
1340
-    result=$?
1341
-
1342
-    if [ "$result" != 0 ]; then
1343
-        echo $LINENO "${YUM:-yum}" install failure: $result
1344
-    fi
1339
+        | awk "$parse_yum_result" && result=$? || result=$?
1345 1340
 
1346 1341
     time_stop "yum_install"
1347 1342
 
1343
+    # if we return 1, then the wrapper functions will run an update
1344
+    # and try installing the package again as a defense against bad
1345
+    # mirrors.  This can hide failures, especially when we have
1346
+    # packages that are in the "Failed:" section because their rpm
1347
+    # install scripts failed to run correctly (in this case, the
1348
+    # package looks installed, so when the retry happens we just think
1349
+    # the package is OK, and incorrectly continue on).
1350
+    if [ "$result" == 2 ]; then
1351
+        die "Detected fatal package install failure"
1352
+    fi
1353
+
1348 1354
     return "$result"
1349 1355
 }
1350 1356