Skip to content

test+docs: force the commit-timeout trigger, plus the rules and vocabulary - #220

Merged
astubbs merged 9 commits into
masterfrom
test/commit-timeout-deterministic-trigger
Aug 7, 2026
Merged

astubbs merged 9 commits into
masterfrom
test/commit-timeout-deterministic-trigger

Conversation

@astubbs

@astubbs astubbs commented Aug 7, 2026 •

Copy link
Copy Markdown
Owner

Description

TransactionTimeoutsTest.commitTimeout[1] failed once on CI (job 92733771394) with a 35s ConditionTimeoutException waiting for isClosedOrFailed. The run reports success because attempt 2 passed on the identical tree.

PC was healthy the whole time. The test waits 35s for a consequence whose trigger it never guaranteed. The trigger is a TimeoutException from ProducerManager.acquireCommitLock, and it fires only while the slow record holds the produce lock and the controller is inside its commit-lock acquisition. Two independent things prevent that overlap, and neither is a stall or a tight assertion:

  1. Margin. The sleep started when the record acquired the produce lock, so the trigger had only sleep - commitLockAcquisitionTimeout of margin - and none at all when the attempt arrived a commit-interval later. After the sleep ends there is no contention left, so there is exactly one chance and ~33s of dead time.
  2. No attempt at all. maybeAcquireCommitLock is gated on wm.isDirty(), whose sole setter is PartitionState#onSuccess (onFailure is a no-op). If every other record of the batch succeeds before the slow one starts, nothing marks dirty during its hold, no commit is attempted, and no timeout can fire. requestCommitAsap() cannot override this - isDirty is AND-ed into the gate.

Widening a timeout cannot fix case 2: there is no deadline to widen. docs/plans/2026-08-03-001 §5 records timeouts already being widened once on this same lock, and the flake surviving.

The fix

The test creates the overlap instead of hoping for it, the way produceTimeout already does on the other side of this lock. A latch on preAcquireOffsetsToCommit - wired through PCModule, not around it - times the sleep from the commit attempt, and one record's success is deferred into the lock hold so a commit is always attempted. The 35s await and isClosedOrFailed are untouched, and no assertion is weakened.

A new guard asserts the failure came from the attempt made while the lock was held, so a regression that stops the overlap happening fails in one line instead of returning as an occasional 35s flake.

Evidence

Controlled experiment rather than "the fix works":

Arm Result
stock, before the fix 0/12 fail
commitLockAcquisitionTimeout 2.5s vs 2s sleep 6/6 fail
commitInterval 3s - hypothesis refuted 0/6 fail
latch removed + 1500ms delayed commit attempt 4/4 fail
latch present + identical 1500ms delay 0/4 pass
fixed, stock settings, heavy load 0/8 fail
whole class, fixed, heavy load 0/4 fail
guard deliberately broken 2/2 fail, on the guard's own message

The 6/6 arm carries its own control: param [2] (50s sleep) fired correctly in the same JVM at the same instant, so machine speed is ruled out by construction rather than by argument.

Not established: which of the two paths CI actually hit. That job has no DEBUG logging and I will not guess between them - the fix covers both.

Docs

Three lessons, each in its own commit:

  • Investigation checklist + control-arm method (AGENTS.md). The original handoff searched for the failing test's name, found nothing, and classified by analogy; grepping the mechanism finds docs/plans/2026-08-03-001, the only prior investigation into this exact lock, which already had both the ordering invariant and the method. The control-arm method is promoted out of that dated plan because AGENTS.md itself says a plan goes stale once its work lands. Carries the two build traps that silently void an experiment (-pl without -am; surefire:test not reprocessing test resources).
  • Ambient probe correction (AGENTS.md). It told agents probe clean means the fault is in the test. Lag stagnation needs 50 records of lag sustained past 150s; rebalance dwell needs 15s. On a 15-record test that fails in 35s neither detector can fire, so the verdict is vacuous - and it was read as a finding here.
  • Ledger (docs/inflight/). commitTimeout reclassified out of the load-tightness family, with the warning aimed at produceTimeout and the other members still listed.
  • Solution write-up (docs/solutions/test-flakiness/unforceable-trigger-commit-lock-timeout-2026-08-07.md). Promotes the analysis out of the ledger, the same path the drain zombie and the nudge race took once understood. Its most useful section is the seven plausible readings that were wrong and why. The ledger entry shrank to the classification and its warning, pointing here for the mechanism, so the two cannot drift.

Cross-linked to vacuous-await-condition-brokerpoller-backpressure-2026-07-31.md as a sibling rule, not the same one: that hazard is an await satisfied too early by a vacuous condition (a false pass), this one is an await whose trigger never fires (a false fail). Neither fix would have solved the other, so they stay separate rather than being merged.

Prior art, and how it was searched

The original investigation searched open PRs, which is a collision check - the PR that already solved something in your file is by definition merged. Searching merged PRs by the files they touch (not by title keywords - a PR that fixed the same class rarely describes the same symptom) found three that mattered and that no symptom search would surface: #110, the sibling flake on this same producerTransactionLock fixed four days earlier and the origin of the control-arm method; #86, which introduced the ambient probe whose verdict this work had to qualify; and #98, the backpressure test that only passed by racing its own setup. That lesson is now a rule in AGENTS.md, alongside a pre-merge step to look for other instances of the defect class.

That sweep ran. Its most useful result is a negative: TransactionTimeoutsTest.produceTimeout - same file, same lock, still listed as an open flake - is not an instance, because it latches its trigger and keeps a real margin. The write-up says so explicitly, so nobody "fixes" it the way commitTimeout was fixed. Two relatives that are also not this defect (DrainCloseTest, RetriesTest) are named, along with what was checked and dismissed.

One open product-code question, recorded not fixed

Everything else here is test or docs. This is the exception, and the only item that touches main-code correctness, so it should not be skimmed past.

In transactional poll-and-produce, two paths release the same ProducingLock on the same worker thread - WorkContainer#onPostAddToMailBox and cleanUpContext's finally - and nothing clears PollContextInternal#producingLock between them. A second unlock() by a thread holding zero read locks should throw IllegalMonitorStateException. It doesn't, and nobody has established why.

