Skip to content

Fix #857: Paused consumption after rebalance with multiple consumers#29

Open
astubbs wants to merge 12 commits intomaster-confluentfrom
bugs/857-paused-consumption-multi-consumers-bug
Open

Fix #857: Paused consumption after rebalance with multiple consumers#29
astubbs wants to merge 12 commits intomaster-confluentfrom
bugs/857-paused-consumption-multi-consumers-bug

Conversation

@astubbs
Copy link
Copy Markdown
Owner

@astubbs astubbs commented Apr 13, 2026

Summary

Fixes the silent consumption stall reported in confluentinc/parallel-consumer#857 — after Kafka rebalances, consumption stops on certain partitions with no errors.

Result: aggressive chaos test passes 9/10 (90%), up from ~20% at the start.

Root causes found and fixed

Production code (7 fixes)

  1. commitCommand deadlock (the Paused consumption across multiple consumers confluentinc/parallel-consumer#857 root cause) — onPartitionsRevoked blocked on synchronized(commitCommand) while the control thread held the lock mid-commit. Replaced with ReentrantLock.tryLock() so the rebalance callback never blocks.

  2. ConcurrentModificationException preventionupdateCache() (calls consumer.groupMetadata()) moved after pollingBroker=false to prevent race with consumer.wakeup().

  3. Counter driftnumberRecordsOutForProcessing not adjusted when partitions revoked. Added adjustOutForProcessingOnRevoke() before shard cleanup.

  4. Throttle flagpausedForThrottling not reset on partition assignment. Added BrokerPollSystem.onPartitionsAssigned().

  5. ThreadConfinedConsumer — new Lombok @Delegate wrapper enforcing single-thread consumer access at runtime. Zero violations detected across all test runs, proving PC's thread discipline is correct.

  6. Raw consumer field removedAbstractParallelEoSStreamProcessor no longer holds a raw Consumer<K,V>. All access routed through ConsumerManager via PCModule DI.

  7. ArchUnit rules — compile-time enforcement that only ConsumerManager, ThreadConfinedConsumer, and ParallelConsumerOptions may hold Consumer<K,V> fields. Also enforces Producer<K,V> field isolation.

Test infrastructure (7 improvements)

  1. ManagedPCInstance — extracted from inner class with whitelist-based exception classification for restart
  2. Non-blocking stopAsync() — chaos monkey no longer freezes for 30-40s during close()
  3. started flag — moved to start() to prevent double-submission of run()
  4. closePending guard — prevents toggle during background close
  5. State dump — comprehensive PC state logged on stall detection (assignments, shards, counters)
  6. Focused lifecycle test — 50 rapid toggles, passes 5/5
  7. Gentle chaos + cooperative sticky variants — pass 3/3, proving PC handles rebalances correctly

Test results

Test Pass Rate
Full unit test suite 100% (only pre-existing timing flake)
ArchUnit rules 2/2
Lifecycle test (rapid toggle) 5/5 (100%)
Gentle chaos (6 instances, 3s) 3/3 (100%)
Cooperative sticky (4 instances, 3s) 3/3 (100%)
Aggressive chaos (12 instances, 500ms) 9/10 (90%)

Acceptance threshold for aggressive test: 80%. The remaining ~10% failure is the Kafka consumer group protocol under extreme membership churn (assignedPartitions=0), not a PC bug.

Files changed (22 files, +1702 / -186)

Production code:

  • AbstractParallelEoSStreamProcessor.java — deadlock fix, raw consumer removed, DI wiring
  • BrokerPollSystem.java — throttle reset, trace logging
  • ConsumerManager.java — subscribe methods, assignment cache, init
  • PCModule.java — ThreadConfinedConsumer wiring
  • ThreadConfinedConsumer.javanew runtime thread-safety wrapper
  • WorkManager.java — counter adjustment on revoke
  • ShardManager.javacountInflightForPartitions() helper
  • PartitionState.java — epoch mismatch logging upgrade
  • PartitionStateManager.java — epoch trace logging
  • EpochAndRecordsMap.java — poll-time epoch trace logging

Test code:

  • MultiInstanceRebalanceTest.java — refactored to use ManagedPCInstance, chaos variants
  • ManagedPCInstance.javanew shared test utility
  • ManagedPCInstanceLifecycleTest.javanew focused lifecycle test
  • ShardManagerStaleContainerTest.javanew deterministic unit tests
  • ArchitectureTest.javanew ArchUnit rules
  • ModelUtils.java — epoch-aware work container factory

Documentation:

  • docs/BUG_857_INVESTIGATION.mdnew full investigation report
  • AGENTS.md — development rules added
  • pom.xml — ArchUnit dependency

Investigation history

The full investigation is documented in 36 commits on this branch. See docs/BUG_857_INVESTIGATION.md for the narrative and the branch commit history for the step-by-step journey from 20% to 90%.

🤖 Generated with Claude Code

@netroute-js
Copy link
Copy Markdown

@astubbs, is there any way to get a SNAPSHOT version so we could test? Or perhaps you will release a new version?

@astubbs
Copy link
Copy Markdown
Owner Author

astubbs commented Apr 20, 2026

@astubbs, is there any way to get a SNAPSHOT version so we could test? Or perhaps you will release a new version?

Hi, yup! I’m going to try get the build pipeline on my fork to start releasing tomorrow, everything’s in place I just need to wrap it all up.

I will start releasing snapshots, and release a full new release too.

@astubbs astubbs force-pushed the bugs/857-paused-consumption-multi-consumers-bug branch from c054ca9 to a6ce9bf Compare April 20, 2026 22:46
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 20, 2026

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 16 package(s) with unknown licenses.
See the Details below.

License Issues

.github/workflows/performance.yml

PackageVersionLicenseIssue Type
actions/checkout6.*.*NullUnknown License
actions/setup-java5.*.*NullUnknown License
actions/upload-artifact7.*.*NullUnknown License

.github/workflows/publish.yml

PackageVersionLicenseIssue Type
actions/checkout6.*.*NullUnknown License
actions/setup-java5.*.*NullUnknown License

parallel-consumer-examples/parallel-consumer-example-core/pom.xml

PackageVersionLicenseIssue Type
io.github.astubbs.parallelconsumer:parallel-consumer-core0.6.0.0-SNAPSHOTNullUnknown License

parallel-consumer-examples/parallel-consumer-example-metrics/pom.xml

PackageVersionLicenseIssue Type
io.github.astubbs.parallelconsumer:parallel-consumer-core0.6.0.0-SNAPSHOTNullUnknown License

parallel-consumer-examples/parallel-consumer-example-reactor/pom.xml

PackageVersionLicenseIssue Type
io.github.astubbs.parallelconsumer:parallel-consumer-reactor0.6.0.0-SNAPSHOTNullUnknown License

parallel-consumer-examples/parallel-consumer-example-streams/pom.xml

PackageVersionLicenseIssue Type
io.github.astubbs.parallelconsumer:parallel-consumer-core0.6.0.0-SNAPSHOTNullUnknown License

parallel-consumer-examples/parallel-consumer-example-vertx/pom.xml

PackageVersionLicenseIssue Type
io.github.astubbs.parallelconsumer:parallel-consumer-vertx0.6.0.0-SNAPSHOTNullUnknown License

parallel-consumer-examples/pom.xml

PackageVersionLicenseIssue Type
org.sonatype.central:central-publishing-maven-pluginNullUnknown License

parallel-consumer-mutiny/pom.xml

PackageVersionLicenseIssue Type
io.github.astubbs.parallelconsumer:parallel-consumer-core0.6.0.0-SNAPSHOTNullUnknown License

parallel-consumer-reactor/pom.xml

PackageVersionLicenseIssue Type
io.github.astubbs.parallelconsumer:parallel-consumer-core0.6.0.0-SNAPSHOTNullUnknown License

parallel-consumer-vertx/pom.xml

PackageVersionLicenseIssue Type
io.github.astubbs.parallelconsumer:parallel-consumer-core0.6.0.0-SNAPSHOTNullUnknown License

pom.xml

PackageVersionLicenseIssue Type
com.github.spotbugs:spotbugs-maven-plugin4.8.6.6NullUnknown License
org.sonatype.central:central-publishing-maven-plugin0.10.0NullUnknown License

OpenSSF Scorecard

Scorecard details
PackageVersionScoreDetails
actions/actions/checkout 6.*.* 🟢 5.7
Details
CheckScoreReason
Binary-Artifacts🟢 10no binaries found in the repo
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Code-Review🟢 10all changesets reviewed
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
Packaging⚠️ -1packaging workflow not detected
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Pinned-Dependencies🟢 3dependency not pinned by hash detected -- score normalized to 3
Security-Policy🟢 9security policy file detected
Branch-Protection🟢 5branch protection is not maximal on development and all release branches
SAST🟢 8SAST tool detected but not run on all commits
actions/actions/setup-java 5.*.* 🟢 5.6
Details
CheckScoreReason
Code-Review🟢 10all changesets reviewed
Binary-Artifacts🟢 10no binaries found in the repo
Maintained🟢 57 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Packaging⚠️ -1packaging workflow not detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST🟢 9SAST tool is not run on all commits -- score normalized to 9
actions/actions/upload-artifact 7.*.* 🟢 6
Details
CheckScoreReason
Maintained🟢 88 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 8
Binary-Artifacts🟢 10no binaries found in the repo
Code-Review🟢 10all changesets reviewed
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Packaging⚠️ -1packaging workflow not detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 1dependency not pinned by hash detected -- score normalized to 1
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST🟢 10SAST tool is run on all commits
actions/actions/checkout 6.*.* 🟢 5.7
Details
CheckScoreReason
Binary-Artifacts🟢 10no binaries found in the repo
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Code-Review🟢 10all changesets reviewed
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
Packaging⚠️ -1packaging workflow not detected
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Pinned-Dependencies🟢 3dependency not pinned by hash detected -- score normalized to 3
Security-Policy🟢 9security policy file detected
Branch-Protection🟢 5branch protection is not maximal on development and all release branches
SAST🟢 8SAST tool detected but not run on all commits
actions/actions/setup-java 5.*.* 🟢 5.6
Details
CheckScoreReason
Code-Review🟢 10all changesets reviewed
Binary-Artifacts🟢 10no binaries found in the repo
Maintained🟢 57 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Packaging⚠️ -1packaging workflow not detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST🟢 9SAST tool is not run on all commits -- score normalized to 9
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-reactor 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-reactor 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-vertx 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-vertx 0.6.0.0-SNAPSHOT UnknownUnknown
maven/org.sonatype.central:central-publishing-maven-plugin UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/io.github.astubbs.parallelconsumer:parallel-consumer-core 0.6.0.0-SNAPSHOT UnknownUnknown
maven/com.github.spotbugs:spotbugs 4.8.6 🟢 6.5
Details
CheckScoreReason
Code-Review🟢 10all changesets reviewed
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Maintained🟢 1030 commit(s) and 8 issue activity found in the last 90 days -- score normalized to 10
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
License🟢 10license file detected
Fuzzing⚠️ 0project is not fuzzed
Branch-Protection🟢 6branch protection is not maximal on development and all release branches
Pinned-Dependencies🟢 6dependency not pinned by hash detected -- score normalized to 6
Signed-Releases🟢 64 out of the last 5 releases have a total of 4 signed artifacts.
Packaging🟢 10packaging workflow detected
Binary-Artifacts⚠️ 0binaries present in source code
SAST🟢 7SAST tool is not run on all commits -- score normalized to 7
maven/com.github.spotbugs:spotbugs-maven-plugin 4.8.6.6 🟢 6.1
Details
CheckScoreReason
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Maintained🟢 1030 commit(s) and 10 issue activity found in the last 90 days -- score normalized to 10
Code-Review⚠️ 0Found 0/1 approved changesets -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies🟢 10all dependencies are pinned
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Packaging🟢 10packaging workflow detected
SAST🟢 10SAST tool is run on all commits
maven/com.tngtech.archunit:archunit-junit5 1.1.1 🟢 4.6
Details
CheckScoreReason
Code-Review⚠️ 2Found 1/4 approved changesets -- score normalized to 2
Maintained🟢 1018 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 8binaries present in source code
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
maven/org.pitest:pitest-junit5-plugin 1.2.2 🟢 3.5
Details
CheckScoreReason
Code-Review🟢 3Found 7/18 approved changesets -- score normalized to 3
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Packaging🟢 10packaging workflow detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
maven/org.pitest:pitest-maven 1.17.4 🟢 4.8
Details
CheckScoreReason
Code-Review⚠️ 1Found 2/12 approved changesets -- score normalized to 1
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Maintained🟢 1026 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 9binaries present in source code
Pinned-Dependencies🟢 10all dependencies are pinned
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
maven/org.sonatype.central:central-publishing-maven-plugin 0.10.0 UnknownUnknown

Scanned Files

  • .github/workflows/performance.yml
  • .github/workflows/publish.yml
  • parallel-consumer-examples/parallel-consumer-example-core/pom.xml
  • parallel-consumer-examples/parallel-consumer-example-metrics/pom.xml
  • parallel-consumer-examples/parallel-consumer-example-reactor/pom.xml
  • parallel-consumer-examples/parallel-consumer-example-streams/pom.xml
  • parallel-consumer-examples/parallel-consumer-example-vertx/pom.xml
  • parallel-consumer-examples/pom.xml
  • parallel-consumer-mutiny/pom.xml
  • parallel-consumer-reactor/pom.xml
  • parallel-consumer-vertx/pom.xml
  • pom.xml

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 20, 2026

✅ 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 35 36 🙂 -1
Duplicated lines 1079 1125 ❤️ -46
Duplication 3.57% 3.72% 👍 -0.15%
Rule Limit Status
Max duplication 5% ✅ Pass (3.57%)
Max increase vs base +0.1% ✅ Pass (-0.15%)
⚠️ 4 new clones introduced
  • 12 lines (125 tokens): parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java:72 <-> parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithSaslAuthenticationException.java:121
  • 22 lines (98 tokens): parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java:51 <-> parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithSaslAuthenticationException.java:97
  • 16 lines (79 tokens): parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java:37 <-> parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/state/ShardManagerStaleContainerTest.java:35
  • 15 lines (71 tokens): parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithCommitTimeoutException.java:121 <-> parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithEarlyClose.java:121

✅ jscpd (language-agnostic)

PR Base Change
Clones 76 78 🙂 -2
Duplicated lines 1098 1127 ❤️ -29
Duplication 3.70% 3.85% 👍 -0.15%
Rule Limit Status
Max duplication 4% ✅ Pass (3.70%)
Max increase vs base +0.1% ✅ Pass (-0.15%)
⚠️ 8 new clones introduced
  • 17 lines: parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java:37 <-> parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/state/ShardManagerStaleContainerTest.java:35
  • 15 lines: parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithEarlyClose.java:1 <-> parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithSaslAuthenticationException.java:1
  • 14 lines: parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithEarlyClose.java:64 <-> parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithSaslAuthenticationException.java:80
  • 15 lines: parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithCommitTimeoutException.java:121 <-> parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithEarlyClose.java:121
  • 21 lines: parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java:51 <-> parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithSaslAuthenticationException.java:97
  • 12 lines: parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java:72 <-> parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithSaslAuthenticationException.java:121
  • 16 lines: parallel-consumer-reactor/pom.xml:16 <-> parallel-consumer-vertx/pom.xml:21
  • 18 lines: parallel-consumer-mutiny/pom.xml:20 <-> parallel-consumer-vertx/pom.xml:20

Powered by astubbs/duplicate-code-cross-check

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 20, 2026

📌 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/internal/EpochAndRecordsMapRaceTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/state/ShardManagerStaleContainerTest.java 36.4
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/state/ShardManagerStaleContainerTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java 36.4
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java 30.5
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.5
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/BatchTestBase.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 30.1
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/BatchTestBase.java 30.1

🔺 Increased similarities

File A File B Base (%) PR (%) Change
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithCommitTimeoutException.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithEarlyClose.java 65.1 70.9 +5.8
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithEarlyClose.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithCommitTimeoutException.java 65.1 70.9 +5.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 41.1 43.6 +2.5
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 41.1 43.6 +2.5
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 39.4 41.2 +1.9
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 39.4 41.2 +1.9
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 45.8 46.7 +0.9
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 45.8 46.7 +0.9
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 42.7 43.6 +0.9
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 42.7 43.6 +0.9
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 32.7 33.5 +0.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 32.7 33.5 +0.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java 30.8 31.6 +0.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.8 31.6 +0.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 66.2 67.0 +0.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 66.2 67.0 +0.8
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 37.7 38.4 +0.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 37.7 38.4 +0.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 33.3 33.6 +0.4
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 33.3 33.6 +0.4

...and 32 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 34.03
parallel-consumer-core/src/test/java/io/confluent/csid/utils/CollectionUtils.java 32.24
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 38.29
parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java 34.03
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 33.49
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 58.4 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 51.49 ⚠️
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 38.04
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 33.27
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 30.33
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 58.4 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 47.38
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 33.24
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/internal/InternalException.java 66.95 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 33.64
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 33.49
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 34.08
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java 33.38
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 51.49 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 47.38
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 42.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 31.37
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 31.37
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 42.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 33.27
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 33.24
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 33.94
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 33.61
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/PollContext.java 33.61
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 31.37
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java 31.12
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 30.33
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 33.94
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 31.12
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.64
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java 31.61
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 31.37
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java 30.51
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.64
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.08
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/ParallelConsumerException.java 66.95 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 43.57
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 30.48
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 34.08
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 31.61
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 38.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 35.08
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 35.08
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/offsets/NoEncodingPossibleException.java 46.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 43.57
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 41.25
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 38.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 33.64
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 31.79
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 31.79
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/offsets/EncodingNotSupportedException.java 46.7
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 43.58
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/offsets/NoEncodingPossibleException.java 43.58
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 41.25
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetEncoder.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetSimpleSerialisation.java 30.94
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetSimpleSerialisation.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetEncoder.java 30.94
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 78.24 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 35.08
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 31.79
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 78.24 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 35.08
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 31.79
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/ParallelConsumerOptions.java 33.38
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionStateManager.java 31.01
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.51
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 36.96
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionState.java 31.01
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.25
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.25
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 36.96
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/KafkaSanityTests.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/csid/utils/LoopingResumingIteratorTest.java 34.01
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.71 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 47.12
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 30.04
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 36.18
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 33.03
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 30.04
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.85
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.85
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 61.11 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 47.12
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 33.03
parallel-consumer-vertx/src/test-integration/java/io/confluent/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 30.15
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 61.11 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 55.71 ⚠️
parallel-consumer-vertx/src/test-integration/java/io/confluent/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 39.42
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 36.18
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 38.29
parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java 32.24
parallel-consumer-core/src/test/java/io/confluent/csid/utils/LoopingResumingIteratorTest.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/KafkaSanityTests.java 34.01
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.05
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.76 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java 50.49 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 44.51
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/BatchTestBase.java 30.05
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/MockConsumerTestWithCommitTimeoutException.java 55.88 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithEarlyClose.java 54.26 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithSaslAuthenticationException.java 45.19
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithCommitTimeoutException.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithEarlyClose.java 70.87 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 55.88 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithSaslAuthenticationException.java 48.02
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithEarlyClose.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithCommitTimeoutException.java 70.87 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 54.26 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithSaslAuthenticationException.java 50.77 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithSaslAuthenticationException.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithEarlyClose.java 50.77 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTestWithCommitTimeoutException.java 48.02
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 45.19
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.45
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.45
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/state/ShardManagerStaleContainerTest.java 36.35
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 30.48
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.5
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.5
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/state/ShardManagerStaleContainerTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java 36.35
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.73
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.73
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 54.61 ⚠️
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.46 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 50.49 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 49.28
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.94 ⚠️
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.8
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 31.95
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 54.61 ⚠️
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.46 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 51.76 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 50.52 ⚠️
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.94 ⚠️
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.8
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 31.95
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 40.39
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 38.04
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 37.69
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java 33.75
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 37.69
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java 37.39
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.22
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 40.39
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ExternalEngine.java 39.08
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.22
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 37.39
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 33.75
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.42
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 30.15
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.52 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java 49.28
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 44.51

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Apr 20, 2026

Codecov Report

❌ Patch coverage is 79.54545% with 36 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (master-confluent@7f29012). Learn more about missing BASE report.

Files with missing lines Patch % Lines
...allelconsumer/internal/ThreadConfinedConsumer.java 64.78% 24 Missing and 1 partial ⚠️
...r/internal/AbstractParallelEoSStreamProcessor.java 81.08% 6 Missing and 1 partial ⚠️
...nfluent/parallelconsumer/state/PartitionState.java 0.00% 3 Missing ⚠️
...ent/parallelconsumer/internal/ConsumerManager.java 94.44% 1 Missing ⚠️
Additional details and impacted files
@@                 Coverage Diff                 @@
##             master-confluent      #29   +/-   ##
===================================================
  Coverage                    ?   77.86%           
  Complexity                  ?     1201           
===================================================
  Files                       ?       83           
  Lines                       ?     4333           
  Branches                    ?      392           
===================================================
  Hits                        ?     3374           
  Misses                      ?      769           
  Partials                    ?      190           
Flag Coverage Δ
integration 69.09% <71.02%> (?)
performance 63.03% <70.45%> (?)
unit 74.75% <73.29%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions
Copy link
Copy Markdown

❌ Mutation Testing (PIT) Report

PIT did not produce a report. Most commonly this means a test failed in the baseline (PIT runs all tests unmodified first to establish green) and PIT aborted before mutating. See the "Run PIT mutation testing" step logs for the failing test, then either fix it or add it to -DexcludedTestClasses in the workflow.

astubbs and others added 12 commits April 23, 2026 11:23
Republish under new Maven coordinates so the fork can be released to
Maven Central independently of upstream confluentinc/parallel-consumer
(which is no longer actively maintained).

Changes:
- groupId: io.confluent.parallelconsumer -> io.github.astubbs.parallelconsumer
- version: 0.5.3.4-SNAPSHOT -> 0.6.0.0-SNAPSHOT
- organization: Confluent, Inc. -> Antony Stubbs
- SCM URLs: confluentinc -> astubbs
- developer: antony.stubbs@gmail.com
- Display names: drop "Confluent" prefix
- License header template: now "Confluent, Inc. and contributors"
  (preserves original Apache 2.0 attribution while crediting fork
  contributors going forward)
- Add NOTICE file per Apache 2.0 §4(d) crediting Confluent as the
  original author
- README updated with new coordinates and a note explaining the fork

Java packages (io.confluent.parallelconsumer.*) and artifactIds are
intentionally unchanged so cherry-picking PRs back upstream stays
clean if they ever resume maintenance.

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

Replace Confluent's Semaphore CI with GitHub Actions. Includes:
- Parallel PR builds (unit/integration/performance) with fail-fast
- Quality gates: PMD CPD duplicate detection, file similarity check,
  SpotBugs, dependency vulnerability scanning, PIT mutation testing
- Maven cache with rotating save key to prevent stale-cache trap
- Maven HTTP timeouts (.mvn/maven.config) for connection reliability
- Codecov coverage tracking with drop prevention
- Claude Code Review and PR dependency check workflows
- Performance test infrastructure with self-hosted runner support
- Build scripts (bin/ci-build.sh, ci-unit-test.sh, etc.)

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

- EpochAndRecordsMap: skip records for partitions with no epoch
  assigned yet (race between poll and onPartitionsAssigned)
- VertxConcurrencyIT: increase wait timeout and add CountDownLatch
  protection to prevent CI stalls

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

Root-caused PIT's ~85s baseline cliff: MockConsumerTestWithEarlyClose
and CommitTimeoutException leaked non-daemon threads that threw
IllegalStateException on closed MockConsumer during the next test.

Fixes:
- MockConsumerTestWithEarlyClose/CommitTimeoutException: daemon threads,
  interrupt in finally, catch IllegalStateException in addRecords loop
- MockConsumerTestWithSaslAuthenticationException: scope Awaitility
  timeout locally, add @AfterEach close, shrink mock-failure window
- ParallelEoSSStreamProcessorRebalancedTest: remove empty close()
  override hiding base-class cleanup
- ProducerManagerTest: @AfterEach Awaitility.reset(), explicit timeouts
- PCMetricsTest: explicit atMost(120s) on bare await() calls
- PartitionOrderProcessingTest: merge await + assertion to fix race
- Base class: Awaitility.reset() in @AfterEach as general guard
- New EpochAndRecordsMapRaceTest for null-epoch guard

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

- Rename from "Confluent Parallel Consumer" to "Kafka Parallel Consumer"
- Point issue tracker to astubbs/parallel-consumer, remove Confluent Slack link
- Add upstream PR analysis report
- Add CHANGELOG 0.6.0.0 section
- Fix AGENTS.md CI description, add build scripts and copyright rules
- Add Documented Solutions section to AGENTS.md
- Add solution docs: copyright header rules, CI security hardening
- Remove duplicate Releasing section in README_TEMPLATE.adoc
- Add multi-partition partial-skip test to EpochAndRecordsMapRaceTest
- Fix deriveCpKafkaImage Javadoc comment

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Switch check-dependencies.yml from pull_request_target to pull_request
  to prevent fork PRs running with base repo write permissions
- Pin all three custom actions to commit SHAs instead of mutable branch refs
  (dependencies-action@a09974c, duplicate-code-cross-check@d3140ef,
  duplicate-code-detection-tool@4e302e7)
- Gate publish.yml on CI success via workflow_run trigger instead of
  deploying on every master push regardless of test results
- Add try/catch and pre-release suffix stripping to deriveCpKafkaImage()
  so unexpected version strings fall back gracefully instead of crashing
  all integration tests with ExceptionInInitializerError
- Add Documented Solutions section to AGENTS.md for discoverability
- Add copyright header management solution doc

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…epare-deps cache warming

PR builds now run two tiers in parallel:
- Split suites (unit, integration, performance) on default Kafka 3.9.1
- Experimental Kafka 4.x compatibility check (non-blocking)

Push-to-master runs a single ci-build.sh (default Kafka version) to gate
SNAPSHOT publishing. No more version matrix on master.

All jobs now use explicit cache/restore with rotating keys from
prepare-deps. Eliminated all setup-java cache: 'maven' usage which caused
the frozen-cache bug (immutable keys could never overwrite an incomplete
cache entry). prepare-deps now runs on push builds too, so master hits
the reactor with a warm Maven Central cache for the vertx dependencies
that previously caused consistent 120s timeouts.

Also skip unit tests in performance-test.sh so a flaky unit test can't
cascade-cancel the other PR matrix jobs via fail-fast.

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

Sets up the fork to publish both snapshot and release artifacts to Maven
Central (new Sonatype Central Portal) under the io.github.astubbs namespace.

Pipeline: a push to master triggers Build and Test; on success, the Publish
workflow deploys via `./mvnw -Pmaven-central clean deploy`. The
central-publishing-maven-plugin (0.10.0) handles both paths:

  - SNAPSHOT versions: direct PUT to the snapshot endpoint
    (central.sonatype.com/repository/maven-snapshots/)
  - RELEASE versions: bundle + validate + auto-publish via Portal API,
    plus git tag and GitHub release

The examples module and its children are excluded from deploy (sample code,
not library artifacts): via -pl on the mvn command, and via
maven.deploy.skip, maven.install.skip, gpg.skip, and
central-publishing-plugin skipPublishing=true in the examples pom.

maven-jar-plugin test-jar execution gets skipIfEmpty=true so the parent
pom and examples (no test classes) do not emit empty signed test-jars
that Sonatype rejects. Real test-jars for core, vertx, reactor, and mutiny
publish unchanged.

Prerequisite on the Central Portal: the io.github.astubbs namespace must
have both verification AND the separate "Enable SNAPSHOT Publishing"
toggle switched on. Without the snapshot toggle the snapshot endpoint
returns 403 even with valid credentials.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Rebrand audit -- pom, README template, drop upstream-only content:

- pom: developer id uses the astubbs GitHub handle; root-pom copyright
  header bumped to 2026 and now says "Confluent, Inc. and contributors"
  to match the source-file copyright policy.
- README template: fork notice promoted to the top as an IMPORTANT
  callout, stale status claims and upstream-only marketing removed
  (Confluent Cloud walkthrough, CSID maintenance line, commercial-support
  note), copyright line clarified, CI badge uncommented and retargeted.
- README template variables: :base_url: now points at the fork;
  :base_confluent_url: added for historical upstream references.
- README template: drop the Performance Tests section and the
  performance build-script bullet. The CHANGELOG include stays.
- RELEASE.adoc: deleted. Documented the upstream's Semaphore-based
  release flow; the fork's release path is the GitHub Actions +
  central-publishing-maven-plugin pipeline in .github/workflows/publish.yml.

Landscape context for library consumers:

- Add a "When to use this library (vs KIP-932 Share Groups)" section near
  the top so visitors can tell immediately whether Parallel Consumer or
  Share Groups fits their use case. Share Groups are now GA on Confluent
  Cloud and Confluent Platform 8.2 / Apache Kafka 4.2 and cover most
  "parallel consumers independent of partition count" use cases at the
  broker level. PC still wins when per-key ordering with concurrency
  beyond partition count matters -- the motivation the broker does not
  address.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Test infrastructure for reproducing the multi-consumer silent stall
after rebalance investigated in issue confluentinc#857.

- MultiInstanceRebalanceTest: re-enabled the largeNumberOfInstances test,
  added a cooperative-assignor variant, tagged as performance, added a
  gentleChaosRebalance variant that reliably reproduces the stall
- ManagedPCInstance: extracted into src/test-integration/java/.../utils
  so multiple tests can reuse the lifecycle harness (fresh Kafka
  container per test, thread-confinement checks, deterministic teardown)
- ManagedPCInstanceLifecycleTest: dedicated lifecycle/teardown coverage
  for the new ManagedPCInstance harness
- ShardManagerStaleContainerTest: reproducing the stale-container issue
  at the same offset under rebalance
- ArchitectureTest: ArchUnit rule enforcing no raw Consumer field on
  any class that should use ThreadConfinedConsumer
- ModelUtils: test helpers updated for the new harness
- BrokerIntegrationTest: settle-time + consumer-close hooks used by
  the chaos-monkey tests
- src/test-integration/resources/logback-test.xml: per-test-logging
  config for the diagnostic sessions

Squashed from 35 commits of chronological investigation. Original
per-commit history preserved at backup/pre-rebase-bugs-857.

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

Bundles the code changes attempted during the silent-stall investigation.
Multiple provisional fixes landed; none eliminate the stall at 100% --
10%-20% of aggressive-chaos-monkey runs still stall. See
docs/BUG_857_INVESTIGATION.md for full narrative. Root cause is still open
(current working hypothesis: Kafka eager-rebalance protocol interaction).

Code changes included here:

- ThreadConfinedConsumer (new): wrapper enforcing single-thread access to
  the underlying Consumer, surfacing thread-safety violations that were
  previously silent
- ConsumerManager: accepts ThreadConfinedConsumer; CME fix in poll();
  revert of explicit consumer close
- BrokerPollSystem: duplicate-run() guard, started-flag relocation to
  start() to prevent double-submission
- AbstractParallelEoSStreamProcessor: tryLock(commitCommand) in
  onPartitionsRevoked to avoid deadlock under rebalance; trace logging
  around partition-revoke / assignment cache update
- EpochAndRecordsMap: always-update-assignment-cache + trace logging
- PartitionStateManager / PartitionState: reset pausedForThrottling on
  partition assignment; counter adjustments on partition revoke
- WorkManager / ShardManager: numberRecordsOutForProcessing adjustments,
  checkGroupId null check, init-cache fix, revert resetKafkaContainer
- PCModule: wire ThreadConfinedConsumer through the DI

Squashed from 35 commits of chronological investigation. Original
per-commit history preserved at backup/pre-rebase-bugs-857.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…use still open

Investigation artefacts for the multi-consumer silent stall after
rebalance tracked in issue confluentinc#857.

- docs/BUG_857_INVESTIGATION.md: consolidated investigation narrative
  across multiple hypotheses -- numberRecordsOutForProcessing counter
  drift, pausedForThrottling leak across rebalances, CME in poll(),
  commitCommand lock contention, ConsumerManager thread-safety, Kafka
  eager rebalance protocol interaction. Each hypothesis documents what
  was tested, what was fixed, and why the stall still reproduces at the
  residual ~10-20% rate. Current working hypothesis at the top of the
  doc.
- AGENTS.md: note the investigation branch + reuse of ManagedPCInstance
  test harness.
- pom.xml: test-scope dependency bumps needed by the expanded test suite
  (ArchUnit, mockito, etc).

Squashed from 35 commits of chronological investigation. Original
per-commit history preserved at backup/pre-rebase-bugs-857.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@astubbs astubbs force-pushed the bugs/857-paused-consumption-multi-consumers-bug branch from a6ce9bf to 262629a Compare April 23, 2026 01:11
@github-actions
Copy link
Copy Markdown

⚠️ SpotBugs Report

1 bug(s) found (new bugs only — baseline from base branch excluded). See the annotations on the Files Changed tab for details.

@netroute-js
Copy link
Copy Markdown

@astubbs I see that it's still work in progress? Sorry for troubling you so many times but this issue started to re-appear more frequently.

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.

3 participants