Commit 69f6e56
merge: origin/master into fix/803-bound-transactional-revoke-wait - #466 wins the transactional revoke path
Master landed #466 (the revoke-path commit hands itself to the control thread), #468
(WorkContainer equality is identity) and #471, and this PR went CONFLICTING. #466 is a
different answer to the question this branch answered: in transactional mode onPartitionsRevoked no
longer commits on the poll thread at all - it posts a request, wakes the control loop through the
mailbox, and waits, bounded by commitLockAcquisitionTimeout; the confluentinc#548 spin is gone; and
it refutes this branch's decline by experiment (a revoke that commits nothing leaves its output in
the open transaction for the next commit to publish without the offset - the same duplicate through
a different door). Master's own re-premising of docs/inflight/bug-857-transactional-revoke-wait.md
says what is left for this PR: not the absence of a bound, but whether the bound is the right value
- five minutes, against a max.poll.interval.ms it can exceed.
So the resolution is master's on that path, per file:
- AbstractParallelEoSStreamProcessor: master's onPartitionsRevoked, commitOnRevokeViaTheControlThread
and the no-argument consumer-commit tryCommitOffsetsOnRevoke replace this branch's parameterised
decline, its performCommit extraction and its post-catch wake (moot: the served commit runs on the
control thread, which recovers itself); commitOffsetsThatAreReady is master's again; the mailbox
loop keeps master's wake-up message skip in front of #410's first-failure try; one of two
identical assertOnControlThread helpers (#410's and master's) is kept - master's, which
names the new design.
- RebalanceEoSDeadlockTest: master's whole file. Its unamended assertion that committed offsets
advance inside the callback holds again by construction under #466, and it now reads the
output topic at read_committed for duplicates; this branch's decline amendment is superseded.
- ArchitectureTest: master's whole file (#465). This branch's interface-hop widening does not
merge onto it; its note now records that the blind spot is still open on master and the widening
is to be re-applied on top of #465 as its own change.
- ProducerManagerTest: master's revoke-request tests and this branch's five revocation tests, both
kept; PartitionState: master's onSuccess(long) javadoc with #410's ledger cross-reference
folded in; TransactionalClaim: master's scope note plus #410's C15.
- config/infer-known-findings.txt, bug-857-family.md, core-recoverable-producer-fencing.md: master;
bug-wedged-after-poisoned-transaction.md: master's deletion (the grooming sweep); the three vetted
notes keep master's markers and this branch's concurrency label; test-untracked-ci-flakes keeps
master's rows and this branch's three later sightings.
- ProducerRecoveryTest's revoke-path fence test is retargeted to the served-commit shape: the fence
now fires on the control thread inside the served pass, the callback returns promptly on the failed
pass, nothing is stranded, and the replacement is built. Its wake assertion is gone with the wake.
What is red, on purpose: Revoke857TransactionalWaitProbeIT, 5/5, with the callback at 19.2s of a 20s
in-flight dwell against its 10s poll-interval budget - and never the 79s starvation the spin
produced. That is the measurement of #466's bound, and it is this PR's remaining acceptance
test, not a broken instrument. What is now dead main code, held for the owner's call: the three
ProducerManager revocation lock helpers and the DeclineCountingProducerManager instrument, which
count a decline the transactional path no longer makes.
Verified: ProducerRecoveryTest, ProducerManagerTest, ProducerManagerDetectionTest, ArchitectureTest
and the convention rules, PartitionStateAbortedTransactionReplayTest, TransactionalClaimCoverageTest;
RebalanceEoSDeadlockTest 5/5, ProducerFencingRecoveryIT 2/2.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PVL2FEJ645T76PbybEBUZ6329 files changed
Lines changed: 14866 additions & 3790 deletions
File tree
- .claude/hooks
- .github
- scripts
- workflows
- bin
- lib
- config
- docs
- data
- inflight
- plans
- solutions
- logic-errors
- runtime-errors
- test-flakiness
- workflow-issues
- parallel-consumer-core/src
- main/java/bz/stub/parallelconsumer
- internal
- offsets
- state
- test-integration
- java/bz/stub/parallelconsumer/integrationTests
- chaostests
- sanity
- utils
- resources
- test
- java/bz/stub/parallelconsumer
- archfixture
- internal
- utils
- offsets
- state
- resources
- parallel-consumer-vertx/src
- main/java/bz/stub/parallelconsumer/vertx
- test/java/bz/stub/parallelconsumer/vertx
- src/docs
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
84 | 84 | | |
85 | 85 | | |
86 | 86 | | |
87 | | - | |
| 87 | + | |
88 | 88 | | |
89 | 89 | | |
90 | 90 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
54 | | - | |
| 54 | + | |
| 55 | + | |
55 | 56 | | |
56 | 57 | | |
57 | 58 | | |
58 | 59 | | |
59 | 60 | | |
60 | 61 | | |
61 | 62 | | |
62 | | - | |
| 63 | + | |
63 | 64 | | |
64 | 65 | | |
65 | 66 | | |
66 | 67 | | |
67 | 68 | | |
68 | 69 | | |
69 | 70 | | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
75 | 77 | | |
76 | | - | |
| 78 | + | |
77 | 79 | | |
78 | 80 | | |
79 | 81 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
5 | | - | |
6 | | - | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
268 | 268 | | |
269 | 269 | | |
270 | 270 | | |
271 | | - | |
| 271 | + | |
272 | 272 | | |
273 | 273 | | |
274 | 274 | | |
| |||
483 | 483 | | |
484 | 484 | | |
485 | 485 | | |
486 | | - | |
| 486 | + | |
487 | 487 | | |
488 | 488 | | |
489 | 489 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
296 | 296 | | |
297 | 297 | | |
298 | 298 | | |
299 | | - | |
| 299 | + | |
300 | 300 | | |
301 | 301 | | |
302 | 302 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
0 commit comments