Skip to content

fix(core) #155: stop the "Max loading factor steps reached" WARN on every control loop pass - #201

Open
astubbs wants to merge 6 commits into
masterfrom
fix/155-load-factor-noise
Open

fix(core) #155: stop the "Max loading factor steps reached" WARN on every control loop pass#201
astubbs wants to merge 6 commits into
masterfrom
fix/155-load-factor-noise

Conversation

@astubbs

@astubbs astubbs commented Aug 5, 2026

Copy link
Copy Markdown
Owner

Description

Fixes the log-noise half of #155, the fork mirror of
confluentinc/parallel-consumer#402:
isPoolQueueLow(): Max loading factor steps reached: 100/100, repeated forever.

The mechanism

AbstractParallelEoSStreamProcessor#checkPipelinePressure() runs on every control loop pass, and
logged that line at WARN, unrate-limited, whenever DynamicLoadFactor#isMaxReached() held. Two
configurations reach that state, and both spam:

  • A dynamic factor at its cap - the reported 100/100. Once the queue has been below target long
    enough to step 2 -> 100, the condition is permanent, so the line repeats for the life of the process.
  • A fixed factor - PCModule#initDynamicLoadFactor() builds DynamicLoadFactor(n, n) when
    messageBufferSize is set, so isMaxReached() is true from construction and the WARN fires from the
    first pass onwards. That is what the README's own PARTITION-ordering tuning advice tells people to
    configure, so following it earns you permanent log noise saying nothing is wrong.

Measured by the new test: 500 control loop passes produced 500 warnings, in both configurations.

The fix (reporting only - buffering behaviour is untouched)

  • DynamicLoadFactor#isStaticFactor() - true when the factor starts at its own ceiling
    (messageBufferSize, or initialLoadFactor == maximumLoadFactor). Such a factor never steps, so
    maybeStepUp() now short-circuits instead of engaging the cool-down/warm-up machinery, and the
    ceiling is reported at debug: the user asked for a fixed buffer, and getting one is not a warning.
    PCModule states the intent through a new DynamicLoadFactor.fixedAt(n) factory.
  • A dynamic factor at its cap still WARNs - it says the in-flight target will not grow any further,
    which a user may want to act on - but rate limited to once per 30s via the existing RateLimiter
    (as already used by BrokerPollSystem and ProcessingShard), and reworded so it reads as saturation
    and names what to change, rather than reading like a failure. Deliberately not demoted to debug:
    weakening a real signal is the wrong way to fix a volume problem.
  • Both messages name two numbers, each labelled: the pool queue target the queue was actually
    measured against (getPoolLoadTarget(), what isPoolQueueLow() compared), and the loaded in-flight
    target (target x factor) that raising the factor would grow. An earlier revision printed only the
    latter under the "queued vs" phrasing, which reported 0 queued vs 1008 for a check that had tested
    0 vs 16 - caught in review, and now asserted on by the tests.

To answer the original reporter's question directly: the message means PC has scaled its in-flight
target to the configured ceiling and will not ask for more. It is a saturation signal, not an error, and
on its own it does not explain a stall. The stall in that report was a separate defect, fixed in
confluentinc#547 / confluentinc#606 and further in the
confluentinc#857 family here (#119) - nothing in this PR touches it.

Tests

LoadFactorCeilingReportingTest (core, surefire, no broker) drives the real
checkPipelinePressure() pass 500 times through TestParallelEoSStreamProcessor and asserts on
captured log output:

  • fixedMessageBufferSizeDoesNotWarnOnEveryPass - with messageBufferSize set: the factor is confirmed
    static and maxed from construction (the diagnosed mechanism), and zero WARN/ERROR is emitted, with the
    condition still observable at debug. Reverting the fix turns this red with 500 warnings.
  • dynamicFactorAtCeilingWarnsOnceNotEveryPass - a dynamic factor sitting at its cap warns exactly
    once, with the reworded text. Reverting the fix turns this red: 500 instead of 1.
  • Both of the above also assert the reported numbers are the ones the code used - the pool target it
    compared against and the loaded target it named - which is the check that was missing when the
    wrong-target defect got in.
  • fixedFactorNeverSteps / factorWithHeadroomIsNotStatic - the isStaticFactor contract itself.

