ci(e2e): validate the BRouter segment by size, not by "file is non-empty" #57
No reviewers
Labels
No labels
dependencies
major
security-pin
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
trails-cool/trails!57
Loading…
Reference in a new issue
No description provided.
Delete branch "ci/brouter-segment-integrity"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Root-causes the recurring
BRouter did not serve a route within 180sE2E failure — the one that has been muddying the whole Renovate queue.It was never a timeout, and never contention
I asserted both of those before reading the evidence. The container logs captured at failure show BRouter answering every poll in ~600ms for the full 180 s:
It was up and healthy. It simply could not produce a route, because the cached segment was corrupt. Each failing run logged "Berlin segment already cached" immediately beforehand.
Two lines made that permanent
A transfer truncated mid-flight is the corruption, and every later run on that slot accepts it as a valid cache. That is why it hit #46 and both #54 runs rather than being intermittent.
Fixes
Content-Length(124,034,647 bytes today) and refetch on mismatch.E10_N50.part, rename only once the size checks out — a failed download can no longer become the cacheHEADyields noContent-Length. Without it a failed HEAD would mean refetching 118 MB every run while still being unable to validate the result; the floor still rejects an obviously truncated fileno route foundvsconnection refusedvs a Java stack trace mean completely different things${i}0swhile sleeping 2 s per iteration, so "ready after 300s" actually meant 60 sVerified
bash -non both step scripts andsh -non the inner alpine script, plus the cache-validity logic exercised directly:Under the old
[ -s ]check, the 51 KB row was REUSE — that is the bug in one line.Note
The volume is currently absent on both DinD slots (pruned since), so the next e2e run refetches from scratch and should pass regardless of this PR. This makes sure it does not silently return.