It was raised and deliberately not chased in docs/plans/2026-08-03-001-investigate-transactional-commit-flake.md §11, where the attempt to measure it was void: surefire:test does not reprocess test resources, so the debug logging never reached target/test-classes. Re-measured here with -am verify, which does: 340 acquires, 340 releases, 0 IllegalMonitorStateException. Exactly 1:1, so no double release actually occurs and the "is it silently throwing" half is closed.

What stays open: which path is skipped and why, and whether that holds for the error, retry and stale-work branches, which were not separately measured. Recorded in docs/inflight/bug-producing-lock-double-release.md rather than fixed here - this lock enforces the EOS invariant and has already produced two problems, so a release path that is correct by accident rather than by construction is how the next one arrives.

Also in this PR

  • CONCEPTS.md (new) - shared domain vocabulary seeded from the area this work touched: the produce/commit lock pair and the rules for when each side may be taken, the parallel-consumption nouns those rules need, and the test-reliability vocabulary. Entries carry no file paths, class names, PR links or config values, so the file can't rot as the code moves. Its flagged-ambiguities tail records the distinction the whole investigation turned on - stall, load-tightness flake and unforceable trigger are three different things that present as the same red test. Indexed in AGENTS.md's "Where things live" table.
  • docs/solutions/workflow-issues/compound-tooling-breaks-in-worktrees-and-forks-… (new) - three ways the knowledge-capture tooling silently misreads this repo, all of which return a clean-looking result: a worktree's basename is not the repo name (a session search matched 0 where the correct name matched 37), a worktree has no repo-root config, and bare gh in a fork resolves upstream and reports "no pull requests found" for a branch that has one. That last one would downgrade a correct PR citation to "pending". Relevant here because AGENTS.md mandates worktrees and this is a fork with a live upstream, so both conditions hold on every run.

Merge strategy

Rebase-merge. The branch has been re-cut for this: the original history recorded the order things were learned, not separable units - AGENTS.md was revised across five commits and the write-up across four, and two commit messages needed an "and also", which is the repo's own test for non-atomicity.

It is now nine commits in which every file lands exactly once, bar AGENTS.md - which appears four times as four distinct ideas (a taxonomy row, the investigation rules, a correction to the ambient-probe guidance, the pre-merge sweep), not four revisions of one. Each is independently revertable, which the old history was not: reverting the prior-art rule used to mean untangling a commit that also edited the write-up.

The re-cut was verified content-identical to the pre-re-cut tip (git diff 4acbcdeb HEAD empty), so history changed and content did not.

Squashing is the wrong call here: it would bury the only behaviour change - the test fix - under eight docs commits, and releases after 0.6.0.0 generate their notes from the commit log.

Rebased onto master after #219 landed (it had rewritten AGENTS.md and the flake ledger, which made this conflict; a conflicting PR has no merge ref, so only CodeQL could run).

Checklist

  • Docs updated - AGENTS.md (investigation checklist, control-arm method, ambient-probe correction) and docs/inflight/ (reclassification + new open-question entry)
  • Tests added/updated - TransactionTimeoutsTest.commitTimeout made deterministic, plus a guard verified by negative control
  • Title & body reflect the final content of this PR
  • N/A - touches no CI runners or workflows

@astubbs
astubbs force-pushed the test/commit-timeout-deterministic-trigger branch from 24fd310 to 437092c Compare August 7, 2026 02:18
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@claude

claude Bot commented Aug 7, 2026 •

Copy link
Copy Markdown

Claude finished @astubbs's task in 4m 52s —— View job


Claude's review of PR #220

Todo list:

Summary

This is a well-reasoned fix. I traced the mechanism claims against the actual source rather than taking the PR description at face value, and they hold up:

  • preAcquireOffsetsToCommit() in ProducerManager.java:201 is protected, non-final, so the test's anonymous subclass override compiles and dispatches correctly.
  • The commit gate really is isTimeToCommitNow() && wm.isDirty() && !isRebalanceInProgress.get() (AbstractParallelEoSStreamProcessor.java:957), and setDirty()'s only caller is PartitionState#onSuccess — confirmed by grep. So the "no commit attempted at all" failure mode described in the PR is real, not hypothetical.
  • PCModule.producerManager() (PCModule.java:51) does cache in a field, and the test's override replaces that accessor entirely (own instance field) rather than fighting the base class's private field — correct approach, and the javadoc on the override explains why a fresh ProducerManager per call would be wrong (new producerTransactionLock, re-run initTransactions()).
  • OFFSET_TO_MARK_DIRTY = OFFSET_TO_GO_SLOW + 1 = 9 lands inside the 10-record second batch (offsets 5–14) and is distinct from OFFSET_TO_ERROR = 12 — no collision.
  • Default ProcessingOrder.KEY plus produceMessages using unique keys per record means offsets 8 and 9 aren't serialized behind partition ordering, so they can genuinely run concurrently — a prerequisite for the whole mechanism the PR relies on.
  • I compiled parallel-consumer-core test sources offline (test-compile) and confirmed TransactionTimeoutsTest.class plus its two new anonymous inner classes build cleanly. I did not have Docker access in this environment to actually execute the Testcontainers-backed integration test, so I'm relying on static verification plus the PR's own control-arm evidence table for runtime behavior — flagging that limitation rather than claiming I ran it.

Minor nits (non-blocking)

  1. java.util.concurrent.TimeoutException fully-qualified inline (TransactionTimeoutsTest.java:192) — there's no existing TimeoutException import in this file to conflict with, so this could just be a normal import instead of an inline FQN. Purely cosmetic.
  2. awaitQuietly vs. LatchTestUtils.awaitLatch — the file already imports LatchTestUtils, which has a similar-looking awaitLatch, but that helper throws TimeoutException on expiry. The new awaitQuietly deliberately swallows the timeout instead (well-justified in its javadoc: throwing here would be caught by PC as a user-function failure and retried, turning a diagnosable setup problem into noise). This is a legitimate divergence, not duplication — just noting it in case a future reader wonders why it wasn't reused.
  3. The guard comment "drop the countDown in producerManager() above" (TransactionTimeoutsTest.java:243) is slightly imprecise — the countdown is inside preAcquireOffsetsToCommit(), which is defined within producerManager()'s anonymous class, not producerManager() itself. Not confusing enough to matter in context.

