Invalidate warmed wasm modules precisely
This commit is contained in:
@@ -32,17 +32,34 @@ printf '%s\n' \
|
||||
'CLI(Request& context) { print(dependency_cache_marker()); }' \
|
||||
'RENDER(Request& context) { print(dependency_cache_marker()); }' >"$source_dir/parent.uce"
|
||||
|
||||
first=$(scripts/uce-cli "/$test_name/parent.uce")
|
||||
if [[ "$first" != *dependency-marker-a* ]]; then
|
||||
echo "dependency invalidation setup failed: $first" >&2
|
||||
exit 1
|
||||
fi
|
||||
assert_marker() {
|
||||
local path="$1"
|
||||
local expected="$2"
|
||||
local output
|
||||
output=$(scripts/uce-cli "/$test_name/$path.uce")
|
||||
if [[ "$output" != *"$expected"* ]]; then
|
||||
echo "$path returned stale module; expected $expected: $output" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
assert_marker parent dependency-marker-a
|
||||
|
||||
sed -i 's/dependency-marker-a/dependency-marker-b/' "$source_dir/child.uce"
|
||||
second=$(scripts/uce-cli "/$test_name/parent.uce")
|
||||
if [[ "$second" != *dependency-marker-b* ]]; then
|
||||
echo "loaded dependency change did not recompile parent: $second" >&2
|
||||
exit 1
|
||||
fi
|
||||
assert_marker parent dependency-marker-b
|
||||
|
||||
# Warm every configured worker, then replace the artifact while retaining its
|
||||
# whole-second mtime. The worker cache must notice the nanosecond/ctime change.
|
||||
for _ in {1..16}; do assert_marker parent dependency-marker-b; done
|
||||
sed 's/dependency-marker-b/dependency-marker-c/' "$source_dir/child.uce" >"$source_dir/alternate-child.uce"
|
||||
sed 's/child.uce/alternate-child.uce/' "$source_dir/parent.uce" >"$source_dir/alternate.uce"
|
||||
assert_marker alternate dependency-marker-c
|
||||
parent_wasm="$cache_dir/parent.uce.wasm"
|
||||
alternate_wasm="$cache_dir/alternate.uce.wasm"
|
||||
parent_mtime=$(stat -c %Y "$parent_wasm")
|
||||
cp "$alternate_wasm" "$parent_wasm"
|
||||
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
|
||||
|
||||
echo "dependency invalidation passed"
|
||||
|
||||
Reference in New Issue
Block a user