The load factor is wired through PCModule in both cases, not poked in afterwards. The class is
@Isolated + SAME_THREAD because it captures a class-wide logger (a first cut caught a sibling
test's output).

This PR is what would have tripped the SIGPIPE bug #211 fixed

Worth recording, since it is the concrete case the fix was reasoning about. bin/check-quarantine-owners.sh
piped a whole source file into grep -q under pipefail, which reports failure exactly when it
matches
once the file exceeds the 64 KiB pipe buffer. AbstractParallelEoSStreamProcessor.java sat at
65,185 bytes - 351 under the 65,536 limit. This PR takes it to 68,761 bytes, i.e. 3,225 bytes
over.

Reproduced on the merged tree: the old git show | grep -q form reports failure on 9 of 20 runs
against this branch's version of the file, and never against master's. The herestring form on master is
correct every time. Nothing to change here - the bug is already fixed, and bin/check-shell-sigpipe.sh
now guards the class repo-wide - but this branch is why the headroom mattered.

Note for whoever merges this: log-capture helper collision

This PR does not add a shared log-capture utility. Its capture is a handful of lines of
ListAppender private to LoadFactorCeilingReportingTest. Sibling PR #203
(fix/log-verbosity-batch) adds a reusable io.confluent.csid.utils.LogCapture for the same job.
Neither is on master, so they cannot be unified before one of them lands. Whichever of the two
merges second should delete its own copy and use the other's
- recorded in
docs/inflight/pr-blockers-and-collisions.md. If a duplication or similarity report flags the two, that
is the reason, and this is the agreed resolution.

Recommended merge strategy: squash

Per AGENTS.md -> PR Discipline. The branch is one idea - stop the ceiling report spamming the log - plus
a review fix-up, a manifest bookkeeping commit, a master merge and a convention sweep. None of those are
workstreams anyone would bisect to or revert independently, so re-cutting buys nothing and rebasing
as-is would put four commits on master where one belongs. Suggested squash message:

fix(core) astubbs#155: stop the "Max loading factor steps reached" WARN on every control loop pass

checkPipelinePressure() runs on every control loop pass and logged the
loading-factor ceiling at WARN with no rate limiting, so the condition -
which is a steady state, not an event - filled users' logs for the life
of the process. Setting messageBufferSize makes it worse: PCModule pins
the factor to its own ceiling, so the line fired from the very first
pass for a system configured exactly as the README advises. Measured at
500 warnings in 500 passes, in both configurations.

Only the reporting changes; the factor, the queue target and the step-up
rules are untouched.

A fixed factor now reports at debug. DynamicLoadFactor#isStaticFactor()
is true when the factor starts at its ceiling, so it can never step and
being "at max" carries no information - the user asked for a fixed
buffer and got one. maybeStepUp() short-circuits rather than engaging
the cool-down machinery, and PCModule states the intent through
DynamicLoadFactor.fixedAt(n).

A dynamic factor at its cap still warns - it says the in-flight target
will not grow further, which is worth acting on - but rate limited to
once per 30s via the existing RateLimiter, as BrokerPollSystem and
ProcessingShard already do, and reworded to read as saturation and name
what to change. Demoting it would have fixed the volume by discarding
the signal.

Both messages name the threshold the code actually compared - the
un-multiplied pool load target - alongside the loaded in-flight target
the factor scales, each labelled. An earlier cut printed only the latter
under "queued vs" phrasing and reported "0 queued vs 1008" for a check
that had tested "0 vs 16".

lastWorkRequestWasFulfilled becomes volatile: the test-visible setter
widens writes past the control thread that owns the field.

LoadFactorCeilingReportingTest drives the real checkPipelinePressure()
500 times through PCModule DI and asserts on captured log output,
including the reported numbers. Verified red before the fix in both
configurations.

Checklist

  • Docs updated - docs/inflight/pr-155-load-factor-noise.md (mechanism, why the dynamic WARN
    stays a WARN, the reported-numbers correction, and the loose end for merge time), the
    issue-402-max-load-factor-log-noise entry in upstream-map.yaml, and a docs/refactoring.md note
    on the untestable hard-coded step timings. No user-facing doc change: behaviour is unchanged.
    CHANGELOG.adoc deliberately untouched per AGENTS.md.
  • Tests added/updated - LoadFactorCeilingReportingTest, verified red before the fix.
  • Title & body reflect the final content of this PR
  • N/A - no CI runner or workflow changes.

astubbs and others added 2 commits August 5, 2026 16:20
…very control loop pass

checkPipelinePressure() runs on every control loop pass and logged
"isPoolQueueLow(): Max loading factor steps reached: {}/{}" at WARN with no rate
limiting whenever DynamicLoadFactor#isMaxReached() held. Two configurations reach
that state, and both spam the log for as long as the queue sits below target:

- a dynamic factor that has stepped up to its cap (the reported 100/100) - the
  condition is then permanent, so the line repeats for the life of the process;
- a FIXED factor - PCModule#initDynamicLoadFactor() builds DynamicLoadFactor(n, n)
  when messageBufferSize is set, so isMaxReached() is true from construction and the
  WARN fires from the very first pass. Following the README's own PARTITION-ordering
  tuning advice therefore earns permanent log noise saying nothing is wrong. Nobody
  had reported that half; it fell out of reading the code for the reported one.

The reporting changes; the buffering does not. The factor, the queue target and the
step-up rules are untouched.

DynamicLoadFactor now knows whether it is fixed (isStaticFactor(): it starts at its
own ceiling, via messageBufferSize or initialLoadFactor == maximumLoadFactor). Such a
factor cannot step, so maybeStepUp() short-circuits rather than running the
warm-up/cool-down checks, and the ceiling is reported at debug - the user asked for a
fixed buffer and got one, which is not a warning. PCModule says so through a new
DynamicLoadFactor.fixedAt(n) factory.

A DYNAMIC factor at its cap still warns: it means the in-flight target will not grow
any further, which a user may want to act on. Demoting it would fix the volume by
throwing away the signal. Instead it is rate limited to once per 30s with the
existing RateLimiter (as BrokerPollSystem and ProcessingShard already do) and reworded
to read as saturation - naming maximumLoadFactor/messageBufferSize as the thing to
change - rather than as a failure.

LoadFactorCeilingReportingTest drives the real pressure-check pass 500 times through
TestParallelEoSStreamProcessor with the load factor wired through PCModule, and
asserts on captured log output. Verified red before the fix: 500 warnings in the fixed
case (where zero is now correct) and 500 in the dynamic case (where 1 is now correct).

The stall in the original report is a different defect, fixed upstream (confluentinc#547/confluentinc#606) and
further in the confluentinc#857 family here (#119). This changes only what is logged.

Upstream-Issue: confluentinc#402
Forwarded: not-needed
Applied-Upstream: no

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RtNUsxokE9g2pSEjBHZqNA
…ise entry

The manifest is the source of truth for the fork side too, so the entry advances at
the transition that causes it - opening the PR - not at merge time.

Upstream-Issue: confluentinc#402

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RtNUsxokE9g2pSEjBHZqNA
@github-actions

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

Copy link
Copy Markdown

Claude Code is working…

I'll analyze this and get back to you.

View job run

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown

✅ Duplicate Code Report

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

✅ PMD CPD

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

No new clones introduced by this PR.

✅ jscpd (language-agnostic)

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

No new clones introduced by this PR.

Powered by astubbs/duplicate-code-cross-check

@claude

claude Bot commented Aug 5, 2026

Copy link
Copy Markdown

Claude finished @astubbs's task in 6m 0s —— View job


Claude's review of PR #201

Todo list

  • Gather context (PR diff, changed files)
  • Understand the request (code review)
  • Review changed files in detail
  • Run relevant tests to verify claims
  • Post final review feedback

Summary

The mechanism, fix design, and rationale in the PR description all check out against the code. I ran bin/check-copyright-headers.sh (0 violations) and the new LoadFactorCeilingReportingTest (./mvnw -pl parallel-consumer-core -am -Dtest=LoadFactorCeilingReportingTest test) — all 4 tests pass, and the class is genuinely collected by surefire (*Test.java pattern). Good structure: DynamicLoadFactor#isStaticFactor() is a clean, testable predicate, maybeStepUp() short-circuiting for a static factor is correct, and gating the dynamic-ceiling WARN behind the existing RateLimiter (already used elsewhere in the class) is the right amount of change — no new machinery invented.

Finding: the new messages report the wrong "target" number

AbstractParallelEoSStreamProcessor#reportLoadFactorAtCeiling() (lines 1163-1179) logs getQueueTargetLoaded() (i.e. getPoolLoadTarget() * currentFactor) as the "target" the queue is compared against, in both the new DEBUG and WARN branches. But the condition that actually triggered this code path — isPoolQueueLow() — compares the queue size against the un-multiplied getPoolLoadTarget() (line 1190). The existing sibling message right above it, the "stepped up loading factor" DEBUG log at line 1139, correctly uses getPoolLoadTarget() for the same "queue vs target" phrasing.

I confirmed this is a real discrepancy, not just a theoretical one, by instrumenting the actual test run:

  • Static/fixed-factor case: isPoolQueueLow()? workAmountBelowTarget true 0 vs 16 immediately followed by Queue is below its target (0 queued vs 1008) ... — the message's "target" (1008) is 63x the real threshold (16) the code just used.
  • Dynamic-at-ceiling case: isPoolQueueLow()? ... 0 vs 16 followed by the WARN ... queue is still below its target (0 queued vs 32) ... — again reporting 32 where the real threshold was 16.

Given the entire point of this PR is to make these messages trustworthy and non-confusing (the PR body specifically frames the WARN as something that should "read as saturation ... and name what to change"), a "target" number that's off by a factor of 2-100x from what the code actually checked undercuts that goal — a user comparing the logged numbers against ParallelConsumerOptions#targetAmountOfRecordsInFlight will see a mismatch and reasonably suspect a bug. Suggest swapping getQueueTargetLoaded() for getPoolLoadTarget() in the two new log lines (AbstractParallelEoSStreamProcessor.java:1166 and :1176) to match what isPoolQueueLow() actually compared. Neither new test asserts on the numeric values, so this wasn't caught by the added coverage.

Fix this →

Everything else checked out

  • Copyright headers: correct convention used throughout (Modifications Copyright... on touched upstream-derived files, plain fork header on the new test file) — verified with bin/check-copyright-headers.sh.
  • DynamicLoadFactor.isStaticFactor() (initial >= maximum): correctly implies isMaxReached() is permanently true for a static factor, so the debug/warn branch split in reportLoadFactorAtCeiling() is exhaustive and consistent.
  • Test design: driving the real checkPipelinePressure() through PCModule DI (rather than constructing DynamicLoadFactor standalone) is a good choice — it exercises the actual wiring, including the messageBufferSizeDynamicLoadFactor.fixedAt(n) path in PCModule. The SteppedToCeilingLoadFactor subclass-override-isMaxReached() trick to avoid waiting out real cool-down periods is reasonable given docs/refactoring.md's own note that the timings aren't injectable yet.
  • Rate limiter reuse: RateLimiter(30) matches the existing pattern (BrokerPollSystem, ProcessingShard), no new abstraction introduced.
  • Docs: docs/inflight/pr-155-load-factor-noise.md, the pr-blockers-and-collisions.md note about the LogCapture collision with fix/log-verbosity-batch, and the new upstream-map.yaml entry are all internally consistent and follow the schema of neighboring entries. CHANGELOG.adoc correctly left untouched per AGENTS.md.

No blocking issues beyond the message-content bug above — it's a reporting-only defect (no functional/behavioral risk) but worth fixing before merge since it's the exact kind of confusing-log-content this PR sets out to eliminate.

@github-actions

github-actions Bot commented Aug 5, 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/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java 30.3
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java 30.2

🔺 Increased similarities

File A File B Base (%) PR (%) Change
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 31.1 32.3 +1.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.4 40.6 +0.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 32.4 32.7 +0.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 37.1 37.3 +0.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 36.8 37.0 +0.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 45.5 45.7 +0.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 32.6 32.8 +0.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 50.7 50.8 +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.7 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 61.0 61.1 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java 35.5 35.6 +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.8 54.9 +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.7 32.8 +0.1
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/ChaosScenarioBase.java 38.0 38.1 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 31.4 31.5 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 30.2 30.3 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 31.6 31.7 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 33.9 34.0 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionStateManager.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/WorkManager.java 39.6 39.7 +0.1
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/BrokerPollSystem.java 33.4 33.4 +0.1

...and 12 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.37
parallel-consumer-core/src/test/java/io/confluent/csid/utils/CollectionUtils.java 33.3
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.55
parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java 35.37
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.17 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 40.04
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCRetriableException.java 36.81
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 36.56
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 34.93
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 34.85
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 34.85
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 33.75
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 61.09 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 54.87 ⚠️
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 40.63
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 37.27
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 32.78
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 31.54
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java 30.24
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 61.09 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelEoSStreamProcessor.java 50.8 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 36.96
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 32.66
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 31.71
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 30.29
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/PCModule.java 30.27
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.81
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 32.98
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.17 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 52.85 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 44.48
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 34.52
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 33.25
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 30.61
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 30.53
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 30.53
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.12
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.87 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 50.8 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 45.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 34.0
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 32.39
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 32.27
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.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 37.27
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 36.96
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 32.83
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java 35.56
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContextInternal.java 32.23
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 34.0
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java 33.17
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 32.78
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PollContext.java 32.23
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 31.71
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/RecordContextInternal.java

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 33.44
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.67
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.25 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 52.85 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 50.63 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 48.59
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 40.04
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 39.39
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 36.78
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 33.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 33.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/PCRetriableException.java 32.98
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 39.39
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 31.24
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 30.61
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.72
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 30.27
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 30.24
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 51.3 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 37.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 37.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 36.78
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 34.93
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 34.52
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 32.47
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.25 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 51.3 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 48.11
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 46.88
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 46.88
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 46.46
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 44.48
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 36.56
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalRuntimeException.java 31.24
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.59
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 46.46
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 45.12
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 37.84
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 37.84
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.63 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 48.11
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 45.12
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 33.75
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 33.25
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 32.47
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 31.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 31.2
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.24 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 46.88
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 37.84
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 37.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 34.85
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 33.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 31.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 30.53
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.24 ⚠️
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/EncodingNotSupportedException.java 46.88
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/NoEncodingPossibleException.java 37.84
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 37.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ExceptionInUserFunctionException.java 34.85
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/InternalException.java 33.42
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/offsets/OffsetDecodingError.java 31.2
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelConsumerException.java 30.53
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.35
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/state/PartitionStateManager.java

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

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

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

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

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

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

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

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

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

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

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

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/BrokerPollSystemDrainTest.java 31.18
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.03
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 55.41 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 46.91
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 38.62
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.13
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.62
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.43
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.43
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.64 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 46.91
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 41.09
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.64 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 55.41 ⚠️
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 44.13
parallel-consumer-vertx/src/test-integration/java/io/confluent/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 39.18
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 48.78
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 38.1
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 30.19
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 48.88
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 48.88
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 35.6
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 30.19
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java

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

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

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/BrokerIntegrationTest.java 30.5
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.55
parallel-consumer-core/src/main/java/io/confluent/csid/utils/Java8StreamUtils.java 33.3
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.03
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.66
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.01
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java 44.25
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.38
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 32.26
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java

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

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorBatchTest.java 52.0 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyBatchTest.java 50.7 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 44.84
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/BatchTestBase.java 30.66
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.09 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 56.45 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 49.19
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java 32.26
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.09 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 54.89 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 52.64 ⚠️
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.64 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 49.19
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java 46.55
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerCommitTimeoutTest.java 56.45 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerEarlyCloseTest.java 54.89 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/MockConsumerSaslAuthenticationTest.java 46.55
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CommitRejectionTestBase.java 32.38
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.7
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.7
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.01
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java 33.37
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineRegistryScriptTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CheckQuarantineOwnersScriptTest.java 44.25
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/QuarantineLaneReportScriptTest.java 33.37
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.3 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java 89.63 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java 89.63 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/BrokerPollSystemDrainTest.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/io/confluent/parallelconsumer/integrationTests/DrainingMemberRebalanceIT.java 31.18
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.1
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.1
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.72
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/internal/ProducerManagerTest.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ProducerManager.java 30.5
parallel-consumer-core/src/test/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 32.27
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java

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

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

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

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

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

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

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

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

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

File Similarity (%)
parallel-consumer-reactor/src/main/java/io/confluent/parallelconsumer/reactor/ReactorProcessor.java 52.02 ⚠️
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 78.97 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 50.7 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 49.07
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyPCTest.java

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

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

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

File Similarity (%)
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorTest.java 32.43
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.08
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.09 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java 90.42 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java 89.63 ⚠️
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.02 ⚠️
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 78.97 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/CoreBatchTest.java 52.0 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java 50.32 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/ReactorPCTest.java

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

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

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

File Similarity (%)
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/MutinyTest.java 32.43
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.08
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.09 ⚠️
parallel-consumer-mutiny/src/test/java/io/confluent/parallelconsumer/mutiny/TestConventionsArchTest.java 90.42 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java 89.63 ⚠️
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.18
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 40.63
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 39.69
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java 35.01
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 32.66
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.69
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/VertxParallelStreamProcessor.java 39.21
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/ParallelStreamProcessor.java 32.83
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelEoSStreamProcessor.java 31.54
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/JStreamParallelStreamProcessor.java 30.29
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.35
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 41.18
parallel-consumer-core/src/main/java/io/confluent/parallelconsumer/internal/ExternalEngine.java 39.67
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.35
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 39.21
parallel-consumer-vertx/src/main/java/io/confluent/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 35.01
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.18
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.09 ⚠️
parallel-consumer-reactor/src/test/java/io/confluent/parallelconsumer/reactor/TestConventionsArchTest.java 91.09 ⚠️
parallel-consumer-core/src/test/java/io/confluent/parallelconsumer/TestConventionsArchTest.java 90.3 ⚠️
parallel-consumer-vertx/src/test/java/io/confluent/parallelconsumer/vertx/VertxBatchTest.java

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

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

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown

✅ SpotBugs Report

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

astubbs added a commit that referenced this pull request Aug 5, 2026
…constraint in the ledger

Both were only in the PR body, which is not where a future session looks. The
duplicate-code gate cannot catch the LogCapture collision with #201 - it diffs
each PR against master, and neither copy is on master yet - so the "whichever
merges second drops its copy" resolution has to be written down.

Also records why UserFunctionFailureLoggingTest is @isolated, and which two
shutdown tests go intermittent if that is ever removed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RtNUsxokE9g2pSEjBHZqNA
…ared

Review found the new ceiling messages printing getQueueTargetLoaded()
(in-flight target x loading factor) as the target the executor pool queue
was "below", when the branch is entered by isPoolQueueLow() comparing the
queue against the un-multiplied getPoolLoadTarget(). In the fixed-factor
case that reported "0 queued vs 1008" for a check that actually tested
"0 vs 16" - 63x out, in the exact messages this PR exists to make
trustworthy.

Both numbers matter, so both are now reported and each is labelled: the
pool queue target is what the queue was measured against, the loaded
target is the in-flight buffer that raising the factor would grow. This
also matches the sibling "stepped up loading factor" debug line.

LoadFactorCeilingReportingTest now asserts on the values in both the
debug and warn messages - not asserting on them is what let this
through.

Also makes lastWorkRequestWasFulfilled volatile. Adding the test-visible
setter widened writes past the control thread that owns the field, and
SpotBugs was right to flag it (AT_STALE_THREAD_WRITE_OF_PRIMITIVE, new
vs base). The field is touched once per control loop pass, so the barrier
is free; verified the finding is gone from spotbugsXml.xml locally.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RtNUsxokE9g2pSEjBHZqNA
@astubbs

astubbs commented Aug 5, 2026

Copy link
Copy Markdown
Owner Author

Review response

Replying at PR level because there are no inline review threads to reply into - the review landed as a
single top-level comment (gh api repos/.../pulls/201/comments and the GraphQL reviewThreads query
both return empty). Nothing to resolve; everything below is addressed in d2ec57f.

1. "the new messages report the wrong target number" - agreed, fixed in d2ec57f

Correct, and worth catching. isPoolQueueLow() compares the executor pool queue against the
un-multiplied getPoolLoadTarget(), so that is the number the "queued vs" phrasing has to name.
Printing getQueueTargetLoaded() there reported 0 queued vs 1008 for a check that had just tested
0 vs 16 - exactly the kind of untrustworthy log line this PR exists to remove.

One refinement on the suggested fix. Both numbers are worth having, so rather than dropping the loaded
target I labelled them separately:

Loading factor has reached its maximum (2/100) and the executor pool queue is still below its target
(0 queued vs 16), so the in-flight target of 32 records will not grow further. This is a saturation
signal, not an error: raise ParallelConsumerOptions#maximumLoadFactor or #messageBufferSize to buffer
more records. Repeats are suppressed for 30s.

16 is now what was compared (matching isPoolQueueLow() and the sibling "stepped up loading factor"
debug line); 32 is getQueueTargetLoaded(), which is the number that actually moves when you take the
message's own advice and raise maximumLoadFactor. Dropping it would have left the remediation
unquantified. The debug branch got the same treatment.

You also correctly identified why it got through - neither test asserted on the values. Both now do,
via assertReportsTheThresholdItActuallyTested, which checks the message names the pool target and the
loaded target, and first asserts the two differ so the check cannot pass vacuously. With the old code
the assertion fails.

2. SpotBugs AT_STALE_THREAD_WRITE_OF_PRIMITIVE (not in the review, but new on this PR)

The SpotBugs annotation flagged lastWorkRequestWasFulfilled as a new finding vs base. That is a fair
call and is on me: the field was only ever written by the control thread until this PR added
@Setter(PROTECTED) for the test, which widens the write to whatever thread the test runs on with no
visibility guarantee. Made it volatile in d2ec57f - it is touched once per control loop pass, so the
barrier is not measurable. Verified locally: mvn -Pci compile spotbugs:spotbugs no longer reports it
against AbstractParallelEoSStreamProcessor (the two remaining AT_STALE_THREAD_WRITE_OF_PRIMITIVE
instances, in ConsumerManager and RetryQueue, are pre-existing baseline).

3. Log-capture helper duplication - deliberate, do not unify yet

Flagging this before a report does. This PR keeps its ListAppender capture inline and private to
LoadFactorCeilingReportingTest; PR #203 (fix/log-verbosity-batch) adds a reusable
io.confluent.csid.utils.LogCapture for the same job. Neither exists on master, so neither can import
the other. Whichever merges second deletes its own copy and uses the other's - recorded in
docs/inflight/pr-blockers-and-collisions.md and now stated in the PR body so the merger sees it.
Deleting this one now would just leave the PR with no way to capture a log line.

4. claude-review red - gate race, not a finding

The gate failed with "no comment on this PR cites run 30974902530", but the review comment does cite
that run: it was created at 04:22:14Z and updated with the final review body at 04:28:31Z, and the
gate read the comment list at 04:28:32.34Z - one second later, and it got a stale body. So the check
is correct in principle and the review genuinely landed; it lost a race by about a second. Left the gate
untouched - it should go green on the next run.

Everything else

No disagreement with the rest of the review. The design points it confirmed - isStaticFactor() as a
predicate, maybeStepUp() short-circuiting, reusing RateLimiter rather than inventing rate-limiting
machinery, and keeping the dynamic-at-ceiling case a WARN rather than demoting it - are unchanged.

@claude

claude Bot commented Aug 5, 2026

Copy link
Copy Markdown

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


Claude's review of the follow-up fix (commit d2ec57f)

Todo list

  • Gather context (diff since last review, new commit d2ec57f)
  • Verify the "wrong target number" fix
  • Verify the SpotBugs volatile fix
  • Verify the new/updated assertions in LoadFactorCeilingReportingTest
  • Run LoadFactorCeilingReportingTest to confirm it passes
  • Post final review feedback

Summary

Both items from my previous review are correctly resolved in d2ec57f.

1. Wrong target number — fixed correctly. reportLoadFactorAtCeiling() (AbstractParallelEoSStreamProcessor.java:1168-1189) now reports getPoolLoadTarget() for the "queued vs" comparison (matching what isPoolQueueLow() actually tested, and the sibling debug line at 1143-1144) and separately labels getQueueTargetLoaded() as "the in-flight target ... records" — the number that grows if maximumLoadFactor/messageBufferSize is raised. This is a better fix than the one I suggested (which would have dropped the loaded-target number); keeping both, each correctly labelled, is more useful and still accurate.

I ran the test to confirm, both by reading the new assertion and by executing it:

./mvnw -pl parallel-consumer-core -am -Dtest=LoadFactorCeilingReportingTest test

4/4 tests pass. Captured log output for the fixed-factor case confirms the numbers now line up:

isPoolQueueLow()? workAmountBelowTarget true 0 vs 16;
Executor pool queue is below its target (0 queued vs 16), ... in-flight target stays at 1008 records.

0 vs 16 is what the code compared, and the message now says 16, not 1008. The new assertReportsTheThresholdItActuallyTested helper is a good addition — it also asserts the two numbers differ first, so it can't pass vacuously, and it's applied to both the debug and warn branches.

2. SpotBugs AT_STALE_THREAD_WRITE_OF_PRIMITIVE — fixed correctly. lastWorkRequestWasFulfilled is now volatile (AbstractParallelEoSStreamProcessor.java:275), with a comment explaining why (the test-visible @Setter(PROTECTED) widened writes beyond the control thread that owns the field). Field is only touched once per control loop pass, so this is the right, minimal fix — no need for anything heavier (e.g. an AtomicBoolean).

Other checks:

  • bin/check-copyright-headers.sh: 0 violations.
  • docs/inflight/pr-155-load-factor-noise.md was updated with an accurate account of the mismatch and the fix — consistent with the code.
  • Log format strings: verified placeholder count matches argument count in both the debug (4 {} / 4 args) and warn (6 {} / 6 args) branches — no [ERROR] ... too many arguments risk from SLF4J's varargs.
  • The PR-level response to review point 4 (claude-review gate race) is a plausible, verifiable explanation (timestamps ~1s apart) and not something for me to re-litigate here.

No further issues found. This is ready from my side.

@astubbs

astubbs commented Aug 5, 2026

Copy link
Copy Markdown
Owner Author

Scope note for whoever picks this up

This PR deliberately does not close #155, and there is no closing link in the description. On merge, #155 stays open. Intentional.

Done here: the log-noise half. The WARN no longer fires every control-loop pass - a fixed factor (set via messageBufferSize) reports its ceiling at debug because it can never step, and a dynamic factor genuinely at its cap still WARNs but is rate-limited to once per 30s via the existing RateLimiter.

Not done, deliberately: the underlying load-factor behaviour is unchanged. The argument in this PR is that you must not change buffering behaviour to silence a log line, so the dynamic-at-cap case keeps its signal rather than being demoted. If a user is genuinely pinned at 100/100, their in-flight work still cannot grow - the message now says so once every 30s instead of continuously, but the condition is real.

Decision needed before #155 is closed by hand: whether #155 was ever about more than the noise. If it was only ever the log spam, re-scope and close it. If the saturation behaviour itself needs work, that is a separate issue and should be opened before #155 is closed, or it will be lost.

Also note for a reviewer: the LogCapture-style test capture here is a few inline ListAppender lines private to LoadFactorCeilingReportingTest, not the shared class added by #203. Whichever of #201/#203 merges second reconciles - the reconciliation is smaller than both PR bodies originally implied.

astubbs and others added 2 commits August 6, 2026 15:30
Brings in the repo-hygiene workflow whose two new required checks
(shell: sigpipe, workflows: action versions) this branch predated, so the
PR was blocked waiting on contexts it could never produce.

Conflict: src/docs/development/upstream-map.yaml. #211 slimmed the
schema (dropped `forwarded`, `todo`, `backlink`, the long-tail DEFERRED
block and scripts/upstream-backlink.sh) and mirrored every open
confluentinc issue into this fork. Resolved by taking master's file whole
and re-adding the issue-402-max-load-factor-log-noise entry in the new
shape: `forwarded`/`todo` dropped (no tooling reads them now), the
backlink action folded into notes, `fork_issue: 155` recorded now that
confluentinc#402's mirror exists, and every issue reference qualified by
repo per the new house rule. scripts/upstream-map.py validate passes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RtNUsxokE9g2pSEjBHZqNA
#211 made a bare `#NN` below #1000 a CI failure on added lines:
the fork's numbers sit entirely inside confluentinc's range, so an
unqualified reference is a coin flip. Three added lines in
docs/inflight/pr-155-load-factor-noise.md tripped the gate; the javadoc
in AbstractParallelEoSStreamProcessor and LoadFactorCeilingReportingTest
passed only via the "upstream confluentinc#402" escape hatch, which the same commit
deprecates in favour of naming the owner. Both now say
#155 / confluentinc#402.

Also moves the "answer the original reporter when this merges" note out
of upstream-map.yaml and into the inflight doc. AGENTS.md is explicit
that the manifest has no todo: field and loose ends belong in
docs/inflight/ - the field was already dropped when the manifest was
slimmed, so leaving the note there would have been an entry no tooling
reads.

Verified with .github/scripts/issue-ref-gate.js over this branch's diff
against master: clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RtNUsxokE9g2pSEjBHZqNA
@astubbs

astubbs commented Aug 6, 2026

Copy link
Copy Markdown
Owner Author

Merged master in; three things it changed here

Merged origin/master (through c6fff83) to pick up .github/workflows/repo-hygiene.yml - this branch
predated it, so the two new required contexts (shell: sigpipe, workflows: action versions) could
never be produced and the PR was blocked waiting on statuses that would never arrive. Both now run and
pass.

1. One conflict, in src/docs/development/upstream-map.yaml. #211 slimmed the manifest -
dropped forwarded, todo and backlink, deleted the long-tail DEFERRED block and
scripts/upstream-backlink.sh, and mirrored all 78 open confluentinc issues into this fork. Resolved by
taking master's file whole and re-adding the issue-402-max-load-factor-log-noise entry in the new
shape: forwarded/todo gone (nothing reads them now), fork_issue: 155 recorded now that
confluentinc#402's mirror exists, and refs qualified by repo.
scripts/upstream-map.py validate passes - 15 entries, no schema errors.

The todo: I had was a real loose end (answer the original reporter when this merges), so it moved to
docs/inflight/pr-155-load-factor-noise.md rather than being dropped - AGENTS.md is explicit that the
manifest has no todo: field and loose ends live in docs/inflight/.

2. The new issue-reference gate fires on this PR, so I fixed it. Three added lines in
docs/inflight/pr-155-load-factor-noise.md carried bare #155 / #857. The javadoc in
AbstractParallelEoSStreamProcessor and LoadFactorCeilingReportingTest passed only via the
upstream #402 escape hatch, which #211 deprecates in favour of naming the owner - both now say
astubbs#155 / confluentinc#402. Verified by running .github/scripts/issue-ref-gate.js over this
branch's diff against master: clean.

3. This PR is the change that would have tripped the SIGPIPE bug. Recording it because it is the
concrete case. AbstractParallelEoSStreamProcessor.java was 65,185 bytes against the 65,536-byte pipe
buffer - 351 bytes of headroom
. This branch takes it to 68,761 bytes, 3,225 over. Reproduced on
the merged tree: the old git show … | grep -q form under pipefail reports failure - on a file that
matches - in 9 of 20 runs against this branch's version, and never against master's. The
herestring fix is correct every time. Nothing to change here, the bug is already fixed and
bin/check-shell-sigpipe.sh guards the class repo-wide, but the 351-byte margin was about to go.

Nothing else from master required changes

bin/check-shell-sigpipe.sh, bin/check-action-versions.sh and bin/todo-index.sh --check all pass
unchanged - this PR touches no shell scripts, no workflows and adds no TODO markers. #198's
CHANGELOG/README corrections don't overlap (this PR deliberately doesn't touch CHANGELOG.adoc), and
16ac63b's metric-await fix is in MultiInstanceMetricsTest, which this PR doesn't go near. Master did
not touch AbstractParallelEoSStreamProcessor, DynamicLoadFactor or PCModule, so the fix itself is
unaffected; LoadFactorCeilingReportingTest is 4/4 green on the merged tree.

LogCapture, re-checked as asked: still accurate. Neither this PR's inline ListAppender nor
#203's shared io.confluent.csid.utils.LogCapture is on master - confirmed by
git ls-tree -r origin/master | grep LogCapture, which finds nothing. Merge-second-drops-its-copy
stands, and the PR body says so.

Also added a recommended merge strategy to the PR body, per the rule c6fff83 just added: squash,
with the full message written out.

… of the index

Two things #211/#212 surfaced in this PR's own files.

#212's lesson - await/assert the thing itself, never a proxy - has
an adjacent shape here worth naming. fixedMessageBufferSizeDoesNotWarnOnEveryPass
asserts NO warnings, which would pass vacuously if the appender were ever
attached to the wrong logger. It is not vacuous today, because the debug
assertion below it can only hold when the capture is live and pointed at
the code under test - but nothing said so, and the two are separable by a
well-meaning edit. Now they are commented as a pair, pointing at the
write-up.

The test needed no other change: it is fully synchronous, driving 500
checkPipelinePressure() passes on the test thread and reading the appender
after, so there is no await to get wrong.

Also rewords the upstream-map note that said "this manifest has no todo:
field". bin/todo-index.sh read the literal marker and wanted to index it,
which is the gate working - the fix is to stop writing a marker in prose,
not to regenerate the index around a false entry.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RtNUsxokE9g2pSEjBHZqNA
@astubbs

astubbs commented Aug 6, 2026

Copy link
Copy Markdown
Owner Author

Follow-up: #212's lesson checked against this PR's tests, and one gate false-positive fixed

Two additions since the merge comment above, in f0e3a0e.

#212 ("await the metric, not a counter that leads it") - checked, no overlap, but one adjacent
shape named.
LoadFactorCeilingReportingTest has no await at all: it drives 500
checkPipelinePressure() passes on the test thread and reads the appender afterwards, all synchronous,
so there is no proxy-await to get wrong. The generalised rule does have a cousin here though.
fixedMessageBufferSizeDoesNotWarnOnEveryPass asserts that no warnings were emitted, and a negative
assertion passes vacuously if the appender is attached to the wrong logger. It is not vacuous today -
the isNotEmpty() debug assertion below it can only hold when the capture is live and pointed at the
code under test - but nothing said so, and a well-meaning edit could separate them. Now commented as a
pair, citing the write-up. No assertion changed.

bin/todo-index.sh --check caught my own prose. My upstream-map.yaml note read "this manifest has
no todo: field", and the indexer read the literal marker and wanted to index it - a new entry under
src/docs/development, in the tracked-marker count. That is the gate working correctly on a genuine
false positive of my making, so the fix is to stop writing a marker in prose, not to regenerate the
index around a bogus entry. Reworded; --check is clean.

Gate status on the merged tree, all run locally: issue-ref-gate.js over this branch's diff -
clean; bin/todo-index.sh --check - up to date; bin/check-shell-sigpipe.sh - ok;
bin/check-action-versions.sh - ok; bin/check-copyright-headers.sh - 0 violations;
scripts/upstream-map.py validate - 15 entries, no schema errors; LoadFactorCeilingReportingTest -
4/4. git rev-list --count HEAD..origin/master is 0, so this is on current master, not a stale copy.

@claude

claude Bot commented Aug 6, 2026

Copy link
Copy Markdown

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


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

Todo list

  • Gather context (diff since last review, latest commits f0e3a0e / 1ff2792)
  • Re-review the two most recent commits (issue-ref qualification, negative-assertion comment)
  • Spot-check earlier-reviewed code is still intact after the master merge
  • Run LoadFactorCeilingReportingTest
  • Post final review feedback

Summary

Both items from my previous two reviews (wrong-target-number fix, volatile fix for lastWorkRequestWasFulfilled) are unchanged and still correct after the origin/master merge. This pass covers what's new since then: the master merge itself (dc03a07c) and two follow-up commits, 1ff2792a and f0e3a0e7. Neither touches the fix's logic.

1ff2792a — issue-reference qualification, docs-only. Requalifies bare #155/#402 references to astubbs#155 / confluentinc#402 in docs/inflight/pr-155-load-factor-noise.md, the javadoc @see on reportLoadFactorAtCeiling() (AbstractParallelEoSStreamProcessor.java:1165), and the class javadoc on LoadFactorCeilingReportingTest. Also relocates the "answer the original reporter" loose end from upstream-map.yaml into the inflight doc, consistent with the manifest schema not having a todo: field. No code change, no test change. Checked the diff directly — no functional lines touched.

f0e3a0e7 — one added comment in LoadFactorCeilingReportingTest, plus a doc-wording tweak. Documents why the two negative assertions (assertThat(...WARN...).isEmpty() / ...ERROR...isEmpty() at lines ~81-82) must stay adjacent to the positive debug assertion below them — a vacuous-pass risk if a future edit separated them from what anchors them. I confirmed the referenced doc exists: docs/solutions/test-flakiness/vacuous-await-condition-brokerpoller-backpressure-2026-07-31.md. This is a comment-only change (plus the same upstream-map.yaml todo-marker wording fix, verified bin/todo-index.sh --check is clean on the current tree). No assertion logic changed, so this doesn't affect what the test actually verifies — it's purely guarding against future regression via a well-intentioned edit.

Re-verified the core fix is intact post-merge. reportLoadFactorAtCeiling() still reports getPoolLoadTarget() for the "queued vs" number (matching what isPoolQueueLow() actually compared) and separately labels getQueueTargetLoaded() as the in-flight target that grows if the factor is raised — the fix from d2ec57f7 that resolved my original finding. DynamicLoadFactor.isStaticFactor()/fixedAt() and PCModule#initDynamicLoadFactor() are unchanged from what I reviewed before, and still correct: staticFactor = initial >= maximum, maybeStepUp() short-circuits before touching the cool-down machinery, PCModule now expresses the fixed-buffer case via DynamicLoadFactor.fixedAt(n) rather than a bare two-arg constructor call.

Verification run on the current tree (f0e3a0e7):

  • ./mvnw -pl parallel-consumer-core -am -Dtest=LoadFactorCeilingReportingTest test → 4/4 pass. Captured log output still shows the corrected numbers (e.g. isPoolQueueLow()? ... 0 vs 16 immediately followed by ... below its target (0 queued vs 16) ... in-flight target stays at 1008 records — no mismatch).
  • bin/check-copyright-headers.sh → 0 violations (233 files checked), including the new Modifications Copyright (C) 2026 Antony Stubbs and contributors lines added to DynamicLoadFactor.java and PCModule.java.
  • bin/todo-index.sh --check → up to date.

No new issues found. This PR is ready from my side.

astubbs added a commit that referenced this pull request Aug 6, 2026
…overlap

Two things master now requires that this branch predates.

Issue references: the new gate in .github/scripts/issue-ref-gate.js flags an
unqualified #NN below #1000 on added lines, because the fork's numbers sit
entirely inside confluentinc's range and a bare number resolves against
whichever repo the reader is in. This branch added 21 such references. They are
now astubbs#NN / confluentinc#NN per AGENTS.md, which also asks new writing to
name the owner rather than say "upstream".

upstream-map.yaml: AGENTS.md now states the manifest has no `todo:` field -
loose ends belong in docs/inflight/. This entry carried the only `todo:` key in
the file; dropped.

Separately, the #201 overlap was overstated here and needed correcting on
the facts rather than restating. #201 has no LogCapture class at all - it
has the same logic inline and private to LoadFactorCeilingReportingTest. So
there is no symmetric "whichever merges second deletes its copy": this branch
adds the only such class, nothing here needs deleting in either merge order, and
the single follow-up is converting that one inline block onto LogCapture.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RtNUsxokE9g2pSEjBHZqNA
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