Assessment

The core insight — that the test was waiting 35s for a consequence without ever guaranteeing its trigger — is correct and well-evidenced (the control-arm table with the within-run [2] control ruling out machine speed is a genuinely strong piece of evidence, not just "the fix works"). The docs additions (AGENTS.md investigation checklist, ambient-probe correction, docs/inflight reclassification) are accurate against the code they reference and read as durable lessons rather than one-off narration. No functional or correctness issues found.

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

✅ Duplicate Code Report

Two engines run in parallel for cross-validation. Each has its own thresholds tuned to its baseline - the real safety net is the per-engine "max increase vs base" check.

✅ PMD CPD

PR Base Change
Clones 28 28 ➖ 0
Duplicated lines 850 850 ➖ 0
Duplication 2.48% 2.48% ➖ 0
Rule Limit Status
Max duplication 5% ✅ Pass (2.48%)
Max increase vs base +0.1% ✅ Pass (+0.00%)

No new clones introduced by this PR.

✅ jscpd (language-agnostic)

PR Base Change
Clones 75 75 ➖ 0
Duplicated lines 1087 1087 ➖ 0
Duplication 3.20% 3.21% 🙂 -0.01%
Rule Limit Status
Max duplication 5% ✅ Pass (3.20%)
Max increase vs base +0.1% ✅ Pass (-0.01%)

No new clones introduced by this PR.

Powered by astubbs/duplicate-code-cross-check

@github-actions

github-actions Bot commented Aug 7, 2026 •

Copy link
Copy Markdown

📌 Duplicate code detection tool report

The tool analyzed your source code and found the following degree of similarity between the files:

🆕 New file similarities introduced

File A File B Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionTimeoutsTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ProducerManagerTest.java 30.3

🔺 Increased similarities

File A File B Base (%) PR (%) Change
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionStateManager.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/WorkManager.java 39.5 39.6 +0.1
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 32.2 32.3 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerOptions.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java 32.3 32.4 +0.1
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 52.8 52.8 +0.1
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 32.3 32.4 +0.1
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 49.3 49.4 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 54.1 54.2 +0.1
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 46.6 46.7 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 39.6 39.7 +0.1
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceTest.java 36.3 36.4 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 34.9 35.0 +0.0
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 36.5 36.6 +0.0
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 34.6 34.6 +0.0
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 34.7 34.7 +0.0
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 34.7 34.7 +0.0
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/BatchTestBase.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 30.6 30.6 +0.0
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 50.8 50.9 +0.0
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 48.8 48.8 +0.0
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerOptions.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java 30.0 30.1 +0.0
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessorTest.java 34.8 34.8 +0.0

...and 35 more

Full similarity report
parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java

📄 parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/csid/utils/JavaUtils.java 35.35
parallel-consumer-core/src/test/java/io/confluent/csid/utils/CollectionUtils.java 33.28
parallel-consumer-core/src/main/java/io/confluent/csid/utils/JavaUtils.java

📄 parallel-consumer-core/src/main/java/io/confluent/csid/utils/JavaUtils.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/csid/utils/CollectionUtils.java 39.54
parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java 35.35
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 54.2 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 39.9
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCRetriableException.java 36.68
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 36.57
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 34.95
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 34.72
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 34.72
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 34.65
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 61.15 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 54.83 ⚠️
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 40.41
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 37.13
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 32.75
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 31.49
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 61.15 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 50.85 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 36.86
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 32.51
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 31.74
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 30.28
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCRetriableException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCRetriableException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 36.68
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 33.0
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 54.2 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 52.94 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 44.56
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 34.62
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 34.16
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 30.85
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 30.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 30.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerOptions.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerOptions.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java 32.41
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java 30.06
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 54.83 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 50.85 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 45.54
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 33.98
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 32.95
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 31.13
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 45.54
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 37.13
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 36.86
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 32.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java 35.52
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 32.21
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 33.98
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java 33.15
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 32.75
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java 32.21
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 31.74
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java 35.52
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 33.15
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/BrokerPollSystem.java 33.28
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 32.95
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/BrokerPollSystem.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/BrokerPollSystem.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 33.28
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ExternalEngine.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ExternalEngine.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 39.52
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 60.36 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 52.94 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 52.13 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 48.44
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 39.9
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 39.68
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 36.9
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 33.33
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 33.33
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCRetriableException.java 33.0
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 39.68
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 31.51
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 30.85
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/PCModuleTestEnv.java 32.24
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerOptions.java 32.41
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ProducerManagerTest.java 30.5
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 51.36 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 37.08
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 37.08
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 36.9
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 34.95
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 34.62
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 33.33
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 60.36 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 51.36 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 49.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 46.74
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 46.74
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 46.23
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 44.56
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 36.57
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 31.51
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 48.44
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 46.23
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 46.12
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 37.44
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 37.44
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 52.13 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 49.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 46.12
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 34.65
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 34.16
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 33.33
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 31.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 31.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 63.05 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 46.74
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 37.44
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 37.08
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 34.72
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 33.33
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 31.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 30.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 63.05 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 46.74
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 37.44
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 37.08
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 34.72
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 33.33
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 31.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 30.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionStateManager.java 30.25
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerOptions.java 30.06
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionStateManager.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionStateManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/WorkManager.java 39.64
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java 30.25
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/ProcessingShard.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/ProcessingShard.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/ShardManager.java 36.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/ShardManager.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/ShardManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/ProcessingShard.java 36.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/WorkManager.java

