Copilot commented on code in PR #3737:
URL: https://github.com/apache/celeborn/pull/3737#discussion_r3421382647
##########
build/mvn:
##########
@@ -46,23 +47,44 @@ install_app() {
wget_opts="--progress=bar:force ${wget_opts}"
if [ -z "$3" -o ! -f "$binary" ]; then
- # check if we already have the tarball
- # check if we have curl installed
- # download application
- [ ! -f "${local_tarball}" ] && [ $(command -v curl) ] && \
- echo "exec: curl ${curl_opts} ${remote_tarball}" 1>&2 && \
- curl ${curl_opts} "${remote_tarball}" > "${local_tarball}"
- # if the file still doesn't exist, lets try `wget` and cross our fingers
- [ ! -f "${local_tarball}" ] && [ $(command -v wget) ] && \
- echo "exec: wget ${wget_opts} ${remote_tarball}" 1>&2 && \
- wget ${wget_opts} -O "${local_tarball}" "${remote_tarball}"
- # if both were unsuccessful, exit
- [ ! -f "${local_tarball}" ] && \
- echo -n "ERROR: Cannot download $2 with cURL or wget; " && \
- echo "please install manually and try again." && \
- exit 2
- cd "${_DIR}" && tar -xzf "$2"
- rm -rf "$local_tarball"
+ local attempt=1
+ while [ "${attempt}" -le "${max_attempts}" ]; do
+ # remove any partial/corrupt download left over from a previous attempt
+ rm -f "${local_tarball}"
+
+ # download application with `curl`, falling back to `wget`
+ if [ $(command -v curl) ]; then
+ echo "exec: curl ${curl_opts} ${remote_tarball}" 1>&2
+ curl ${curl_opts} "${remote_tarball}" > "${local_tarball}"
+ elif [ $(command -v wget) ]; then
+ echo "exec: wget ${wget_opts} ${remote_tarball}" 1>&2
+ wget ${wget_opts} -O "${local_tarball}" "${remote_tarball}"
+ else
+ echo "ERROR: Cannot download $2: neither cURL nor wget is installed."
1>&2
+ exit 2
+ fi
+
+ # Validate the download before trusting it. A flaky Apache mirror can
+ # return an HTML page (mirror chooser / error) with HTTP 200, which is
+ # not a gzip tarball; extracting it later would fail with a confusing
+ # exit code. `tar -tzf` lists the archive without extracting and
+ # exits non-zero on a non-tarball body.
+ if [ -f "${local_tarball}" ] && tar -tzf "${local_tarball}" >/dev/null
2>&1; then
+ cd "${_DIR}" && tar -xzf "$2"
+ rm -rf "${local_tarball}"
+ return 0
+ fi
Review Comment:
The function returns success as soon as the tarball passes `tar -tzf`, but
it does not check whether the *extraction* (`tar -xzf`) succeeded. If
extraction fails (e.g., disk full, permission issues), the function still
`return 0`, which can later fail in a harder-to-debug way.
Only `return 0` when extraction succeeds; otherwise fall through to
retry/error.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]