mirror of
https://github.com/apache/doris.git
synced 2026-11-04 07:31:17 +00:00
## Summary - prefer the datalake-owned HK OSS mirror for JuiceFS Hadoop jar downloads in both docker and thirdparty build flows - keep upstream Maven Central and JuiceFS GitHub release as the fallback path when the mirror is unavailable - add shell regression coverage for the new default mirror path and fallback behavior ## Mirror Path - mirror root: `https://doris-regression-hk.oss-cn-hongkong.aliyuncs.com/regression/datalake/thirdparty/juicefs` - hadoop jar: `https://doris-regression-hk.oss-cn-hongkong.aliyuncs.com/regression/datalake/thirdparty/juicefs/juicefs-hadoop-1.3.1.jar` - cli archive: `https://doris-regression-hk.oss-cn-hongkong.aliyuncs.com/regression/datalake/thirdparty/juicefs/juicefs-1.3.1-linux-amd64.tar.gz` ## Root Cause JuiceFS downloads were hardcoded to Maven Central and GitHub release endpoints in the docker and thirdparty scripts. Network jitter on those upstream endpoints could stall or fail docker startup and thirdparty downloads. ## Impact JuiceFS-related bootstrap paths now use the datalake HK OSS mirror by default while preserving upstream fallback. This avoids depending on the shared thirdparty mirror for the JuiceFS path. ## Test Plan - `bash docker/thirdparties/test/juicefs-helpers-mirror-test.sh` - `bash thirdparty/test/juicefs-default-mirror-test.sh` - `bash thirdparty/test/download-thirdparty-fallback-test.sh` - `bash -n docker/thirdparties/juicefs-helpers.sh thirdparty/vars.sh docker/thirdparties/test/juicefs-helpers-mirror-test.sh thirdparty/test/juicefs-default-mirror-test.sh thirdparty/test/download-thirdparty-fallback-test.sh` - `HEAD https://doris-regression-hk.oss-cn-hongkong.aliyuncs.com/regression/datalake/thirdparty/juicefs/juicefs-hadoop-1.3.1.jar` - `HEAD https://doris-regression-hk.oss-cn-hongkong.aliyuncs.com/regression/datalake/thirdparty/juicefs/juicefs-1.3.1-linux-amd64.tar.gz` - direct download verification for both objects after upload --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
164 lines
5.4 KiB
Bash
164 lines
5.4 KiB
Bash
#!/usr/bin/env bash
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
# Shared JuiceFS helper functions used by build and docker scripts.
|
|
|
|
JUICEFS_DEFAULT_VERSION="${JUICEFS_DEFAULT_VERSION:-1.3.1}"
|
|
MAVEN_REPOSITORY_URL="${MAVEN_REPOSITORY_URL:-https://repo1.maven.org/maven2}"
|
|
JUICEFS_THIRDPARTY_REPOSITORY_URL="${JUICEFS_THIRDPARTY_REPOSITORY_URL:-}"
|
|
JUICEFS_DEFAULT_THIRDPARTY_REPOSITORY_URL="${JUICEFS_DEFAULT_THIRDPARTY_REPOSITORY_URL:-}"
|
|
JUICEFS_HADOOP_MAVEN_REPO="${JUICEFS_HADOOP_MAVEN_REPO:-${MAVEN_REPOSITORY_URL}/io/juicefs/juicefs-hadoop}"
|
|
JUICEFS_CLI_RELEASE_REPO="${JUICEFS_CLI_RELEASE_REPO:-https://github.com/juicedata/juicefs/releases/download}"
|
|
|
|
juicefs_default_thirdparty_repository_url() {
|
|
if [[ -n "${JUICEFS_DEFAULT_THIRDPARTY_REPOSITORY_URL}" ]]; then
|
|
echo "${JUICEFS_DEFAULT_THIRDPARTY_REPOSITORY_URL%/}"
|
|
return 0
|
|
fi
|
|
if [[ -n "${s3BucketName:-}" && -n "${s3Endpoint:-}" ]]; then
|
|
echo "https://${s3BucketName}.${s3Endpoint}/regression/datalake/thirdparty/juicefs"
|
|
return 0
|
|
fi
|
|
echo "https://doris-regression-hk.oss-cn-hongkong.aliyuncs.com/regression/datalake/thirdparty/juicefs"
|
|
}
|
|
|
|
juicefs_thirdparty_repository_url() {
|
|
local repository_url="${JUICEFS_THIRDPARTY_REPOSITORY_URL:-${REPOSITORY_URL:-}}"
|
|
if [[ -z "${repository_url}" ]]; then
|
|
repository_url=$(juicefs_default_thirdparty_repository_url)
|
|
fi
|
|
echo "${repository_url%/}"
|
|
}
|
|
|
|
juicefs_repository_file_url() {
|
|
local filename="$1"
|
|
echo "$(juicefs_thirdparty_repository_url)/${filename}"
|
|
}
|
|
|
|
juicefs_find_hadoop_jar_by_globs() {
|
|
local jar_glob=""
|
|
local matched_jar=""
|
|
for jar_glob in "$@"; do
|
|
matched_jar=$(compgen -G "${jar_glob}" | head -n 1 || true)
|
|
if [[ -n "${matched_jar}" ]]; then
|
|
echo "${matched_jar}"
|
|
return 0
|
|
fi
|
|
done
|
|
return 1
|
|
}
|
|
|
|
juicefs_detect_hadoop_version() {
|
|
local juicefs_jar="$1"
|
|
local default_version="${2:-${JUICEFS_DEFAULT_VERSION}}"
|
|
if [[ -z "${juicefs_jar}" ]]; then
|
|
echo "${default_version}"
|
|
return 0
|
|
fi
|
|
juicefs_jar=$(basename "${juicefs_jar}")
|
|
juicefs_jar=${juicefs_jar#juicefs-hadoop-}
|
|
echo "${juicefs_jar%.jar}"
|
|
}
|
|
|
|
juicefs_hadoop_jar_download_url() {
|
|
local juicefs_version="$1"
|
|
local jar_name="juicefs-hadoop-${juicefs_version}.jar"
|
|
echo "${JUICEFS_HADOOP_MAVEN_REPO}/${juicefs_version}/${jar_name}"
|
|
}
|
|
|
|
juicefs_hadoop_jar_download_urls() {
|
|
local juicefs_version="$1"
|
|
local jar_name="juicefs-hadoop-${juicefs_version}.jar"
|
|
printf '%s\n' \
|
|
"$(juicefs_repository_file_url "${jar_name}")" \
|
|
"$(juicefs_hadoop_jar_download_url "${juicefs_version}")"
|
|
}
|
|
|
|
juicefs_cli_archive_name() {
|
|
local juicefs_version="$1"
|
|
echo "juicefs-${juicefs_version}-linux-amd64.tar.gz"
|
|
}
|
|
|
|
juicefs_cli_archive_mirror_url() {
|
|
local juicefs_version="$1"
|
|
local archive_name
|
|
archive_name=$(juicefs_cli_archive_name "${juicefs_version}")
|
|
juicefs_repository_file_url "${archive_name}"
|
|
}
|
|
|
|
juicefs_cli_archive_download_url() {
|
|
local juicefs_version="$1"
|
|
local archive_name
|
|
archive_name=$(juicefs_cli_archive_name "${juicefs_version}")
|
|
echo "${JUICEFS_CLI_RELEASE_REPO}/v${juicefs_version}/${archive_name}"
|
|
}
|
|
|
|
juicefs_cli_archive_download_urls() {
|
|
local juicefs_version="$1"
|
|
printf '%s\n' \
|
|
"$(juicefs_cli_archive_mirror_url "${juicefs_version}")" \
|
|
"$(juicefs_cli_archive_download_url "${juicefs_version}")"
|
|
}
|
|
|
|
juicefs_download_file() {
|
|
local target_path="$1"
|
|
local download_label="$2"
|
|
shift 2
|
|
|
|
local download_url=""
|
|
mkdir -p "$(dirname "${target_path}")"
|
|
for download_url in "$@"; do
|
|
[[ -n "${download_url}" ]] || continue
|
|
echo "Downloading ${download_label} from ${download_url}" >&2
|
|
if command -v curl >/dev/null 2>&1; then
|
|
if curl -fL --retry 3 --retry-delay 2 --connect-timeout 10 -o "${target_path}" "${download_url}"; then
|
|
return 0
|
|
fi
|
|
elif command -v wget >/dev/null 2>&1; then
|
|
if wget -q "${download_url}" -O "${target_path}"; then
|
|
return 0
|
|
fi
|
|
fi
|
|
done
|
|
|
|
rm -f "${target_path}"
|
|
return 1
|
|
}
|
|
|
|
juicefs_download_hadoop_jar_to_cache() {
|
|
local juicefs_version="$1"
|
|
local cache_dir="$2"
|
|
local jar_name="juicefs-hadoop-${juicefs_version}.jar"
|
|
local target_jar="${cache_dir}/${jar_name}"
|
|
local -a download_urls=()
|
|
|
|
mkdir -p "${cache_dir}"
|
|
if [[ -s "${target_jar}" ]]; then
|
|
echo "${target_jar}"
|
|
return 0
|
|
fi
|
|
|
|
mapfile -t download_urls < <(juicefs_hadoop_jar_download_urls "${juicefs_version}")
|
|
if juicefs_download_file "${target_jar}" "JuiceFS Hadoop jar ${juicefs_version}" "${download_urls[@]}"; then
|
|
echo "${target_jar}"
|
|
return 0
|
|
fi
|
|
|
|
return 1
|
|
}
|