📄 parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/WorkManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionStateManager.java 39.64
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/BrokerIntegrationTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/BrokerIntegrationTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/state/LatestResetTailNudgeIT.java 30.48
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/DrainingMemberRebalanceIT.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/DrainingMemberRebalanceIT.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/BrokerPollSystemDrainTest.java 31.17
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/KafkaSanityTests.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/KafkaSanityTests.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/csid/utils/LoopingResumingIteratorTest.java 34.18
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 55.41 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 46.98
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 38.65
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 44.18
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 41.14
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 38.65
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceTest.java 36.36
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java 36.36
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 60.71 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 46.98
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 41.14
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionTimeoutsTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionTimeoutsTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ProducerManagerTest.java 30.29
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 60.71 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 55.41 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 44.18
parallel-consumer-vertx/src/test-integration/java/io/confluent/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 39.09
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 48.78
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 35.66
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 48.78
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 38.04
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 30.0
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 49.01
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java 49.01
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 35.66
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 30.0
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 38.04
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/state/LatestResetTailNudgeIT.java

📄 parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/state/LatestResetTailNudgeIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/BrokerIntegrationTest.java 30.48
parallel-consumer-core/src/test/java/io/confluent/csid/utils/CollectionUtils.java

📄 parallel-consumer-core/src/test/java/io/confluent/csid/utils/CollectionUtils.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/csid/utils/JavaUtils.java 39.54
parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java 33.28
parallel-consumer-core/src/test/java/io/confluent/csid/utils/LoopingResumingIteratorTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/csid/utils/LoopingResumingIteratorTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/KafkaSanityTests.java 34.18
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/BatchTestBase.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/BatchTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 30.63
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CheckQuarantineOwnersScriptTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CheckQuarantineOwnersScriptTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineLaneReportScriptTest.java 44.98
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java 44.14
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 32.39
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 32.34
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorBatchTest.java 52.06 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java 50.76 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 44.86
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/BatchTestBase.java 30.63
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java 70.17 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 56.45 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 49.39
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java 32.34
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 70.17 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 54.88 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 52.84 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java 52.84 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 49.39
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 46.71
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 56.45 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java 54.88 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 46.71
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java 32.39
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessorTest.java 34.8
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessorTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessorTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java 34.8
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineLaneReportScriptTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineLaneReportScriptTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CheckQuarantineOwnersScriptTest.java 44.98
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java 33.36
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CheckQuarantineOwnersScriptTest.java 44.14
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineLaneReportScriptTest.java 33.36
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/TestConventionsArchTest.java 90.27 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java 89.6 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java 89.6 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/BrokerPollSystemDrainTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/BrokerPollSystemDrainTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/DrainingMemberRebalanceIT.java 31.17
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ExceptionConstructorsTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ExceptionConstructorsTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/InternalRuntimeExceptionTest.java 30.04
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/InternalRuntimeExceptionTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/InternalRuntimeExceptionTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ExceptionConstructorsTest.java 30.04
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/PCModuleTestEnv.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/PCModuleTestEnv.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java 32.24
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ProducerManagerTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ProducerManagerTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java 30.5
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionTimeoutsTest.java 30.29
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/TestParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/TestParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 31.13
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureUnitTest.java 39.86
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureUnitTest.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureUnitTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java 39.86
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/truth/CommitHistorySubject.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/truth/CommitHistorySubject.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/truth/LongPollingMockConsumerSubject.java 36.45
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/truth/LongPollingMockConsumerSubject.java

📄 parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/truth/LongPollingMockConsumerSubject.java

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/truth/CommitHistorySubject.java 36.45
parallel-consumer-mutiny/src/main/java/io/confluent/parallelconsumer/mutiny/MutinyProcessor.java

📄 parallel-consumer-mutiny/src/main/java/io/confluent/parallelconsumer/mutiny/MutinyProcessor.java

File Similarity (%)
parallel-consumer-reactor/src/main/java/io/confluent/parallelconsumer/reactor/ReactorProcessor.java 52.18 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java

📄 parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorBatchTest.java 79.0 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 50.76 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 49.08
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyPCTest.java

📄 parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyPCTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorPCTest.java 71.17 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyTest.java

📄 parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorTest.java 32.49
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyUnitTestBase.java

📄 parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyUnitTestBase.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorUnitTestBase.java 32.24
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java

📄 parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/TestConventionsArchTest.java 91.06 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java 90.39 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java 89.6 ⚠️
parallel-consumer-reactor/src/main/java/io/confluent/parallelconsumer/reactor/ReactorProcessor.java

📄 parallel-consumer-reactor/src/main/java/io/confluent/parallelconsumer/reactor/ReactorProcessor.java

File Similarity (%)
parallel-consumer-mutiny/src/main/java/io/confluent/parallelconsumer/mutiny/MutinyProcessor.java 52.18 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorBatchTest.java

📄 parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorBatchTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java 79.0 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 52.06 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 50.32 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorPCTest.java

📄 parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorPCTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyPCTest.java 71.17 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorTest.java

📄 parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyTest.java 32.49
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorUnitTestBase.java

📄 parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorUnitTestBase.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyUnitTestBase.java 32.24
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java

📄 parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/TestConventionsArchTest.java 91.06 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java 90.39 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java 89.6 ⚠️
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 41.51
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 40.41
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 39.9
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java 35.45
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 32.51
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 39.9
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java 39.37
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 32.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 31.49
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 30.28
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java 41.67
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 41.51
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ExternalEngine.java 39.52
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 41.67
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 39.37
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 35.45
parallel-consumer-vertx/src/test-integration/java/io/confluent/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java

📄 parallel-consumer-vertx/src/test-integration/java/io/confluent/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 39.09
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/TestConventionsArchTest.java

📄 parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java 91.06 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java 91.06 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java 90.27 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java

📄 parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorBatchTest.java 50.32 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java 49.08
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 44.86

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

✅ SpotBugs Report

No bugs found (new bugs only — baseline from base branch excluded).

@claude

claude Bot commented Aug 7, 2026 •

Copy link
Copy Markdown

Claude finished @astubbs's task in 2m 30s —— View job


Claude's review of PR #220 (re-run after synchronize)

Todo list:

  • Gather context (latest diff, description, changed files)
  • Check what changed since the previous review comment
  • Re-verify the deterministic-trigger claim against current code
  • Post final review

What changed since the previous review

