20260620 优化delta长尾控制面和PP cache快路径
This commit is contained in:
@@ -14,6 +14,7 @@ MAX_RUNS="${MAX_RUNS:-3}"
|
||||
INTERVAL_SECS="${INTERVAL_SECS:-0}"
|
||||
STOP_AFTER_SECS="${STOP_AFTER_SECS:-0}"
|
||||
RIRS="${RIRS:-afrinic,apnic,arin,lacnic,ripe}"
|
||||
TAL_INPUT_MODE="${TAL_INPUT_MODE:-file-with-ta}"
|
||||
RUN_ROOT="${RUN_ROOT:-$PACKAGE_ROOT}"
|
||||
RETAIN_RUNS="${RETAIN_RUNS:-10}"
|
||||
CLEAN_TMP_AFTER_RUN="${CLEAN_TMP_AFTER_RUN:-0}"
|
||||
@@ -100,6 +101,16 @@ validate_rsync_scope() {
|
||||
esac
|
||||
}
|
||||
|
||||
validate_tal_input_mode() {
|
||||
case "$TAL_INPUT_MODE" in
|
||||
file-with-ta|file-live-ta|url)
|
||||
;;
|
||||
*)
|
||||
die "TAL_INPUT_MODE must be file-with-ta, file-live-ta or url: $TAL_INPUT_MODE"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
normalize_token() {
|
||||
local token="$1"
|
||||
token="${token#"${token%%[![:space:]]*}"}"
|
||||
@@ -149,10 +160,10 @@ ta_file_for_rir() {
|
||||
esac
|
||||
}
|
||||
|
||||
cir_tal_uri_for_rir() {
|
||||
tal_url_for_rir() {
|
||||
case "$1" in
|
||||
afrinic) printf '%s' "https://rpki.afrinic.net/tal/afrinic.tal" ;;
|
||||
apnic) printf '%s' "https://rpki.apnic.net/tal/apnic-rfc7730-https.tal" ;;
|
||||
apnic) printf '%s' "https://tal.apnic.net/apnic.tal" ;;
|
||||
arin) printf '%s' "https://www.arin.net/resources/manage/rpki/arin.tal" ;;
|
||||
lacnic) printf '%s' "https://www.lacnic.net/innovaportal/file/4983/1/lacnic.tal" ;;
|
||||
ripe) printf '%s' "https://tal.rpki.ripe.net/ripe-ncc.tal" ;;
|
||||
@@ -160,6 +171,47 @@ cir_tal_uri_for_rir() {
|
||||
esac
|
||||
}
|
||||
|
||||
cir_tal_uri_for_rir() {
|
||||
tal_url_for_rir "$1"
|
||||
}
|
||||
|
||||
tal_https_uri_from_fixture() {
|
||||
local tal_path="$1"
|
||||
awk '
|
||||
/^[[:space:]]*#/ { next }
|
||||
/^[[:space:]]*$/ { next }
|
||||
{
|
||||
gsub(/^[[:space:]]+|[[:space:]]+$/, "", $0)
|
||||
}
|
||||
/^https?:\/\// {
|
||||
print
|
||||
exit 0
|
||||
}
|
||||
' "$tal_path"
|
||||
}
|
||||
|
||||
live_ta_file_for_rir() {
|
||||
printf '%s' "$STATE_ROOT/live-ta/$(basename "$(tal_file_for_rir "$1")" .tal).cer"
|
||||
}
|
||||
|
||||
refresh_live_ta_for_rir() {
|
||||
local rir_name="$1"
|
||||
local tal_path
|
||||
local ta_uri
|
||||
local ta_file
|
||||
local tmp_file
|
||||
tal_path="$(tal_file_for_rir "$rir_name")"
|
||||
ta_uri="$(tal_https_uri_from_fixture "$tal_path")"
|
||||
[[ -n "$ta_uri" ]] || die "missing http(s) TA URI in TAL fixture for $rir_name: $tal_path"
|
||||
ta_file="$(live_ta_file_for_rir "$rir_name")"
|
||||
mkdir -p "$(dirname "$ta_file")"
|
||||
tmp_file="${ta_file}.tmp.$$"
|
||||
curl -fsSL --connect-timeout 15 --max-time 120 "$ta_uri" -o "$tmp_file" \
|
||||
|| { rm -f "$tmp_file"; die "failed to refresh TA for $rir_name from $ta_uri"; }
|
||||
[[ -s "$tmp_file" ]] || { rm -f "$tmp_file"; die "empty TA download for $rir_name from $ta_uri"; }
|
||||
mv "$tmp_file" "$ta_file"
|
||||
}
|
||||
|
||||
compare_view_trust_anchor() {
|
||||
if [[ "${#RIR_LIST[@]}" -eq 1 ]]; then
|
||||
printf '%s' "${RIR_LIST[0]}"
|
||||
@@ -377,8 +429,16 @@ build_child_args() {
|
||||
|
||||
local rir_name
|
||||
for rir_name in "${RIR_LIST[@]}"; do
|
||||
CHILD_ARGS+=(--tal-path "$(tal_file_for_rir "$rir_name")")
|
||||
CHILD_ARGS+=(--ta-path "$(ta_file_for_rir "$rir_name")")
|
||||
if [[ "$TAL_INPUT_MODE" == "url" ]]; then
|
||||
CHILD_ARGS+=(--tal-url "$(tal_url_for_rir "$rir_name")")
|
||||
elif [[ "$TAL_INPUT_MODE" == "file-live-ta" ]]; then
|
||||
refresh_live_ta_for_rir "$rir_name"
|
||||
CHILD_ARGS+=(--tal-path "$(tal_file_for_rir "$rir_name")")
|
||||
CHILD_ARGS+=(--ta-path "$(live_ta_file_for_rir "$rir_name")")
|
||||
else
|
||||
CHILD_ARGS+=(--tal-path "$(tal_file_for_rir "$rir_name")")
|
||||
CHILD_ARGS+=(--ta-path "$(ta_file_for_rir "$rir_name")")
|
||||
fi
|
||||
done
|
||||
|
||||
CHILD_ARGS+=(
|
||||
@@ -555,7 +615,7 @@ run_one_round() {
|
||||
|
||||
build_child_args
|
||||
if is_true "$RPKI_ANALYZE"; then
|
||||
CHILD_ARGS+=(--analysis-out "$run_dir/analyze")
|
||||
CHILD_ARGS+=(--analyze --analysis-out "$run_dir/analyze")
|
||||
fi
|
||||
local daemon_args=(
|
||||
--state-root "$daemon_state_root"
|
||||
@@ -612,11 +672,15 @@ main() {
|
||||
require_command python3
|
||||
require_command date
|
||||
require_command find
|
||||
if [[ "$TAL_INPUT_MODE" == "file-live-ta" ]]; then
|
||||
require_command curl
|
||||
fi
|
||||
validate_max_runs
|
||||
validate_non_negative_int "INTERVAL_SECS" "$INTERVAL_SECS"
|
||||
validate_non_negative_int "STOP_AFTER_SECS" "$STOP_AFTER_SECS"
|
||||
validate_positive_int "RETAIN_RUNS" "$RETAIN_RUNS"
|
||||
validate_rsync_scope
|
||||
validate_tal_input_mode
|
||||
if [[ -n "${DB_STATS_EXACT_EVERY:-}" && "$DB_STATS_EXACT_EVERY" != "0" ]]; then
|
||||
validate_positive_int "DB_STATS_EXACT_EVERY" "$DB_STATS_EXACT_EVERY"
|
||||
fi
|
||||
@@ -626,8 +690,15 @@ main() {
|
||||
|
||||
local rir_name
|
||||
for rir_name in "${RIR_LIST[@]}"; do
|
||||
[[ -f "$(tal_file_for_rir "$rir_name")" ]] || die "missing TAL fixture for $rir_name"
|
||||
[[ -f "$(ta_file_for_rir "$rir_name")" ]] || die "missing TA fixture for $rir_name"
|
||||
if [[ "$TAL_INPUT_MODE" == "url" ]]; then
|
||||
[[ -n "$(tal_url_for_rir "$rir_name")" ]] || die "missing TAL URL for $rir_name"
|
||||
elif [[ "$TAL_INPUT_MODE" == "file-live-ta" ]]; then
|
||||
[[ -f "$(tal_file_for_rir "$rir_name")" ]] || die "missing TAL fixture for $rir_name"
|
||||
[[ -n "$(tal_https_uri_from_fixture "$(tal_file_for_rir "$rir_name")")" ]] || die "missing http(s) TA URI in TAL fixture for $rir_name"
|
||||
else
|
||||
[[ -f "$(tal_file_for_rir "$rir_name")" ]] || die "missing TAL fixture for $rir_name"
|
||||
[[ -f "$(ta_file_for_rir "$rir_name")" ]] || die "missing TA fixture for $rir_name"
|
||||
fi
|
||||
done
|
||||
|
||||
mkdir -p "$RUNS_ROOT" "$LOG_ROOT" "$DB_DIR" "$META_DIR" "$TMP_DIR" "$INVALID_ROOT"
|
||||
|
||||
Reference in New Issue
Block a user