Skip to content

fix(core): a commit rejected after leaving the group is no longer recorded as successful - #108

Merged
astubbs merged 2 commits into
masterfrom
fix/commitfailed-marks-uncommitted-offsets-clean
Aug 4, 2026
Merged

fix(core): a commit rejected after leaving the group is no longer recorded as successful#108
astubbs merged 2 commits into
masterfrom
fix/commitfailed-marks-uncommitted-offsets-clean

Conversation

@astubbs

@astubbs astubbs commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Description

The sibling flaw #100 turned up, now rebuilt on master (which has #100).

#100 fixed RebalanceInProgressException escaping unhandled and killing the broker-poll thread. While tracing that, ConsumerManager.commitSync was found handling CommitFailedException in a way that looks like the answer but is the other failure this workstream is about:

} catch (CommitFailedException e) {
    // it is impossible to commit now because the group have rebalanced
    // Log an error and let the poller do the rebalance job and seek commit later
    log.warn("Failed to commit offset due to group rebalancing. Will ignore the error for now.", e);
    break;
}

The poller was never going to "seek commit later." Catching there and returning normally means AbstractOffsetCommitter.retrieveOffsetsAndCommit() carries straight on to onOffsetCommitSuccess(), which marks the offsets clean. Nothing re-commits an offset PC believes is already committed.

How this differs from #100

Same root confusion - "Kafka refused this commit" treated as something other than defer and retry - but the two fail in opposite directions:

#100 RebalanceInProgressException this PR CommitFailedException
Handling none - propagated caught, logged, returned normally
Failure loud and fatal: poll thread dies, commits time out, instance dies silent: everything looks healthy
Offsets never committed, PC knows it never committed, PC records them as committed
Result stall, then death rejected offsets recorded as done; a partition's new owner resumes behind them and those records are re-delivered having already been marked complete

#100 announces itself. This one does not: there is no exception, no dead thread, no stall - only a divergence between PC's bookkeeping and the broker's, showing up later as unexplained duplicate delivery.

That is why the "Swallow" arm of the three-way framing in commitDeferringOnRebalance's javadoc is no longer hypothetical - it names this code as the case in point.

The fix

Handle it where the rebalance case is already handled, one layer up:

  • ConsumerManager.commitSync - remove the catch, so the exception reaches the layer above onOffsetCommitSuccess() instead of being resolved below it.
  • ConsumerOffsetCommitter.commitDeferringOnRebalance - catch it beside RebalanceInProgressException. Offsets stay dirty and are re-committed next cycle; waiting committers are still released, so nothing blocks.

Layer matters more than the catch: the same catch one frame lower is the bug. The two exceptions are unrelated by inheritance, so catch order is not load-bearing.

Verification

MockConsumerCommitFailedTest - broker-free, rejects the first 3 commits then accepts.

Confirmed discriminating, by reverting the two source files and re-running:

MockConsumerCommitFailedTest        Errors: 1  <- commitAttempts stalled at 3, never exceeded it
MockConsumerRebalanceInProgressTest Tests run: 1, Failures: 0   (its fix is already on master)

The stall is the bug: once the offsets are marked clean, collectCommitDataForDirtyPartitions() returns empty and commitSync is never called again. A "no exception escaped" test would pass against the broken code and guard nothing.

Per review feedback, the test also asserts the offsets are genuinely re-committed - mockConsumer.committed(tp).offset() == RECORDS - rather than inferring it from the attempt count.

Duplication

The two tests are one scenario with one variable, so the ~36 duplicated lines the bot flagged are extracted into CommitRejectionTestBase; each subclass now supplies only its exception. MockConsumerRebalanceInProgressTest keeps its full diagnosis in the class javadoc. This also settles where a future third rejection reason goes.

Also here: the reviewer's test grants were inert (claude-code-review.yml)

Added to this PR on request rather than as a separate one, because this PR is the evidence for it.

The grants meant to let the reviewer run tests never matched anything. --allowedTools entries are prefix matches, not globs, so Bash(bin/ci-unit-test.sh:*) does not match ./bin/ci-unit-test.sh - every natural invocation was denied.

