fix(acceptance): 严格校验单节点诊断终态

修复视频容量阶梯失败后仍被标记为完成的问题,并将低并发视频任务量按槽位缩放,避免验收负载本身超过 admission 等待窗口。

增加任务终态总量校验,确保任一失败、排队或运行中任务都会使诊断返回失败;已执行 bash -n、ShellCheck -x 与 diff check。
This commit is contained in:
2026-08-03 19:19:29 +08:00
parent eccfe568ad
commit 3af6655e86
+22 -4
View File
@@ -333,6 +333,7 @@ report_root=
stable_profile=P24
active_profile=P24
single_node_stable_slots=4
single_node_finish_status=
failure_reason=
failure_gate_id=
failure_recorded=false
@@ -3758,6 +3759,17 @@ finish_single_node_diagnostic() {
task_state=$(database_query "
SELECT count(*)||':'||count(*) FILTER (WHERE status='succeeded')||':'||count(*) FILTER (WHERE status IN ('queued','running'))
FROM gateway_tasks WHERE acceptance_run_id='$run_id'::uuid;")
local task_total task_succeeded task_active task_state_extra
IFS=':' read -r task_total task_succeeded task_active task_state_extra <<<"$task_state"
if [[ $diagnostic_status == completed ]] &&
{ [[ -n $task_state_extra ]] ||
[[ ! $task_total =~ ^[0-9]+$ ]] ||
[[ ! $task_succeeded =~ ^[0-9]+$ ]] ||
[[ ! $task_active =~ ^[0-9]+$ ]] ||
(( task_total <= 0 || task_succeeded != task_total || task_active != 0 )); }; then
diagnostic_status=failed
reason="single-node task terminal gate failed: state=$task_state"
fi
local results_json=$temporary_root/single-node-results.json
local -a result_files=()
shopt -s nullglob
@@ -3794,12 +3806,13 @@ FROM gateway_tasks WHERE acceptance_run_id='$run_id'::uuid;")
chmod 0600 "$report_root/single-node-summary.json"
local finish_body
finish_body=$(jq -cn \
--arg reason "single-node diagnostic completed; real upstream and certification intentionally skipped" \
--arg reason "$reason" \
--arg status "$diagnostic_status" \
--argjson stableSlots "$single_node_stable_slots" \
'{passed:false,failureReason:$reason,report:{diagnosticStatus:$status,site:"ningbo",realUpstreamRequests:0,certification:false,stableVideoSlots:$stableSlots}}')
admin_request POST "/api/admin/system/acceptance/runs/$run_id/finish" "$finish_body" "$finish_response"
failure_recorded=true
single_node_finish_status=$diagnostic_status
cleanup_single_node_emulator
cleanup_single_node_kubernetes_resources
}
@@ -3816,16 +3829,21 @@ run_single_node_acceptance() {
fi
local slots requests
for slots in "${single_node_video_slots[@]}"; do
apply_single_node_capacity "$slots" || break
if ! apply_single_node_capacity "$slots"; then
finish_single_node_diagnostic failed "video capacity did not converge at slots=$slots"
return 1
fi
requests=$((slots * 6))
(( requests < 64 )) && requests=64
(( requests < 24 )) && requests=24
if ! run_single_node_profile image-video video-capacity "$slots" "$requests"; then
break
finish_single_node_diagnostic failed "video capacity diagnostic failed at slots=$slots"
return 1
fi
single_node_stable_slots=$slots
done
apply_single_node_capacity "$single_node_stable_slots"
finish_single_node_diagnostic completed 'single-node emulator-only capacity ladder completed'
[[ $single_node_finish_status == completed ]] || return 1
echo "single_node_acceptance=PASS_DIAGNOSTIC run_id=$run_id stable_video_slots=$single_node_stable_slots traffic_mode=validation certification=false report=$report_root/single-node-summary.json"
}