The previous review (posted on this same comment) covered everything through commit 437092c0. One commit has landed since: 9bc4cbd6 ("docs(solutions): a test that awaits a trigger it cannot force"). It's docs-only — no test or production code changed:

  • Adds docs/solutions/test-flakiness/unforceable-trigger-commit-lock-timeout-2026-08-07.md (246 lines) — the promoted write-up of the investigation.
  • Trims docs/inflight/test-load-tightness-flakes.md down to the classification + a link to the new doc, "so the two copies cannot drift."

Since the TransactionTimeoutsTest.java code itself is unchanged from the prior review, that part of my earlier assessment (gate logic, PCModule override correctness, offset-collision check, KEY-ordering prerequisite) still stands. This pass focused on verifying the new doc's technical claims against the actual code and cross-referenced files, rather than re-deriving what was already checked:

  • producerTransactionLock is genuinely the same lock backing both acquireProduceLock/beginProducing and acquireCommitLock in ProducerManager.java — confirmed by reading the lock field usage. So the doc's claim that docs/plans/2026-08-03-001 §5's timeout-widening ("20s, was 10s... too tight under PIT") and this investigation are about "the same lock" holds; I traced §5's widened await in ProducerManagerTest.java:341-378 back to blocking on that identical producerTransactionLock.
  • FakeRuntimeException extends PCRetriableException, and AbstractParallelEoSStreamProcessor.java:1357-1358 logs PCRetriableException causes at DEBUG, not ERROR — confirmed by grep. Supports the doc's "missing-ERROR inference" item in the wrong-readings list.
  • The ledger cross-link resolves correctly: docs/inflight/test-load-tightness-flakes.md is at docs/inflight/, the new doc is at docs/solutions/test-flakiness/, and the relative link ../solutions/test-flakiness/unforceable-trigger-commit-lock-timeout-2026-08-07.md is the correct path between them.
  • All "Related" links in the new doc resolve to real files: docs/plans/2026-08-03-001-investigate-transactional-commit-flake.md, vacuous-await-condition-brokerpoller-backpressure-2026-07-31.md, and pc-silent-stall-under-contention-2026-07-29.md all exist in the paths implied.
  • §11's control-arm method (the thing this doc says it promoted into AGENTS.md) does describe a controlled before/after-unlock experiment with a false-negative build-trap callout (-pl without -am), consistent with what this PR's AGENTS.md commit describes carrying forward.

No inconsistencies found between the new doc's narrative and the code/history it cites. The trimmed ledger entry reads cleanly and doesn't leave dangling context — a reader who only has the ledger entry gets the classification and a pointer to the mechanism, not a partial/stale duplicate.

Assessment

Nothing here changes my prior conclusion: the fix is sound, well-evidenced, and this doc-only follow-up commit accurately documents it without introducing any new claims that don't hold up against the code. No functional or correctness issues found in this delta.

astubbs added a commit that referenced this pull request Aug 7, 2026
A fix that removes today's instance invites tomorrow's. Adds the sweep as a
merge-prep step, timed deliberately: at merge prep, once the defect CLASS is
understood - doing it mid-diagnosis only widens the investigation.

The reporting requirement is the part that makes it useful. "None found" is
worth nothing unless it says where you looked, and ruling a suspect out is a
real result, not an absence of one.

Run for #220. The class was "a test awaiting a consequence whose trigger
it cannot force"; the greppable proxies were sleep-as-synchronisation in
integration tests and awaits on a failure outcome. Results:

- DrainCloseTest - closest relative. Two bare sleeps sequence a close-drain
  race, and because closeDrainFirst is commanded, the await's isClosedOrFailed
  disjunct is guaranteed to fire, so the await is pure synchronisation and the
  real check is the assertEquals after it.
- RetriesTest - candidate. throwOnHeader/checking flipped on 3s/2s sleeps
  against a running consumer; the premise holds only if it got there in time.
- TransactionTimeoutsTest.produceTimeout - explicitly NOT an instance, though
  it is the nearest sibling and still open in the flake ledger. It latches its
  trigger (the injected sendOffsetsToTransaction counts down while already
  holding the commit write lock, then sleeps 5s) and the worker attempts the
  read lock at latch+1s against a 2s deadline. Its tightness label stands.
- Dismissed: chaos and probe pacing loops, OffsetCommittingSanityTest's
  explicit JUST_SLEEP mode, RebalanceEoSDeadlockTest's injected delay (that is
  the mechanism), TransactionMarkersTest's deliberately blocked record. Most
  isClosedOrFailed uses are failFast guards - opposite polarity, safe.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Aug 7, 2026
…st the tree

Two things, both from re-running the capture workflow over work it had already
documented by hand.

CONCEPTS.md, seeded from the transactional-commit area this learning touched -
the produce/commit lock pair and the rules about when each side may be taken:
dirty, eager processing during commit, the bounded commit-lock acquisition.
Plus the parallel-consumption nouns those rules only make sense against
(control loop, broker poller, shard, in-flight work) and the test-reliability
vocabulary this area keeps needing.

Entries stand alone deliberately - no file paths, class names, PR links or
current config values - so the file cannot rot as the code moves. Scoped to the
area actually investigated; the rest of the project is explicitly not covered
yet. The flagged-ambiguity tail records the distinction this investigation
turned on: "stall", "load-tightness flake" and "unforceable trigger" had been
used loosely for the same red test and are not the same thing.

The write-up gained three corrections found by re-verifying every claim against
the tree rather than trusting the earlier pass:

- status overstated the fix as SOLVED; #220 is open, not merged
- "setDirty() has exactly one caller" was imprecise - there are two overloads,
  and only the no-arg mark-true path has the single caller
- a citation abbreviated a plan filename to something that resolves to nothing

And three findings from prior sessions: this test was already a CI repeat
offender in late July for an entirely different mechanism (cross-class broker
contention tripping its intentional timeouts, fixed by forked-per-broker
isolation, not by loosening them), which makes a third distinct way it goes
red; a keyword search for "commitTimeout" mostly returns the
offsetCommitTimeout config field, which is how "single sighting" survived
scrutiny; and #29 claims the fix for the production commit-lock timeout
this doc cites as a different bug.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@claude

claude Bot commented Aug 7, 2026 •

Copy link
Copy Markdown

Claude finished @astubbs's task in 2m 17s —— View job