The review of this PR is the proof: 10 permission denials, its own checklist left at "Run tests to verify RED->GREEN claim (in progress)", no final review posted - and the check still reported success. A grant that cannot match is worse than no grant: it reads as a capability the reviewer does not have, and fails silently at both ends.

  • Both spellings granted, per script. Enumerated rather than Bash(./bin/*.sh:*), because that glob would not match either - the same bug in a new coat.
  • ./mvnw granted, for the one thing the wrappers cannot express: running a single test class. Verifying a RED/GREEN claim means reverting the fix and re-running only the new test - seconds via -Dtest, against a ~6 minute suite. That turns the most valuable review check from theoretical into affordable.
  • The earlier "no bespoke mvnw grant" reasoning is kept as guidance, not deleted: whole suite -> wrapper, always; ./mvnw only for a scoped -Dtest run, whose result is never reported as "the suite is green" (it skips the -Dexcluded.groups the wrappers pin). The system prompt says so, and tells the reviewer to restore anything it stashes.

Consequence: since this PR now modifies the review workflow, claude-code-action will refuse to review it - it requires the workflow to match the default branch, and reports that skip as success. The grants take effect for the next PR after merge.

The red PIT check is a known flake, not this PR

Mutation (PIT, scoped) (optional) fails on ProducerManagerTest.producedRecordsCantBeInTransactionWithoutItsOffsetDirect, a pre-existing flake recorded in docs/inflight.md since 2026-07-28 (a Mockito interaction race, ~1/245 locally).

It cannot be caused by this PR: ConsumerManager.commitSync has exactly one caller, ConsumerOffsetCommitter, and that test runs PERIODIC_TRANSACTIONAL_PRODUCER, which commits via the producer path and never enters it. The test passes in Unit Tests, in tests, and in a full local suite on this commit.

Worth its own note, though, and now recorded in docs/inflight.md: one flaky test disables mutation testing repo-wide. PIT refuses to score any mutants while a test is unstable without mutation, so this lane's greenness has been a proxy for suite stability rather than for mutation coverage. This is the second test to do it - #101 fixed queuedMessagesNotProcessedOrCommittedIfSubmittedDuringShutdown for the same reason. rerunFailingTestsCount would not help: surefire reruns hide a flake from the unit gate, but PIT runs its own coverage pass and sees the raw result.

Checklist

  • Changelog entry added (CHANGELOG.adoc) - a Fixes entry for the commit bug, and the existing Build & CI reviewer entry extended rather than duplicated; README.adoc regenerated
  • Tests added/updated - MockConsumerCommitFailedTest, verified RED without the fix; shared CommitRejectionTestBase
  • Docs updated - the javadoc's "Swallow" arm now cites this as the real occurrence rather than a hypothetical; docs/inflight.md records that the ProducerManagerTest flake disables the whole PIT lane
  • Title & body reflect the final content of this PR - including the CI grant fix added on request
  • Self-hosted runner / security implications considered - the review workflow runs on ubuntu-latest, not the self-hosted box. The grants do widen what the reviewer may execute, so it stays an enumerated allowlist rather than Bash(*): this job reads attacker-influencable text (diff, PR body, comments) and has no fork guard beyond sender.type != Bot. ./mvnw is the build wrapper every CI job already runs on the same checkout.

changelog-ref: relates to upstream confluentinc#857

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Aug 3, 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 3, 2026

Copy link
Copy Markdown

Claude finished @astubbs's task in 7m 54s —— View job


Code Review

  • Gather context (PR diff, changed files)
  • Review ConsumerManager.java change
  • Review ConsumerOffsetCommitter.java change
  • Review new test MockConsumerCommitFailedTest.java
  • Review docs/changelog updates
  • Run test RED→GREEN to verify claims
  • Post final review

Summary

This is a correct, well-scoped fix, and I verified it empirically rather than just reading it.

The fix logic checks out. AbstractOffsetCommitter.retrieveOffsetsAndCommit() (AbstractOffsetCommitter.java:40-43) calls commitOffsets() then onOffsetCommitSuccess() sequentially with no try/catch between them — so an exception thrown by commitOffsets() naturally aborts before the success marking, as long as nothing swallows it in between. Before this PR, ConsumerManager.commitSync did exactly that swallowing for CommitFailedException (catch, log, break, return normally). Moving the catch up to ConsumerOffsetCommitter.commitDeferringOnRebalance() (ConsumerOffsetCommitter.java:231-235) puts it on the correct side of the success-marking call, mirroring the already-merged RebalanceInProgressException handling from #100.

Verified empirically, not just read:

  • Ran MockConsumerCommitFailedTest as shipped → passes, 1 test, 0 failures, 1.0s.
  • Temporarily restored the old swallow-in-ConsumerManager behavior (removed the fix) and re-ran the same test → fails, all 3 reruns: ConditionTimeout ... expected to be greater than: 3 — the commit-attempt counter stalls exactly at the 3 rejected commits, never progressing, which is precisely the "falsely marked clean → nothing retries" signature described in the PR. Reverted the temporary change afterward (working tree confirmed clean).
  • This is a stronger verification than just trusting the PR body's RED/GREEN claim — the test genuinely discriminates the bug it targets.

Call-site coverage confirmed: commitDeferringOnRebalance() is invoked from both commit() (owner-thread sync path, ConsumerOffsetCommitter.java:74) and maybeDoCommit() (queued-request path used by the broker-poll thread, ConsumerOffsetCommitter.java:178), so both routes into PERIODIC_CONSUMER_SYNC are covered. ConsumerManager.commitSync no longer has any handling for CommitFailedException and lets it propagate — confirmed there's only one caller of commitSync (ConsumerOffsetCommitter.java:96), so nothing else depends on the old swallow behavior. The PR's claim that only PERIODIC_CONSUMER_SYNC is affected (async path never reaches this try/catch) checks out from the code structure.

Minor observations (non-blocking):

  • The javadoc's three-way "throw / swallow / defer" framing is dense but accurate, and the new bullet citing ConsumerManager's old behavior as the concrete "swallow" example is a nice touch for future readers landing on this method.
  • CommitFailedException and RebalanceInProgressException are siblings under KafkaException (not sub/super types of each other), so the catch-block ordering in commitDeferringOnRebalance() has no ambiguity — confirmed by the clean compile.
  • Test correctly uses the "discriminating assertion" (commit attempts continue) rather than a symptom — a good pattern given the alternative (asserting final offset state) could pass even with subtly wrong dirty-tracking.

No issues found. Changelog/README entries accurately describe the change and are consistent with the diff. This is ready to merge once #100 lands and this branch is rebased onto it, per the PR notes.

astubbs added a commit that referenced this pull request Aug 3, 2026
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QqHpNSXC39ANv9kG1ZvUzn
@claude

claude Bot commented Aug 3, 2026

Copy link
Copy Markdown

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


Claude's review

Tasks

  • Gather context (diff, related files, CLAUDE.md)
  • Review ConsumerManager.java change
  • Review ConsumerOffsetCommitter.java change
  • Review MockConsumerCommitFailedTest.java
  • Static/structural verification (see note on test execution below)
  • Post final review

Summary

This is a clean, well-scoped fix with the same shape as #100, and it holds up under a close read of the code paths involved.

  • ConsumerManager.java — removing the CommitFailedException catch is correct. The catch previously breaked the retry loop and returned normally, which is exactly the "swallow at the wrong layer" bug described. With it removed, the exception now propagates unimpeded: the inner catches only handle TimeoutException/SaslAuthenticationException, the outer catch only handles WakeupException, and the finally { pendingRequests.addAndGet(-1L); } still runs on the way out, so there's no counter leak from the early unwind.
  • ConsumerOffsetCommitter.java — I traced AbstractOffsetCommitter.retrieveOffsetsAndCommit() (parallel-consumer-core/.../AbstractOffsetCommitter.java:40-43) directly: commitOffsets(...) is called before onOffsetCommitSuccess(...), so an exception thrown out of commitOffsets aborts the method before the success marking — confirms the PR's central claim in code, not just by description. Catching CommitFailedException one layer up (in commitDeferringOnRebalance()) rather than in ConsumerManager is the right layer for exactly the reason the javadoc gives.
  • CommitFailedException and RebalanceInProgressException aren't related by inheritance, so the two separate catch blocks are order-independent — no risk of one shadowing the other.
  • Confirmed via grep that no other code path in parallel-consumer-core handles either exception, so this is the only place affected, consistent with the PR's claim that the async commit path is untouched (commitAsync doesn't throw synchronously for this failure).
  • TestMockConsumerCommitFailedTest asserts on a genuinely discriminating signal (commit attempts continuing past the rejection threshold) rather than a symptom, which is the right call — a naive "no exception is thrown" test would pass even with the old buggy swallow-and-return behavior. closeDontDrainFirst() in the finally block avoids leaking the background thread if an assertion fails.

Minor, non-blocking observations

  • The test verifies commits keep being attempted and that all records are eventually processed, but doesn't assert the mock consumer's final committed offset actually reflects all records (e.g. via mockConsumer.committed(tp)). That would make the "offsets stay dirty and get truly re-committed" claim airtight end-to-end rather than inferred from the attempt counter, though the current assertion is already a solid, discriminating regression guard.
  • Everything else — javadoc accuracy, changelog/README wording, copyright header consistency with other files in this fork — checked out against the actual code and repo conventions.

Note on verification

I was unable to execute mvnw/java in this environment (tool invocations touching the JVM toolchain required approval that wasn't available in this automated context), so I verified correctness by reading the exact call chain (ConsumerManager.commitSyncConsumerOffsetCommitter.commitOffsetsAbstractOffsetCommitter.retrieveOffsetsAndCommitcommitDeferringOnRebalance) rather than by running the new test. The PR description's own RED→GREEN verification (0.9s pass with the fix, stalls at commit-counter 2 without it) is consistent with what the code does.

No blocking issues found — this looks ready to merge once #100 lands and this is rebased, per the PR's own note.

@github-actions

github-actions Bot commented Aug 3, 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 33 33 ➖ 0
Duplicated lines 1001 1001 ➖ 0
Duplication 3.00% 3.00% ➖ 0
Rule Limit Status
Max duplication 5% ✅ Pass (3.00%)
Max increase vs base +0.1% ✅ Pass (+0.00%)

No new clones introduced by this PR.

✅ jscpd (language-agnostic)

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

No new clones introduced by this PR.

Powered by astubbs/duplicate-code-cross-check

@github-actions

github-actions Bot commented Aug 3, 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/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 32.5
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 32.4
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 30.1

🔺 Increased similarities

File A File B Base (%) PR (%) Change
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 50.2 50.4 +0.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 44.8 45.0 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 54.3 54.5 +0.1
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java 70.1 70.2 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 32.1 32.2 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 60.5 60.6 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 40.1 40.2 +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.1 49.3 +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/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 36.7 36.8 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 30.8 30.9 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ExternalEngine.java parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 39.5 39.6 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 60.4 60.5 +0.1
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 56.2 56.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.4 52.5 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 32.3 32.4 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 30.1 30.2 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 45.2 45.3 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 48.6 48.7 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 51.6 51.8 +0.1

...and 53 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.19
parallel-consumer-core/src/test/java/io/confluent/csid/utils/CollectionUtils.java 33.11
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.35
parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java 35.19
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.22 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 40.37
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 37.07
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCRetriableException.java 36.92
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 35.6
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 35.6
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 35.27
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 34.24
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 30.18
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 60.59 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 54.48 ⚠️
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 40.24
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 36.82
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 32.39
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 31.29
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 60.59 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 50.38 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 36.45
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 32.24
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 31.34
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 30.05
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.92
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 32.9
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.22 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 53.47 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 44.96
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 35.02
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 33.83
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 31.29
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 31.29
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 30.37
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 30.16
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.6
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java 30.63
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.48 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 50.38 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 45.32
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 33.72
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 32.9
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 30.88
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.32
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 36.82
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 36.45
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 32.43
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 34.99
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 32.81
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.72
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java 32.81
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java 32.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 32.39
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 31.34
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 34.99
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 32.8
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 32.94
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 32.9
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 32.94
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.63
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.48 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 53.47 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 50.99 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 48.72
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 40.37
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 38.98
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 37.23
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 34.16
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 34.16
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCRetriableException.java 32.9
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 38.98
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 31.08
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 30.37
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.8
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.6
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ProducerManagerTest.java 30.83
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.75 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 37.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 37.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 37.23
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 35.27
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 35.02
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 33.01
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.48 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 51.75 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 48.57
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 47.54
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 47.54
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 46.82
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 44.96
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 37.07
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 31.08
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.72
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 46.82
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 45.46
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 38.51
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 38.51
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 30.18
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 30.16
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 50.99 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 48.57
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 45.46
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 34.24
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 33.83
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 33.01
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 32.07
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 32.07
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.8 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 47.54
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 38.51
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 37.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 35.6
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 34.16
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 32.07
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 31.29
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.8 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 47.54
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 38.51
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 37.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 35.6
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 34.16
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 32.07
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 31.29
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.69
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerOptions.java 30.63
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 41.65
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java 30.69
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 38.31
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 38.31
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 41.65
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/AmbientProbeExtension.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/AmbientProbeExtensionTest.java 30.24
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 33.98
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.45 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 46.96
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 38.7
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.15
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 41.09
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 38.7
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.54
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.54
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.74 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 46.96
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 41.09
parallel-consumer-vertx/src/test-integration/java/io/confluent/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 30.13
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.74 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 55.45 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 44.15
parallel-consumer-vertx/src/test-integration/java/io/confluent/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 39.35
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.74
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 35.51
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.74
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 37.65
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 32.21
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 50.63 ⚠️
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 50.63 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 35.51
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 32.21
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 37.65
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.35
parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java 33.11
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 33.98
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/AbstractParallelEoSStreamProcessorTestBase.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/AmbientProbeExtension.java 30.24
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.49
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 45.48
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java 43.83
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.48
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 32.43
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 51.95 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java 50.65 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 44.78
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/BatchTestBase.java 30.49
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.2 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 56.36 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 49.26
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java 32.43
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.2 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 54.98 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 52.5 ⚠️
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.5 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 49.26
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 46.58
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.36 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java 54.98 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 46.58
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java 32.48
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.79
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.79
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/AbstractParallelEoSStreamProcessorTestBase.java 30.27
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 45.48
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java 33.34
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 43.83
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineLaneReportScriptTest.java 33.34
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.4 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java 89.73 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java 89.73 ⚠️
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.08
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.08
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.8
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.83
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 30.88
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 40.09
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 40.09
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.65
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.65
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.57 ⚠️
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.04 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 50.65 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 49.23
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 69.63 ⚠️
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 33.54
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.79
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.17 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java 90.5 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java 89.73 ⚠️
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.57 ⚠️
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.04 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 51.95 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 50.49 ⚠️
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 69.63 ⚠️
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 33.54
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.79
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.17 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java 90.5 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java 89.73 ⚠️
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.49
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 40.24
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 39.81
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java 35.37
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 32.24
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.81
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java 39.28
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 32.43
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 31.29
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 30.05
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.75
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 41.49
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ExternalEngine.java 39.63
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.75
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 39.28
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 35.37
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.35
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 30.13
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.17 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java 91.17 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java 90.4 ⚠️
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.49 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java 49.23
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 44.78

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

✅ SpotBugs Report

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

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

🧪🔒 Quarantine Lane Report

Quarantined test Outcome Owner Meaning
ChaosChurnStormIT.churnStormMeetsSlosAndBalancesLedger 🔴 failing (expected) #80 quarantine holding
PartitionStateCommittedOffsetIT.committedOffsetRemoved 🟡🎲 passed (flapper) #80 proves nothing - passes most runs by nature

🔴 expected while the owner PR is open · 🟡🎲 flapper, pass proves nothing · 🚨 a deterministic quarantined test passing means its fix landed: delete its @Quarantined annotation + docs/QUARANTINED_TESTS.md entry (a merge-blocking review thread has been opened). Lane: non-gating; rules: see the Quarantine Audit check.

astubbs added a commit that referenced this pull request Aug 3, 2026
…read (confluentinc#857 family) (#100)

A commit landing while the consumer group is rebalancing killed the whole
PC instance.

Kafka signals this with RebalanceInProgressException and resolves it by
completing the rebalance on the next poll() - it means "not yet", not
"failed". ConsumerManager.commitSync has a deliberate ladder for exactly
this family (CommitFailedException, TimeoutException,
SaslAuthenticationException), but this one - the closest sibling of the
first - was missing from it.

The consequences were wildly out of proportion to the cause:

1. it escaped BrokerPollSystem.controlLoop(), which logs "Unknown error"
   and rethrows, permanently killing the broker-poll thread;
2. that thread is the ONLY producer of commit responses, so the control
   thread's commitAndWait() blocked for the full offsetCommitTimeout and
   then threw "Timeout waiting for commit response" - a symptom pointing
   nowhere near the cause;
3. the control thread died too, taking the instance with it, and the
   close path then failed to commit because the poll thread was gone.

One retriable protocol blip killed the consumer. In production this is
the confluentinc#857-family "locks forever until manual restart" signature.

The fix is where it is on purpose. Catching this in
ConsumerManager.commitSync, next to its siblings, is the obvious
placement and is WRONG - it was tried first.
AbstractOffsetCommitter.retrieveOffsetsAndCommit() calls
onOffsetCommitSuccess() unconditionally once commitOffsets() returns, so
swallowing it there makes PC record a commit that never reached the
broker: partitions go clean, nothing is retried. The unit test caught
that.

So it is caught one layer up, in ConsumerOffsetCommitter, where the
exception still aborts before the success marking. Offsets stay dirty
and are genuinely re-committed next cycle. The commit response is sent
even on deferral, so waiting committers are released immediately rather
than waiting out offsetCommitTimeout for a commit that is not coming.

Net main-code change: 4 functional lines.

Found via the Chaos Pain Suite. W4 revoke-under-work went RED on every
highcpu run for days, across branches with no related changes. Both arms
failed, so it was not the cooperative variant's problem - but
cooperative rebalancing EXPOSES it, because cooperative members keep
committing during rebalances by design, which is exactly the race
window. The bug itself is long-standing and inherited from upstream: the
ladder arrived with 29795bf (upstream confluentinc#819) and no fork commit touched
it. Not fixed by #80, which was verified present in a run that still
went red.

Verified:
- chaos seed 8254214163208094917, the exact CI failure: RED -> GREEN
- CI chaos, both W4 arms green: 181 deferrals handled, 0 poll-thread
  deaths, 0 commit-response timeouts, 0 unclassified-failure assertions.
  The exception still fires 181 times - that is the point. It is meant
  to; it is just no longer fatal.
- MockConsumerRebalanceInProgressTest: broker-free reproducer that
  reduces a 2-minute chaos IT to a ~1-second unit test, failing in ~30s
  against unfixed code
- full reactor: 11 modules, 742 tests, 0 failures

The investigation is written up in
docs/plans/2026-08-01-001-investigate-chaos-w4-red-report.md, including
the load-starvation hypothesis it originally led with, recorded as
FALSIFIED rather than quietly dropped.

Follow-ups deliberately not in this PR, recorded in docs/inflight.md:
ConsumerManager.commitSync's CommitFailedException handler has the same
swallow-at-the-wrong-layer flaw (#108); commitAndWait interpolates
DEFAULT_TIMEOUT into an error whose actual wait is offsetCommitTimeout,
so every such message misstates it by 3x; and the highcpu lane's
concurrency saturates its own runners.

Relates to upstream confluentinc#857.

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Base automatically changed from fix/commit-rebalance-in-progress-kills-poll-thread to master August 3, 2026 04:21
@astubbs astubbs changed the title fix(core): a rejected commit is no longer recorded as a successful one fix(core): a commit rejected after leaving the group is no longer recorded as successful Aug 3, 2026
@astubbs
astubbs force-pushed the fix/commitfailed-marks-uncommitted-offsets-clean branch from 777dce9 to 66ae845 Compare August 3, 2026 04:54
@claude

claude Bot commented Aug 3, 2026

Copy link
Copy Markdown

Claude finished @astubbs's task in 3m 14s —— View job


Claude's review

Tasks

  • Gather context (diff, related files, CLAUDE.md)
  • Review ConsumerManager.java change
  • Review ConsumerOffsetCommitter.java change
  • Review CommitRejectionTestBase.java and MockConsumerCommitFailedTest.java
  • Review MockConsumerRebalanceInProgressTest.java refactor
  • Run tests to verify RED→GREEN claim (in progress)
  • Post final review

@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 added a commit that referenced this pull request Aug 4, 2026
…disabling all mutation testing (#110)

ProducerManagerTest.producedRecordsCantBeInTransactionWithoutItsOffsetDirect
failed roughly 1 run in 6, and PIT refuses to score any mutants while a test is
unstable without mutation - so that one race turned the whole Mutation (PIT,
scoped) lane red and nothing was measured. The visible cost was never "a test is
flaky"; it was that mutation testing measured nothing, and a green lane had
become a proxy for suite stability rather than mutation coverage. Second test to
do this - #101 fixed queuedMessagesNotProcessedOrCommittedIfSubmittedDuringShutdown
for the same reason.

The failure looked like an exactly-once bug. The commit captured offset=1 where
the test wants 2, AFTER both records had been produced - a transaction holding
two produced records while committing an offset saying the second was never
consumed, which is the literal EOS violation this test's name forbids. The
metadata was 'bgAA', the encoded incomplete-offset payload, so PC was not
confused: at that instant offset 1 genuinely was incomplete. It was asked at the
wrong moment. Worth taking seriously, because #100 and #108 were both "offsets
recorded as committed when they were not" and both looked like flaky tests
first; this one is on the producer path and could have been the third.

It is the test that creates the moment. It hand-rolled its user function,
acquired the produce lock against a MOCK context, and released it in its own
finally - inside the user function, before the wrapper's addToMailbox. That
opens a window where the produce lock is free but the work has not reached the
controller's inbound queue, so the controller takes the commit lock, drains a
mailbox missing the completion, and collects offsets one behind.

Production has no such window, and WorkContainer#onPostAddToMailBox states the
rule outright: unlock only once the work is safely back in the controller's
inbound queue, precisely so the commit lock cannot be acquired until those
offsets are in the commit payload. ParallelEoSStreamProcessor hands the lock to
the real context and release happens post-mailbox. The test was at neither
release point - and its own TODO said so: "this unlocks the produce lock too
early - should be after WC returned."

So the test now does what production does: acquire against the real context,
hand the lock to it, no manual unlock. No main-code change - the exactly-once
invariant was never violated in production.

Diagnosed by controlled experiment rather than by the fix appearing to work. An
identical 400ms delay injected AFTER the unlock failed 8/8; the same delay
BEFORE it passed 8/8. Same latency, opposite side of one call, which rules out
"the CI box is just slow" - the conclusion every previous look reached, and note
the timeouts had already been widened for PIT in 9e133ce and the flake survived
that.

Also adds a guard, because removing today's instance invites tomorrow's: the
test asserts the produce lock is still owned by the context when the user
function returns, since that ownership is what defers release to
onPostAddToMailBox. Reintroduce manual lock management and it fails
deterministically instead of returning as a 1-in-6 flake. Verified by negative
control - clearing the lock from the context makes the test fail.

Verified: 12/12 green against a ~1/6 baseline, full unit suite 371 tests with 0
failures, and PIT now gets past the stage that used to abort ("Calculated
coverage in 332 seconds" -> "Created 18 mutation test units", zero occurrences
of "did not pass without mutation").

Documentation carries the reasoning, not just the outcome:
docs/plans/2026-08-03-001-investigate-transactional-commit-flake.md has the full
investigation; docs/inflight.md's entry is retired (its original Mockito-race
diagnosis and its rerunFailingTestsCount suggestion were both wrong, and would
have aimed the next reader at the wrong cause and the wrong remedy); and the
double-unlock question this surfaced is promoted to a tracked item rather than
left as a footnote - onPostAddToMailBox and cleanUpContext both release the same
ProducingLock with nothing clearing it in between, which should throw
IllegalMonitorStateException and does not, and this fix now drives that path for
real where the mock-context version never did.

Two false negatives worth not repeating, both of which nearly sent this the
wrong way: ./mvnw -pl without -am fails the ReactorModuleConvergence enforcer, so
the first run of the experiment silently tested a stale class and showed no
effect; and surefire:test alone does not reprocess test resources, so a
logback-test.xml change never reaches target/test-classes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QqHpNSXC39ANv9kG1ZvUzn
astubbs and others added 2 commits August 4, 2026 13:06
…orded as successful

Kafka throws CommitFailedException when this consumer is no longer a member
of the group, so the commit was rejected outright. ConsumerManager.commitSync
caught it, logged that the poller would "seek commit later", and returned
normally - which is precisely why nothing ever did.

Returning normally lets AbstractOffsetCommitter.retrieveOffsetsAndCommit()
carry on to onOffsetCommitSuccess(), marking the offsets clean. Once PC
believes they are committed, collectCommitDataForDirtyPartitions() stops
offering them and no commit is ever attempted again.

This is the sibling of #100 and the opposite failure shape. #100 was loud and
fatal: the exception escaped, killed the broker-poll thread, and took the
instance down with a misleading commit-response timeout. This one is silent -
no exception, no dead thread, no stall, just PC's bookkeeping running ahead of
the broker. It surfaces later, when a partition changes hands and its new
owner resumes behind records PC had already recorded as done.

Fixed at the layer that already handles the rebalance case, since the layer is
the whole point - the same catch one frame lower is the bug:

  - ConsumerManager.commitSync: drop the catch, so the exception reaches above
    onOffsetCommitSuccess() rather than being resolved below it.
  - ConsumerOffsetCommitter.commitDeferringOnRebalance: catch it beside
    RebalanceInProgressException. Offsets stay dirty and are re-committed next
    cycle; waiting committers are still released, so nothing blocks.

The "Swallow" arm of that method's three-way javadoc is no longer hypothetical
and now names this code as the case in point.

MockConsumerCommitFailedTest verifies it broker-free, and is confirmed
discriminating: with the two source files reverted, commit attempts stall at
the rejection threshold and never resume. The stall IS the bug, so a "no
exception escaped" test would have passed against the broken code. It also
asserts the offsets are genuinely re-committed via mockConsumer.committed(),
rather than inferring it from the attempt count.

Both rejection tests are one scenario with one variable, so the duplicated
setup is extracted into CommitRejectionTestBase; each subclass supplies only
its exception, and a future third rejection reason has an obvious home.

Verified: full unit suite green across all 11 modules (371 tests), with both
rejection tests collected rather than silently skipped.

Relates to upstream confluentinc#857

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QqHpNSXC39ANv9kG1ZvUzn
…nd let it run ./mvnw

The grants added so the reviewer could run tests never matched anything.
--allowedTools entries are PREFIX matches, not globs, so Bash(bin/ci-unit-test.sh:*)
does not match ./bin/ci-unit-test.sh - and every natural invocation was denied.

The review on this PR is the evidence: 10 permission denials across 41 turns,
its own checklist left stopped at "Run tests to verify RED->GREEN claim (in
progress)", no final review posted - and the check still went green. A grant
that cannot match is worse than no grant, because it reads as a capability the
reviewer does not have, and the failure is silent at both ends.

Both spellings are now granted for every script. Enumerated per script rather
than written as Bash(./bin/*.sh:*), because that glob would not match either -
the same bug in a new coat.

./mvnw is granted too, for the one job the wrappers cannot do: running a single
test class. Verifying a RED/GREEN claim means reverting the fix and re-running
just the new test, which is a -Dtest run of seconds against a ~6 minute suite.
Without it, the most valuable check a reviewer can make - does this test
actually fail without the fix? - was unaffordable, and the earlier "no bespoke
mvnw grant" comment ruled it out on the grounds that a hand-rolled invocation
skips the group exclusions the wrappers pin. That objection is kept as guidance
instead: whole suite -> wrapper, always; ./mvnw only for a scoped -Dtest run,
whose result is never reported as "the suite is green". The system prompt says
so, and also tells the reviewer to restore anything it stashes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QqHpNSXC39ANv9kG1ZvUzn
@astubbs
astubbs force-pushed the fix/commitfailed-marks-uncommitted-offsets-clean branch from a4f0090 to 9b503ad Compare August 4, 2026 01:18
astubbs added a commit that referenced this pull request Aug 4, 2026
…ntirely

This was the generalisable lesson from #108's inflight note, which had to be
resolved away during the rebase onto master once #110 rewrote the entry it was
updating. The specific flake is fixed and documented; the pattern behind it was
about to be lost, so it moves here where it belongs.

PIT refuses to run while ANY test is unstable without mutation - it needs a green
baseline to attribute kills to mutants rather than noise. So one unrelated flake
does not degrade the signal, it switches the whole lane off: zero mutants scored
anywhere, regardless of which class flaked or whether it relates to the code
being mutated. That has happened twice, both times somewhere unrelated - #101's
shutdown-commit flake and #110's produce-lock flake.

Three consequences worth holding onto, now written down:

- The lane's green-ness has been tracking SUITE STABILITY, not mutation
  coverage. Weaker signal than the one we thought we had.
- rerunFailingTestsCount cannot rescue it. Surefire reruns hide a flake from the
  unit gate, but PIT does its own coverage run and sees the raw result, so a
  papered-over flake still kills mutation testing. It has to be fixed.
- A red mutation lane usually means "something somewhere is flaky" rather than
  anything about mutants - check for the "did not pass without mutation" line
  before investigating mutation config.

Filed as section 3.0 rather than appended, because it is a property of the lane
as a whole and precedes the specific complaints about scope and targets.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QqHpNSXC39ANv9kG1ZvUzn
@astubbs
astubbs merged commit 4e3fdbb into master Aug 4, 2026
22 of 29 checks passed
@astubbs
astubbs deleted the fix/commitfailed-marks-uncommitted-offsets-clean branch August 4, 2026 01:28
astubbs added a commit that referenced this pull request Aug 4, 2026
docs/inflight.md appeared in 26 of the last 30 master commits. Unrelated PRs
conflicted on it constantly - not because they disagreed, but because their notes
were adjacent, and the merge that resolves such a conflict silently drops one
side's update. It happened between #108 and #110.

So each item is now its own file under docs/inflight/, named <category>-<slug>.md.
Two PRs recording unrelated work touch disjoint files and cannot conflict, and
finishing work is `git rm` - a deletion, which never conflicts with an edit
elsewhere. The category prefix is the structure: `ls docs/inflight/` shows the
shape of what is open without opening anything.

No committed index. It would be edited by every PR, which is the problem this
directory exists to solve; docs/TODO_INDEX.md is the cautionary case, generated
and committed and stale until a reviewer caught it. `ls` and `grep -r` are the
index.

The rules that lived in the old file's header now live in docs/inflight/AGENTS.md,
where an agent will find them: delete a file when its work lands rather than
rewriting it into a FIXED narrative, delete it in the PR that resolves it rather
than leaving a "delete when #NN merges" marker, never record what gh or git can
answer, and record known defects here even when an issue exists.

This was parked on docs/inflight-as-directory with migrating ~600 lines of stale
entries named as the reason not to do it. This branch's audit already did that
work, which is why it is cheap now. That parked note is one of the entries the
split drops. docs/refactoring.md deliberately stays a single file - 2 of the last
30 commits touched it, so it has none of this problem.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Aug 4, 2026
…s stop colliding (#112)

The ledger had reached 677 lines and become a record of finished work. Entries
told to "delete when #98 merges" outlived three merges; the rebalance-commit fix
was still filed as awaiting PR after landing as #100; a static-state flake was
still listed as deliberately-unfixed after #101 fixed it at source. Meanwhile
#80, carrying the drain-zombie fix and the largest thing actually in flight,
appeared only as a footnote about quarantine ownership. The file's own scope rule
says entries vanish when work lands; it had stopped being applied.

Every surviving claim is now checked against GitHub, git and the code. Obsolete
entries are deleted rather than annotated: the jscpd cap is above baseline, no
workflow has path filters so the docs-only inconsistency cannot happen, the
ManagedPCInstance header carries its Modifications line, the CommitFailedException
follow-up shipped in #108, and the stacked-PR gap is closed by a new all-branches
ruleset. Upstream references now follow the convention the changelog already uses:
fork numbering reaches #111, so every bare reference at or above #162 was silently
upstream and read as ours.

With the content correct, the file became a directory. It appeared in 26 of the
last 30 master commits, so unrelated PRs conflicted on it constantly - not because
they disagreed, but because their notes were adjacent, and the merge that resolves
such a conflict silently drops one side (it happened between #108 and #110). Each
item is now its own file, named <category>-<slug>.md; two PRs recording unrelated
work touch disjoint files and cannot conflict, and finishing work is `git rm`,
which never conflicts with an edit elsewhere. The prefix is the structure - `ls
docs/inflight/` shows the shape of what is open without reading anything. There is
deliberately no committed index: it would be edited by every PR, which is the
problem the directory solves, and docs/TODO_INDEX.md is the cautionary case.

This was parked on docs/inflight-as-directory with "migrating ~600 lines of
existing entries" named as the reason not to do it. The audit is what made it
cheap. docs/refactoring.md stays a single file - 2 of the last 30 commits touched
it, so it has none of this problem.

The manifest had drifted the same way, which matters more, because it is the
declared source of truth that a future session trusts instead of re-deriving. Five
entries disagreed with reality: bug-857 recorded no fork PR while #29 was open,
#100 merged and #80 in review; fix-909 recorded no PR though #31 is open; bug-912
was in-progress when the schema's word for pushed-but-unPR'd is ready. Nothing
catches this - upstream-map.py validate only checks the schema and
upstream-sweep.sh only watches upstream, so "prs: []" beside an open PR passes
every check we have. Hence the AGENTS.md rule to update it at every lifecycle
transition, not only when starting.

Four rules now live in docs/inflight/AGENTS.md so they are inherited rather than
rediscovered: delete an entry in the PR that resolves it and never leave a "delete
when #NN merges" marker on master; never record what gh or git can answer, which
is why the open-PR table is gone; known code defects belong here even when an
issue exists, because an agent scans this directory and will not read the tracker;
and new guidance about how these notes are written goes into that file too.

Four deferred code items moved to docs/refactoring.md, where deferred work lives:
the SpotBugs thread-visibility findings, the produce-lock double release surfaced
by #110, the commitAndWait message that misstates its own wait, and jacoco's
single exec file under forked surefire.

Also shares the agent-tooling gitignore rules that until now existed only in one
checkout's .git/info/exclude, and deletes an empty duplicate-code-cross-check
clone - a git init that never fetched - rather than ignoring it.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Aug 6, 2026
…changed

Merging master brought three things that bear on this branch.

The issue-reference gate (735b1d3) flags a bare `#NN` below #1000 on added
lines, because the fork's numbers sit entirely inside confluentinc's range. This
branch added 12 such refs across javadoc, tests and the inflight note. Now
owner-qualified: #177/#100/#108/#186/#204 for the fork, confluentinc#833
for upstream. #177 is itself the mirror of confluentinc#833, so the pair
reads correctly. Left `// fixes github issue confluentinc#809` alone - it is a pre-existing
line, not one this PR adds, and rewriting it would be scope creep.

The SIGPIPE gate bug this PR diagnosed is FIXED on master (cb8b118) and guarded
repo-wide (7586b8c), so the inflight entry claiming it still needs its own PR
was stale. Rewritten as resolved, keeping the measurements and the lesson: the
failure is positional rather than size-monotonic, shellcheck does not catch it,
and small fixtures never reproduce it.

The manifest lost the backlink tooling and the `todo` subcommand, so this entry's
`forwarded:` block and `todo:` list were writing into fields nothing reads any
more. Dropped both; the release-time note moved into `notes:`, and `fork_issue:
177` added to match the shape master's entries now use.

Worth recording: cb8b118 called out check-quarantine-owners.sh as latent with
351 bytes of headroom "on a file two open PRs are adding lines to". This is one
of those PRs, and it takes AbstractParallelEoSStreamProcessor.java to 67,168
bytes - 1,632 past the 64 KiB buffer. Without that fix this branch would have
failed as "annotation missing".
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