Burn down the remaining Category=Flaky exclusions (GH-3763) - #3835
Merged
Conversation
Seven classes, one real bug among them. With the two ASB classes handled on GH-3825 and GH-3826, this takes the Flaky exclusion list to zero. Polecat subscriptions_end_to_end -- the actual defect. Failed 1 of 3 class runs but 6 of 6 in isolation, so an in-class interaction rather than a flake. It is the daemon-outbox race: WolverineSubscriptionRunner stages envelopes in a Marten outbox and the daemon flushes them AFTER committing the page and its progress, so WaitForNonStaleData() returning does not mean the messages were published, and the session ends on the activity lull with stragglers unrecorded. The MartenSubscriptionTests twin of this file already carries the fix -- explicit WaitForExecutionOf<T>(count) waiters plus a 60s timeout -- and the Polecat copy never inherited it. Copied test files do not inherit each other's later repairs. Two tests in the same class carried Skip = "Known TrackActivity race condition with publishing subscriptions - same failure in MartenSubscriptionTests" for that same cause. Both are now unskipped and covered by the same waiters: 7 passing + 2 skipped becomes 9 passing. The other six needed no code change: - ASB session_id_pinning, dead_letter_queue_recovery, and both Bug_2588 classes were each tagged in the very commit that introduced the feature they cover, with no note. They were never green rather than intermittently green. - SqliteTests multi_tenancy_with_multiple_files was excluded for hanging the 10-minute job; the test has since been rewritten around the bounded Poll() helper it now uses. Stale note, not wrong when written. - MartenTests using_tenant_specific_queues_and_subscriptions is green 5/5. OracleTests.LeaderElection leader_election is untagged provisionally. Its rationale was real -- TM/DML lock contention against the shared CI Oracle container -- but the DDL_LOCK_TIMEOUT plus per-table ORA-00054 retry it stood in for has since been added to beforeBuildingHost(). 15/15 on four consecutive runs locally, though that contention cannot be reproduced on a dev box. The comment says so; watch CIOracle. Measurements: Polecat 245/0 (8/8 runs on the class), Sqlite 162/0, MartenTests 548/0, Oracle 15/0 x4, ASB 315/0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WHAuhdWS3XeAk16swV9G8m
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Toward #3763. With #3833 (GH-3826) and #3834 (GH-3825) covering the other two classes, this takes the
Category=Flakyexclusion list from 12 to 0.Seven classes here. One real bug among them.
The real one: Polecat
subscriptions_end_to_endFailed 1 of 3 class runs but 6 of 6 in isolation — an in-class interaction, not a flake.
It is the daemon-outbox race:
WolverineSubscriptionRunner.ProcessEventsAsyncenlists the bus in a Marten outbox, sobus.PublishAsynconly stages envelopes. The real flush isAfterCommitAsync→FlushOutgoingMessagesAsync, which the daemon calls after committing the page and its progress. Sodaemon.WaitForNonStaleData()returning does not mean the messages were published — the session completes on the activity lull and the stragglers are never recorded.The
MartenSubscriptionTeststwin of this exact file already carries the fix — explicitWaitForExecutionOf<T>(count)waiters plus.Timeout(60.Seconds()). The Polecat copy never inherited it. Copied test files don't inherit each other's later repairs.Two tests in the same class also carried:
for that same cause. Both are now unskipped and covered by the same waiters — 7 passing + 2 skipped becomes 9 passing.
The other six needed no code change
session_id_pinningdead_letter_queue_recoveryBug_2588×2multi_tenancy_with_multiple_filesPoll()helper it now usesusing_tenant_specific_queues_and_subscriptionsFour of these were tagged in the very commit that introduced the feature they test. That isn't flakiness — it's a feature that shipped without its test ever passing.
git log -Son the tag is a fast way to tell the two apart.One provisional untag — please weigh in
OracleTests.LeaderElection.leader_electionis the only tag whose rationale was substantive: TM/DML lock contention against the shared CI Oracle container. TheDDL_LOCK_TIMEOUT+ per-table ORA-00054 retry it was standing in for has since been added tobeforeBuildingHost(), and it is 15/15 on four consecutive runs locally at 1m44s each.But that contention genuinely cannot be reproduced on a dev box. The code comment says so explicitly and points at
CIOracle. If you'd rather not spend a CI cycle finding out, this one line is cheap to revert.Measurements
Polecat 245/0 (8/8 runs on the class) · Sqlite 162/0 · MartenTests 548/0 · Oracle 15/0 ×4 · ASB 315/0
🤖 Generated with Claude Code
https://claude.ai/code/session_01WHAuhdWS3XeAk16swV9G8m