Claude's review of PR #220 (re-run after synchronize)

Todo list:

  • Gather context (latest diff, description, changed files)
  • Identify what changed since the last posted review (commit 9bc4cbd6)
  • Verify new doc claims against the actual code
  • Post final review

What changed since the last review

The last review on this comment covered everything through 9bc4cbd6. Five commits have landed since, and git diff 9bc4cbd6..HEAD --stat confirms the delta is docs-only — no change to TransactionTimeoutsTest.java or any production code:

AGENTS.md                                                          |  20 +++-
CONCEPTS.md                                                        |  98 ++++++++
.../unforceable-trigger-commit-lock-timeout-2026-08-07.md          |  99 +++++++--
.../compound-tooling-breaks-in-worktrees-and-forks-2026-08-07.md   | 128 ++++++++

So the test-fix mechanics I already verified in the two prior review passes (gate logic, PCModule override correctness, offset-collision check, KEY-ordering prerequisite, control-arm evidence table) are unchanged and still stand. This pass checked the new doc content against the tree rather than re-deriving what was already confirmed:

  • PartitionState.java line citations are exact. The new "Path 2" writeup in the solutions doc cites setClean() at :226-228, no-arg setDirty() at :232-234, onSuccess/its setDirty() call at :258-265, and onFailure at :268-270 — I grepped the file and every line number matches current HEAD.
  • AbstractParallelEoSStreamProcessor.java:956-957 is exactly the shouldTryCommitNow = isTimeToCommitNow() && wm.isDirty() && !isRebalanceInProgress.get() gate the doc quotes.
  • The new "Other instances" sweep is accurate, not just asserted. DrainCloseTest.java:57,60 are the two bare sleep(2000)/sleep(5000) calls cited, and RetriesTest.java:78-80 is the sleep(3000) → flip throwOnHeader → sleep(2000) sequence cited.
  • The "NOT an instance" claim about produceTimeout checks out. I read TransactionTimeoutsTest.java:278-341: the injected sendOffsetsToTransaction answer counts down produceLock and then sleeps 5s (i.e. the latch fires from inside the commit path), and the worker awaits that latch before sleeping another 1s and attempting the produce lock — against produceLockAcquisitionTimeout(ofSeconds(2)) at line 122. That's a real, latched margin, distinct from commitTimeout's unforceable trigger — the doc is right to explicitly warn future readers off "fixing" it the same way.
  • CONCEPTS.md (new, repo root) is a glossary seeded from this investigation (produce/commit lock pairing, dirty, eager-processing-during-commit, load-tightness flake vs. unforceable trigger). Its claims about the lock relationship and the onSuccess-only dirty setter match what's actually in ProducerManager/PartitionState, consistent with the citations above. AGENTS.md's new table row pointing at it resolves correctly.
  • docs/inflight/ has zero diff since 9bc4cbd6 (confirmed via git diff — empty), so the ledger entry reviewed last time is unchanged.

