Fix wasm compile source race
This commit is contained in:
@@ -15,6 +15,9 @@ mutation_file="/tmp/uce-dependency-mutation-$$"
|
||||
post_body="/tmp/uce-dependency-post-body-$$"
|
||||
post_headers="/tmp/uce-dependency-post-headers-$$"
|
||||
lock_ready_file="/tmp/uce-dependency-lock-ready-$$"
|
||||
race_output="/tmp/uce-source-race-output-$$"
|
||||
race_error="/tmp/uce-source-race-error-$$"
|
||||
race_status="/tmp/uce-source-race-status-$$"
|
||||
http_host="${UCE_TEST_HTTP_HOST:-uce.openfu.com}"
|
||||
|
||||
cleanup() {
|
||||
@@ -22,7 +25,7 @@ cleanup() {
|
||||
if [[ -n "$cache_dir" ]]; then
|
||||
rm -rf "$cache_dir"
|
||||
fi
|
||||
rm -f "$mutation_file" "$post_body" "$post_headers" "$lock_ready_file"
|
||||
rm -f "$mutation_file" "$post_body" "$post_headers" "$lock_ready_file" "$race_output" "$race_error" "$race_status"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
mkdir -p "$source_dir"
|
||||
@@ -179,6 +182,56 @@ touch -d "@$parent_mtime" "$parent_wasm"
|
||||
rm -f "$cache_dir/parent.uce.cwasm"
|
||||
for _ in {1..16}; do assert_marker parent dependency-marker-c; done
|
||||
|
||||
race_unit="$source_dir/source-race.uce"
|
||||
race_cpp="$cache_dir/source-race.uce.cpp"
|
||||
{
|
||||
printf '%s\n' 'String source_race_marker() { return("source-race-marker-a"); }'
|
||||
for i in $(seq 1 3500); do
|
||||
printf 'int source_race_padding_%s() { return(%s); }\n' "$i" "$i"
|
||||
done
|
||||
printf '%s\n' 'CLI(Request& context) { print(source_race_marker()); }'
|
||||
} >"$race_unit"
|
||||
rm -f "$cache_dir/source-race.uce.cpp" "$cache_dir/source-race.uce.wasm" "$cache_dir/source-race.uce.cwasm" "$cache_dir/source-race.uce.meta.txt"
|
||||
(
|
||||
set +e
|
||||
scripts/uce-cli "/$test_name/source-race.uce" >"$race_output" 2>"$race_error"
|
||||
echo "$?" >"$race_status"
|
||||
) &
|
||||
race_pid=$!
|
||||
deadline=$((SECONDS + 10))
|
||||
while [[ ! -e "$race_cpp" && $SECONDS -lt $deadline ]]; do
|
||||
if ! kill -0 "$race_pid" 2>/dev/null; then
|
||||
echo "source-race compile finished before publishing generated C++" >&2
|
||||
cat "$race_output" "$race_error" >&2 || true
|
||||
exit 1
|
||||
fi
|
||||
sleep 0.02
|
||||
done
|
||||
if [[ ! -e "$race_cpp" ]]; then
|
||||
echo "source-race compile did not publish generated C++ before deadline" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -q 'source-race-marker-a' "$race_cpp"; then
|
||||
echo "source-race generated C++ did not contain the initial marker" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! kill -0 "$race_pid" 2>/dev/null; then
|
||||
echo "source-race compile finished before source mutation hook" >&2
|
||||
cat "$race_output" "$race_error" >&2 || true
|
||||
exit 1
|
||||
fi
|
||||
sed -i 's/source-race-marker-a/source-race-marker-b/' "$race_unit"
|
||||
wait "$race_pid"
|
||||
if [[ "$(cat "$race_status" 2>/dev/null || echo 1)" != "0" ]]; then
|
||||
echo "source-race CLI request failed" >&2
|
||||
cat "$race_output" "$race_error" >&2 || true
|
||||
exit 1
|
||||
fi
|
||||
if [[ "$(cat "$race_output")" != *"source-race-marker-b"* ]]; then
|
||||
echo "source changed during compile but UCE served stale wasm: $(cat "$race_output")" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
worker_count=$(awk -F= '/^[[:space:]]*WORKER_COUNT[[:space:]]*=/ {gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2); print $2; exit}' /etc/uce/settings.cfg 2>/dev/null || true)
|
||||
worker_count="${worker_count:-4}"
|
||||
worker_pids=""
|
||||
|
||||
Reference in New Issue
Block a user