fix: CI flakes, the slot of a source and the unit test job time (keel#177) #180
No reviewers
Labels
No labels
accessibility
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Keel-Linux/keel!180
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/ci-flakes-177"
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?
Fixes part of keel#177. The other part is keel#167: the etcd flakes come from the same stalled peer stream, and the PR for keel#167 fixes them.
Classification of the red checks of 2026-10-14 and 2026-10-15
I read all 21 failed jobs of the Forgejo run history (runs 2 to 88).
TestBlocked::test_a_source_refused_too_often_is_not_answered(runs 28, 55, 70, 88)UNEXPECTED_EOF_WHILE_READING.test_mesh_bridge::test_forged_requests_cancel_the_invite_through_it(run 88)KEEL_MESH_NETNS). The limit of 30 min stays.etcdserver: unhealthy cluster(runs 10, 66)context deadline exceeded, read of 2049 ms (runs 42, 62)did not add the VIP within 15 s,etcdctl txn: no answer within 10.5 s(runs 26, 68)b_a_holds_vipfalse (runs 58, 76)c_b_sync_names,expired(runs 8, 14, 24)test_the_lease_is_the_decided_one(run 55)dropped_s5.7 (run 8)wireguard-toolsmissing (run 2)Found after this PR opened:
mesh / trixieof runs 94 and 102 failed 10 min after the last log line, while pytest -q still ran. git.pop.coop keeps Forgejo's default ZOMBIE_TASK_TIMEOUT of 10 min; runner9's journal saysReportLog error: already_exists: log file has been archived. Fixed in the CI tooling: lxc-trixie.yml prints a line each minute (Keel-Linux/.github#25, merged), and docs/infra/keel-lxc-2.md says so (Keel-Linux/handbook#87, merged).Changes
keel/mesh/listener.py,keel/mesh/memberlink.py: the handler callsrelease()before it sends the answer. The release is done one time only. The slot stays taken while the request is read and decided, so the limits per source and in total do not change.tests/test_mesh_channel.py,tests/test_mesh_memberlink.py: new tests make the thread close its connection 0.5 s late. They fail on main with the CI signature, and pass with the fix.tests/test_mesh_bridge.py: the test joins the listener's thread.KEEL_MESH_NETNSis set..forgejoand.githubtests.yml set it in the mesh job.Tests
2fed410e9155aaa1826955aaa1826914f6903f9414f6903f947efd036afe7efd036afe48011e43c2