One thing I could not verify in this sandbox: the specific PR/issue numbers newly cited in the frontmatter and body (astubbs#110, #86, #98, #80, #115, #68, #29, confluentinc#803/809/833, astubbs#175/177) — no network/gh access here. These are narrative/provenance claims rather than claims about this repo's code, so they don't affect correctness of the fix, but I'm flagging that I didn't independently confirm them, unlike the code-level citations above which I did verify against the tree.

The new docs/solutions/workflow-issues/compound-tooling-breaks-in-worktrees-and-forks-2026-08-07.md is a meta doc about knowledge-capture tooling (worktree basename, gh fork resolution) — outside the scope of this test fix, internally consistent, no code claims to verify.

Assessment

No functional or correctness issues found in this delta or in the PR overall. The doc additions since the last review are accurate against the current code (verified via line-by-line citation checks, not just read for plausibility), and no test or production code changed, so the earlier verdict — the fix is sound and well-evidenced — stands unchanged.

@astubbs astubbs changed the title test(core): make the commit-timeout trigger deterministic, not a race test(core): force the commit-timeout trigger, and the rules that found it Aug 7, 2026

@astubbs astubbs left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@astubbs astubbs changed the title test(core): force the commit-timeout trigger, and the rules that found it test+docs: force the commit-timeout trigger, plus the rules and vocabulary Aug 7, 2026
astubbs and others added 9 commits August 7, 2026 16:02
commitTimeout waited 35s for PC to die from a commit-lock timeout, but nothing
made that timeout reachable. It fires only while the slow record holds the
produce read lock AND the controller is inside acquireCommitLock, and two
independent things prevented that overlap:

1. The sleep started when the record acquired the produce lock, so the trigger
   had only `sleep - commitLockAcquisitionTimeout` of margin - and none when
   the attempt arrived a commit-interval later.
2. maybeAcquireCommitLock is gated on wm.isDirty(), whose sole mark-true setter
   is PartitionState#onSuccess (onFailure is a no-op). If every other record of
   the batch succeeds before the slow one starts, nothing marks dirty during
   its hold, no commit is attempted at all, and no timeout can fire.
   requestCommitAsap() cannot override this - isDirty is AND-ed into the gate.

Either way PC stays healthy and logs nothing, and the await burns its full 35s.
Widening a timeout cannot fix case 2: there is no deadline to widen.

So the test now creates the overlap, the way produceTimeout already does on the
other side of this lock. A latch on preAcquireOffsetsToCommit - wired through
PCModule, not around it - times the sleep from the commit attempt, and one
record's success is deferred into the lock hold so a commit is always
attempted. The 35s await and isClosedOrFailed are untouched; no assertion is
weakened.

Confirmed by controlled experiment rather than by the fix appearing to work:

  stock, before                                   0/12 fail
  commitLockAcquisitionTimeout 2.5s vs 2s sleep    6/6 fail
  commitInterval 3s (hypothesis refuted)           0/6 fail
  latch removed + 1500ms delayed commit attempt    4/4 fail
  latch present + same 1500ms delay                0/4 fail
  fixed, stock, heavy load                         0/8 fail
  guard deliberately broken                        2/2 fail, on the guard

The 6/6 arm carries its own control: param [2] (50s sleep) fired correctly in
the same JVM at the same instant, ruling out machine speed by construction.

Also corrects the method javadoc, which documented the small multiplier as 5
when SMALL_TIMEOUT_MULTIPLIER is 2.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The write-up for the commitTimeout flake, in the directory the drain zombie and
the nudge race went to once they were understood.

The lesson generalises past this test: before awaiting a consequence, check the
test can FORCE the trigger in every interleaving. Here it could not, in two
ways - too little margin, and an isDirty gate that can suppress the commit
attempt entirely, leaving no deadline to widen.

The valuable section is the seven plausible readings that were wrong: the
stall-by-analogy framing, the missing-ERROR inference (FakeRuntimeException is
a PCRetriableException and logs at DEBUG), the refuted commitInterval
hypothesis, brute-force soaking, the vacuous "probe clean" verdict, a CI
history search that cannot see this class because a retried run reports
success, and blaming the PR it surfaced on - excluded by tree hash, which is a
technique worth copying.

Records the other-instances sweep, led by its negative result: produceTimeout
is the nearest sibling and is explicitly NOT an instance, so nobody fixes it
the way this one was fixed. Cross-links the vacuous-await doc as a SIBLING rule
- that hazard is an await satisfied too early, this one is an await whose
trigger never fires - and says what the prior-art search did not cover.

Code-behaviour claims carry file:line and were verified against the tree.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
It reads exactly like a member - an await that expired under load - and it is
not one. The 35s await is not the margin; it is the deadline for a consequence.
The margin belongs to the trigger, and neither thing that stopped it firing is
tightness.

Points at the solution doc for the mechanism rather than restating it, so the
two copies cannot drift.

The point of the entry is the warning it leaves for the members still listed,
produceTimeout especially: before filing any of them as a tight assertion,
check whether the awaited thing can be triggered at all in every interleaving.
A test that waits on a consequence it cannot force is not tight, it is unsound,
and raising its timeout will never fix it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…estion

Two paths release the same ProducingLock on the same worker thread -
WorkContainer#onPostAddToMailBox and cleanUpContext's finally - and nothing
clears PollContextInternal#producingLock between them. A second unlock() by a
thread holding zero read locks should throw IllegalMonitorStateException.

Raised and deliberately not chased in
docs/plans/2026-08-03-001-investigate-transactional-commit-flake.md, where the
attempt to measure it was void: surefire:test does not reprocess test
resources, so the debug logging never reached target/test-classes.

Measured here with -am verify, which does: 340 acquires, 340 releases, 0
IllegalMonitorStateException. Exactly 1:1, so no double release actually occurs
and the "is it silently throwing" half is closed. What stays open is which path
is skipped and why, and whether that holds for the error, retry and stale-work
branches, which were not separately measured.

Worth someone's time because this lock enforces the EOS invariant and has
already produced two problems. A release path that is correct by accident
rather than by construction is how the next one arrives.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…fork

Three failures found while capturing the learning above, all of which return a
clean or empty result indistinguishable from a genuine one. A tool that crashes
gets fixed; a tool that returns "nothing found" gets believed.

- A worktree's basename is not the repo name. Anything keyed on
  `basename $(git rev-parse --show-toplevel)` gets the worktree directory, so a
  session search matched zero sessions where the correct name matched 37 - then
  recorded "no relevant prior sessions" and carried on. Use --git-common-dir,
  which every worktree of a repo agrees on, and take its dirname.
- A worktree has no repo-root config, so a health check resolving a config path
  against --show-toplevel reports it missing when it lives in the main checkout.
- Bare `gh` in a fork resolves upstream. `gh pr view` without -R returned "no
  pull requests found" for a branch with an open PR. That one is worse than a
  missing result: a verifier treating not-found as unverified will downgrade a
  correct claim, turning a right doc wrong.

Relevant here specifically because AGENTS.md mandates worktrees for all work and
this is a fork with a live upstream, so both conditions hold on every run.

Writing it exercised its own thesis: the worktree-safe command in the first
draft was wrong - basename of the common dir is `.git`, so the sed stripped it
to an empty string - caught by running it rather than reasoning about it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Shared domain vocabulary, seeded from the area this investigation touched: the
produce/commit lock pair and the rules for when each side may be taken - dirty,
eager processing during commit, the bounded commit-lock acquisition - plus the
parallel-consumption nouns those rules only make sense against, and the
test-reliability vocabulary this area keeps needing.

Entries stand alone deliberately: no file paths, class names, PR links or
current config values, so the file cannot rot as the code moves. Scoped to the
area actually investigated; the rest of the project is explicitly not covered
yet.

The flagged-ambiguity tail records the distinction this whole investigation
turned on - "stall", "load-tightness flake" and "unforceable trigger" had been
used loosely for the same red test and are three different things.

Indexed in the "Where things live" table so it is discoverable by the same
route as every other doc here.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…th a control arm

Two rules, both learned by getting them wrong on the commitTimeout flake.

Before forming a hypothesis, check prior plans, solved-problem write-ups, the
in-flight ledger, PRs and the issue tracker - fork and upstream - and report
what each returned, including "nothing". Grep the mechanism, not the symptom:
the failing test's name is the weakest search term there is. Searching for
"commitTimeout" found nothing; searching for producerTransactionLock finds the
only prior investigation into that exact lock, which already had both its
ordering invariant and the method for settling this class of question.

`--state open` is a collision check, not a prior-art search: the PR that solved
something in your file is by definition merged, and the issue is usually
closed. Searching only the open list finds nothing and feels like diligence.
Search merged PRs BY TOUCHED FILE - a PR that fixed the same class rarely
describes the same symptom.

The control-arm method is promoted out of a dated plan doc, because AGENTS.md
itself says a plan goes stale once its work lands and this must not go with it:
confirm a cause by changing one term and showing the outcome flips, state the
prediction first, and report refuted predictions as prominently as confirmed
ones. It carries the two build traps that silently void an experiment - `-pl`
without `-am`, and surefire:test not reprocessing test resources - plus the
rule that a guard shipped with a fix must be verified by negative control.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…rs could fire

AGENTS.md told agents that `probe clean` means the fault is likely in the test
rather than in consumer-group progress. That is only true when the probe could
have detected something.

Lag stagnation needs LAG_STAGNATION_MIN_LAG of real lag sustained past
LAG_STAGNATION_BOUND, and rebalance dwell needs REBALANCE_DWELL_BOUND. A test
with a handful of records, or one that fails inside a window shorter than those
bounds, cannot trip either - so its autopsy prints `probe clean` and the
accompanying sentence carries no evidence at all.

Not hypothetical: the commitTimeout autopsy read `probe clean` on a 15-record
test that failed in 35s, against thresholds of 50 records and 150s, and the
handoff written from it treated that as a finding.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A fix that removes today's instance invites tomorrow's. Adds the sweep as a
merge-prep step, timed deliberately: once the defect CLASS is understood, since
doing it mid-diagnosis only widens the investigation.

The reporting requirement is what makes it useful. "None found" is worth
nothing unless it says where you looked, and ruling a suspect out is a real
result.

Run for this branch. The class was "a test awaiting a consequence whose trigger
it cannot force"; the proxies were sleep-as-synchronisation in integration
tests and awaits on a failure outcome. It found DrainCloseTest and RetriesTest
as relatives, dismissed the chaos and probe pacing loops with reasons, and -
most usefully - confirmed TransactionTimeoutsTest.produceTimeout is NOT an
instance despite being the nearest sibling, because it latches its trigger and
keeps a real margin.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@astubbs
astubbs force-pushed the test/commit-timeout-deterministic-trigger branch from 4acbcde to a3c591e Compare August 7, 2026 04:04
@claude

claude Bot commented Aug 7, 2026 •

Copy link
Copy Markdown

Claude finished @astubbs's task in 1m 11s —— View job


Claude's review of PR #220 (re-run after synchronize)

Todo list:

  • Gather context (latest diff vs origin/master, changed files)
  • Identify what changed since the last posted review
  • Run the code-review skill against the current PR diff
  • Post final review

What changed since the last review

git diff origin/master...HEAD --stat on the current HEAD produces exactly the same 7 files, same line counts, and the same TransactionTimeoutsTest.java blob (ebd6c531d…, matching the SHA in this event's changed_files) as my previous review pass at 03:47:55Z. There is no new commit and no content delta to re-review — this trigger fired without any code or doc change since the last pass, which is also when @astubbs left lgtm.

Confirmed still-standing verdict (unchanged from the last 3 passes)

Since there's nothing new, I re-checked rather than re-derived: the diff origin/master...HEAD is docs (AGENTS.md, CONCEPTS.md, docs/inflight/*, docs/solutions/*) plus the one test file. All prior findings hold:

  • Mechanism is real, not hypothetical. AbstractParallelEoSStreamProcessor's commit gate (isTimeToCommitNow() && wm.isDirty() && !isRebalanceInProgress.get()) and PartitionState#onSuccess as the sole setDirty() caller were confirmed by reading the source, so the "no commit attempted at all" failure mode the PR fixes is genuine.
  • Test correctness. preAcquireOffsetsToCommit() override compiles and dispatches (method is protected, non-final); the PCModule override correctly replaces the cached accessor rather than fighting the base class's private field, with a javadoc explaining why a fresh ProducerManager per call would break the shared lock; OFFSET_TO_MARK_DIRTY (offset 9) doesn't collide with OFFSET_TO_ERROR (12); default KEY ordering plus unique keys per record means the offsets involved can genuinely run concurrently, which the mechanism depends on.
  • The guard is meaningful, not decorative. It asserts the commit-lock attempt happened while the slow record held the produce lock, and the PR's own evidence table shows it fails on its own message when deliberately broken (2/2) — i.e., a regression that removes the overlap is caught in one line instead of reappearing as an occasional 35s flake.
  • Docs cross-check clean. Line citations in docs/solutions/test-flakiness/unforceable-trigger-commit-lock-timeout-2026-08-07.md against PartitionState.java and AbstractParallelEoSStreamProcessor.java are exact; the "not an instance" claim about produceTimeout checks out against the actual latch/timeout values in the same test class; cross-links between docs/inflight/test-load-tightness-flakes.md and the new solutions doc resolve correctly.

Minor nits (non-blocking, carried over — no need to act on these given the approval)

  1. java.util.concurrent.TimeoutException used fully-qualified inline in the preAcquireOffsetsToCommit override signature rather than imported — purely cosmetic.
  2. The guard's comment ("drop the countDown in producerManager() above") is slightly imprecise — the countdown is inside preAcquireOffsetsToCommit(), defined within producerManager()'s anonymous class, not producerManager() itself.

Assessment

No functional or correctness issues found. The fix is sound and well-evidenced, the docs are accurate against the code they cite, and this is unchanged from the prior review passes. @astubbs has already approved (lgtm).

@astubbs
astubbs merged commit 71a5f23 into master Aug 7, 2026
29 checks passed
@astubbs
astubbs deleted the test/commit-timeout-deterministic-trigger branch August 7, 2026 04:14
astubbs added a commit that referenced this pull request Aug 11, 2026
Review finding on #224. The earlier sweep on this branch checked whether
the AGENTS.md headings a citation named still existed, not whether the content
the citation claimed was still under them. #272 kept the headings and
moved the content, so that test could not detect the defect it was looking for,
and two instances survived in the same file the sweep had already edited for
exactly this reason.

- The related-PRs entry said #220's probe correction is "in AGENTS.md".
  Historically true, so this records the relocation rather than rewriting it:
  the thresholds are now in docs/testing.md and the settling method in
  docs/investigating.md.
- "Its §11 control-arm method is now promoted into AGENTS.md" was simply false.
  AGENTS.md:151-152 explicitly hands hypothesis-settling off, and the method is
  at docs/investigating.md:13-18. Repointed there.

Re-swept the branch on the corrected test - every doc-location citation in every
file this PR touches, checked against where the content actually lives now, not
against whether the heading survived. The remaining one, "AGENTS.md (Testing) -
carries the no-retry rule and the quarantine alternative", still holds: root
Testing states both. The two inflight entries cite no doc locations at all.
Both new relative links resolve.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XXViiRK9G6aHhYFoL3RTst
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant