Skip to content

test(soak) astubbs#119: any retry-forever instance eventually stops fetching, at a threshold you can compute - #487

Merged
astubbs merged 10 commits into
masterfrom
bugs/857-intake-stall-under-always-failing-key
Sep 9, 2026
Merged

astubbs merged 10 commits into
masterfrom
bugs/857-intake-stall-under-always-failing-key

Conversation

@astubbs

@astubbs astubbs commented Sep 8, 2026 •

Copy link
Copy Markdown
Owner

Serves #175 (confluentinc#809) and #119 (confluentinc#857).

Description

#471's soak found that a single instance under KEY ordering, with records
that throw on every attempt, stops taking new work inside the first minute: successes freeze while
the failure rate holds exactly constant. It named one untested candidate - the record-intake load
gate, on the theory that inShards counts records queued behind a blocked shard head - and said one
run reading the gate's own DEBUG line would settle it. Three ran. The hypothesis is half right, and
the half that is wrong is the mechanism it named.

The arms - each differing from the first by exactly one term

Six minutes rather than thirty (ten for arm 4, whose whole question is when), because the stall is reached in the first second. Same seed
3747722682837130843, failureFraction 0.5, 1000 keys over 20 partitions, maxConcurrency 14, 100ms
user function, 1000 records every 20s, the suite's Testcontainers Kafka, macOS arm64 workstation at
5-13 load average. WorkManager at DEBUG throughout, and the logging config that carried it verified
in the log by OnConsoleStatusListener rather than assumed - which mattered, because the gate's
logger sits under a bare package pin that -Dpc.log.level=debug does not reach.

Arm One term changed Predicted Outcome
1 none (experimental) successes freeze in 60s; gate reads true and stays; all partitions paused; failures at ~140/s All of it. Froze at 451 - #471's own 30-minute number, in 6 minutes. Gate true on 37,356 of 37,360 evaluations (the 4 false are the first 800ms). Latched at inShards=500 vs target(14)*loadingFactor(2)=28 on the first fetch, 0.8s in, never unlatched. 20 partitions paused at every sample.
2 UNORDERED ordering it stalls too - which refutes head-of-line while leaving the gate standing As predicted. Gate true on 39,689 of 39,693, 20 partitions paused throughout, successes crawling 232 → 314 on records already in the buffer.
3 messageBufferSize=20000 (threshold 42 → 20,006) the outcome flips: gate stays false, partitions unpaused, records keep arriving, successes keep rising Flipped. Gate false on all 35,652 evaluations, zero partitions paused at any sample, inShards climbing 549 → 17,103 with the producer, successes 897.
4 failureFraction=0.01, 10 min gate oscillates then stops permanently; successes flow for minutes; latch arrives late but arrives, at P≈168-182 around 5.6-6.1 min Shape confirmed, numbers not - and the miss matters. It oscillated (264 false vs four in arms 1-2, all of those at startup) and stopped: last false is inShards=71 - parkedForRetry=29 = 42 vs target(14)*loadingFactor(3)=42, the boundary exactly, then an unbroken true run of 8m57s. Successes 992 → 1,971 → 2,946 → 3,902, frozen for the last nine minutes. But it latched at P=98, ~64s in, not 182 at six minutes.

Verdict

Arm 3 is the positive control, so the gate is what stops intake. Arm 2 kills the stated mechanism.
Arm 1's own arithmetic kills it more directly: the 549 records it held came from one burst over
1000 distinct keys, so there was at most one record per key and nothing was queued behind any
blocked head
.

This is not a possibility to weigh - it is where every long-lived instance ends up

parkedForRetry is not a property of the population. By Little's law it is
retry throughput × retryDelay, so with P permanently-failing records held:

unparked = P - (retry throughput * retryDelay)
latch when unparked > targetAmountOfRecordsInFlight * loadingFactor

Under retry-forever P only grows while the subtracted term is bounded - retry throughput cannot
exceed maxConcurrency / userFunctionDuration, so the parked term cannot exceed
maxConcurrency × retryDelay / userFunctionDuration = 140 at these defaults. The latch is
therefore an eventual certainty, at a computable ceiling of 140 + 42 = 182 held records. The two
addends are different units on purpose: 140 bounds the parked share, and the 42 is the gate's own
threshold term
, target(14) * loadingFactor(3), not a second measured population. loadingFactor
is DynamicLoadFactor#getCurrentFactor, which starts at 2 and steps up one at a time - arm 1 latched
against 28 before it had stepped at all - and it cannot grow back out of the latch, because
checkPipelinePressure() steps it only when isPoolQueueLow() && lastWorkRequestWasFulfilled and the
latch is precisely what stops a work request being fulfilled.

Measured three ways before being adopted, on logs already taken: parkedForRetry has median 135
and hard max 140 across arms 1-3 while inShards ranges 549 → 17,103 (a 31x population change,
unchanged parked count); the failure rate is 133 / 133.5 / 129.5 per second against a C/U ceiling of
140/s; and arm 1's predicted unparked of 549 − 140 = 409 is exactly its observed minimum.

But 182 is a ceiling, not an estimate, and arm 4 beat it in the dangerous direction. It latched at
P=98 because its retry throughput settled at 30.6/s, making its parked term ~30 rather than 140. A
slower retry service latches the gate sooner
, since fewer records are in back-off and more therefore
read as workable.

Saturation is not a precondition - the instance stalls while idle. At arm 4's latch the pool was at
22% utilisation (3 of 14 workers) against arm 1's 95%. It stopped fetching from the broker while
78% idle, looking healthy the whole time. What limits the retry cadence to ~3.2s per record against a
static 1s delay (confirmed static: no retryDelayProvider, no progressive backoff in
WorkContainer#computeRetryDueAt) is not measured, and is now the first arm in the scenario's
list, because the latch point is a function of it.

This is the best explanation anyone has produced for confluentinc#809 and
confluentinc#833, whose reporter showed pc_processed_records_total flat across
the window their timeout fired in - which is this state, not a busy one.

Head-of-line blocking gains the role it actually has

Not what latches the gate (arm 2 latches with no ordering constraint at all). It is what stops the
residue draining afterwards: arm 4's inShards fell 103 → 98 and then sat at exactly 98 for 6,201
consecutive evaluations, nothing retiring for nine minutes - ~40 poison plus ~58 healthy records
queued behind poisoned heads on their own keys. Eleven idle workers beside 58 deliverable records they
were not allowed to reach.

Why no gate change fixes it

Arm 3 lifts the intake bound and throughput still dies: successes doubled, then plateaued by minute
three while the held population climbed linearly. Raising the threshold converts a hard stall into an
unbounded-memory slow starve; "count only what is selectable" is worse, because under KEY/PARTITION
ordering at most one record per shard is ever selectable and a shard whose head is at a worker has
none. The distinguishing property is liveness of the shard head, not a count, and that is not decidable
from the shard's state. The fix has to bound the failures - #149's dead
letter queue, which roadmap.yaml already describes in exactly these terms. The interim is to make the
latch loud: it is exported only as pc_num_paused_partitions and logged nowhere.

Ruled out with evidence, not by reading

Offset-encoding back pressure (absent from all four logs). A dead poll thread
(#477's class - the soak reported no finding in any arm; the poller is alive
and paused). A lost wakeup from a stale pause cache (maybeWakeupPoller() is gated on
!isSufficientlyLoaded(), so with the gate continuously true no wakeup is ever attempted - its
Found Poller paused line appears zero times in every arm). And this is not
#478's withdrawn eager-sync stall: that one drained and needed a
processor-count cap to appear; this one never drains and needs no cap.

What is here

  • A flag that actually reaches the run: -Dpc.loadgate.log.level=debug raises WorkManager's
    per-tick gate line, on its own property, in logback-test.xml (the file an integration or soak run
    actually reads) and in the integration profile, each defaulting to its own file's level.
  • The gate's operands on the soak's progress line at INFO, plus the paused-partition count, so a
    frozen success count says in the same place why it froze.
  • Three soak knobs so an arm can change one term: -Dsoak.ordering, -Dsoak.messageBufferSize,
    -Dsoak.progressInterval.
  • WorkManagerTest#theLoadGateCountsRecordsQueuedBehindABlockedKeyHeadAsWorkable - the accounting
    gap pinned as a characterisation, with its javadoc stating what it is not evidence of. Its last
    assertion measures the second consumer of the same over-read: drain() gates on
    isRecordsAwaitingProcessing(), which reads true with nothing selectable.
  • docs/inflight/bug-119-load-gate-counts-blocked-work-as-available.md - the operator-visible
    symptom, the verdict, the design decision, and the sweep for the same shape elsewhere.
  • The records updated: CommitResponseTimeoutSoakIT's Calibration status gains the three arms
    (its earlier block is now dated so the two read as a sequence), and
    bug-177-commit-response-timeout-unreproduced.md's arm 1 is marked done and hands the gate question
    onward, keeping confluentinc#809: Sporadic timeouts from ConsumerOffsetCommitter.CommitRequest #175's own question where it belongs.

No product code changes. The measurement says a gate change is the wrong fix, so none is proposed.

Checklist

  • Docs updated - the soak scenario's calibration block, the two docs/inflight/ notes, and the two logging profiles
  • User-facing feature documentation data added under docs/features/ - N/A - test instrumentation and a diagnostic flag; no user-facing feature
  • Tests added/updated
  • docs/inflight/ working note started at the PR's first commit - bug-119-load-gate-counts-blocked-work-as-available.md
  • Title & body reflect the final content of this PR
  • Ran ce-simplify and ce-code-review locally - N/A - asking for @claude review this on the PR instead, which is the only route that can open inline threads

astubbs and others added 2 commits September 8, 2026 16:09
…k reports its freeze

#471's two thirty-minute runs found a total intake stall and could not name what stopped
intake, because the only figures on the progress line were the counters that had already stopped
moving. Its arm 1 - "re-run either arm with WorkManager at DEBUG and read the isSufficientlyLoaded=
line at the moment successes freeze" - was blocked on instrumentation that did not exist. This is
that instrumentation, plus the accounting gap the hypothesis rests on, pinned as a unit test.

THE FLAG THAT WOULD NOT HAVE REACHED THE RUN. The gate's DEBUG line lives on
bz.stub.parallelconsumer.state.WorkManager, which sits under the bare bz.stub.parallelconsumer pin
in both test logging profiles - so -Dpc.log.level=debug does NOT raise it, and a run started that
way would have produced a confident "no gate line, so not the gate". It now has a logger of its
own, on its own property (-Dpc.loadgate.log.level=debug), because it fires once per control-loop
tick and nothing else pc.log.level raises wants that volume. The logger goes in
logback-test.xml, which is the file an integration or soak run actually reads - the integration
profile's header records that nothing selects it - and in logback-integration-test.xml as well, each
defaulting to its own file's level, so neither can lose it by being the one selected. It replaces
the commented-out logger that was already there for exactly this investigation: a flag cannot be
committed by accident and a commented-in logger can, which is the argument logback-test.xml's own
header makes about pc.log.level.

WHAT THE SOAK NOW REPORTS. Every progress line carries the gate's operands, read through the same
ShardManager#getWorkableRecords() accessor the gate itself decides on, plus Kafka's paused-partition
count - which is what a latched gate actually does. A frozen success count beside
`loaded=true pausedPartitions=20` is the gate holding the poller down; the same freeze beside
`loaded=false pausedPartitions=0` is something else entirely, and after the fact those two used to
be indistinguishable. At INFO, so it is in the log of every soak that ever runs, rather than behind
the DEBUG flag above.

THREE KNOBS, EACH SO AN ARM CAN CHANGE EXACTLY ONE TERM.
-Dsoak.ordering=UNORDERED is the control for the head-of-line half of the hypothesis: no shard head
can block anything behind it, so inShards becomes an honest count of selectable records.
-Dsoak.messageBufferSize=N raises the gate's threshold and nothing else - it pins the load factor so
target*factor is the size asked for, leaving maxConcurrency, the worker count and the retry
throughput untouched, which raising maxConcurrency would not.
-Dsoak.progressInterval=PT10S, because the 60s interval that suits a thirty-minute run puts the
whole freeze inside a single sample.

THE ACCOUNTING GAP, PINNED. WorkManagerTest#theLoadGateCountsRecordsQueuedBehindABlockedKeyHeadAsWorkable
is a characterisation, not an assertion that the reading is right: with three records of one key and
a failing head, the gate reads two workable while nothing at all is selectable, and three while one
is. The gate's own javadoc excludes retry-parked records because "no amount of worker capacity can
advance them"; a record behind a blocked KEY head meets that description and is counted anyway. The
test deliberately also records what this is NOT evidence of - a permanently failing head is itself
workable and counts on its own account, so a buffer full of poisoned heads latches the gate whether
or not anything is queued behind them, and only a soak arm separates the two.

Co-authored-by: Claude Opus <noreply@anthropic.com>
…found

The note this PR earns at its first commit, per docs/inflight/AGENTS.md. It carries what the
unit test alone cannot: what the accounting gap is NOT evidence of, why "count only what is
selectable" is the wrong repair, the three directions that are available, and the second consumer
of the same over-read that drain() gates on.

Named for #119, the fork mirror of confluentinc#857, because a note filename carries the
FORK number - bug-857-family.md predates that rule and is left alone.

Co-authored-by: Claude Opus <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

Dependency Review

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

Scanned Files

None

… than reasoning about it

The sweep for other readers of "records in shards" as "available work" named drain() - it gates the
transition to closing on isRecordsAwaitingProcessing(), which sums the per-shard selection-claim
counters, and a record queued behind a blocked KEY head still holds its claim. That was an argument
from reading the code; it is now an assertion in the same test that pins the gate itself, so the
claim in the note is measured.

The consequence differs from the gate's - a close that waits out its drain timeout, not a poller
that stays paused - which is why the note records it beside the gate question rather than inside it.

Co-authored-by: Claude Opus <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 8, 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 27 27 ➖ 0
Duplicated lines 949 949 ➖ 0
Duplication 0.37% 0.37% ➖ 0
Rule Limit Status
Max duplication 0.5% ✅ Pass (0.37%)
Max increase vs base +0.1% ✅ Pass (+0.00%)

No new clones introduced by this PR.

✅ jscpd (language-agnostic)

PR Base Change
Clones 106 106 ➖ 0
Duplicated lines 1503 1503 ➖ 0
Duplication 0.83% 0.84% 🙂 -0.01%
Rule Limit Status
Max duplication 2% ✅ Pass (0.83%)
Max increase vs base +0.1% ✅ Pass (-0.01%)

No new clones introduced by this PR.

Powered by astubbs/duplicate-code-cross-check

@github-actions

github-actions Bot commented Sep 8, 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:

🔺 Increased similarities

File A File B Base (%) PR (%) Change
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java 40.8 40.9 +0.1
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitEncodeShift894Test.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitShiftCompounding894Test.java 38.1 38.2 +0.1
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRebalancePathTest.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java 41.9 42.0 +0.1
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 33.3 33.4 +0.1
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardDisplacementOrphanReachabilityTest.java 41.4 41.5 +0.1
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 39.0 39.1 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 32.8 32.8 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 48.9 49.0 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 55.0 55.0 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 42.3 42.4 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 30.7 30.8 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 45.5 45.6 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java 31.2 31.2 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 34.3 34.4 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java 36.8 36.8 +0.1
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 32.4 32.4 +0.1
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalPartialResultSetIT.java 35.2 35.2 +0.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 33.7 33.7 +0.0
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRebalancePathTest.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 31.9 31.9 +0.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 30.2 30.2 +0.0

...and 79 more

Full similarity report
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BackPressureFlagVisibilityProbes.java

📄 jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BackPressureFlagVisibilityProbes.java

File Similarity (%)
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitWindowLostUpdateProbes.java 47.76
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java 46.7
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java

📄 jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java

File Similarity (%)
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java 37.12
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java 32.94
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java

📄 jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java

File Similarity (%)
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java 37.64
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java 35.37
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java

📄 jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java

File Similarity (%)
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitWindowLostUpdateProbes.java 55.73 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java 55.33 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BackPressureFlagVisibilityProbes.java 46.7
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java 37.64
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java 37.12
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitWindowLostUpdateProbes.java

📄 jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitWindowLostUpdateProbes.java

File Similarity (%)
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java 55.73 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BackPressureFlagVisibilityProbes.java 47.76
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 34.65
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitWindowSeamTest.java 32.24
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java

📄 jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java

File Similarity (%)
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java 55.33 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java 35.37
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java 32.94
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 56.03 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 37.79
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 32.62
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 30.34
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 30.05
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 56.24 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 55.04 ⚠️
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 43.57
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 42.36
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 34.37
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 33.46
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 32.82
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 56.24 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 47.89
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 41.82
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 39.47
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 35.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 30.76
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/PCRetriableExceptionTest.java 32.36
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtils.java 30.22
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 56.03 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 46.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.79
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 55.04 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 52.21 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 47.89
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 39.6
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 34.92
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 33.7
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 33.28
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 32.53
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 52.21 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 42.36
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 39.59
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 39.47
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 30.21
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java 47.47
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollContextInternalTest.java 38.82
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 33.28
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContext.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContext.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java 30.58
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java 47.47
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContext.java 30.58
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/SubmitWorkToPoolShutdownRaceTest.java 38.17
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 37.57
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java 37.28
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 37.14
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 36.25
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerOffsetCommitter.java 34.59
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java 34.13
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java 33.68
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 32.53
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 32.52
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerManager.java 31.25
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 31.03
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerOptions.java 30.79
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollerDeathClosesTheConsumerTest.java 30.47
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 37.28
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerManager.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 31.25
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerOffsetCommitter.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerOffsetCommitter.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 34.59
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 30.21
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMap.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMap.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java 30.79
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ExternalEnginePipelineBufferTest.java 39.28
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 37.14
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 34.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 50.08 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 48.97
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 46.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCInternalRuntimeException.java 38.23
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 37.79
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 37.48
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 31.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCInternalRuntimeException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCInternalRuntimeException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 38.23
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 34.92
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 32.82
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 30.76
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ProducerManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 33.68
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtils.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtils.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtilsTest.java 35.58
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/JavaUtils.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/JavaUtils.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/CollectionUtils.java 33.28
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtils.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtils.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtilsTest.java 31.86
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java 30.22
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/metrics/PCMetrics.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/metrics/PCMetrics.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/metrics/PCMetrics859Test.java 40.04
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 31.65
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 31.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 30.86
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 30.34
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnsupportedOffsetEncodingException.java 37.26
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java 31.49
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodedOffsetPair.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodedOffsetPair.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetMapCodecManager.java 35.5
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java 30.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 37.48
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 48.97
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 45.6
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 34.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 33.38
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 50.08 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 45.6
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 32.62
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java 38.11
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/WorkManagerOffsetMapCodecManagerTest.java 31.43
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodedOffsetPair.java 30.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetMapCodecManager.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetMapCodecManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodedOffsetPair.java 35.5
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 57.98 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 34.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 31.65
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 30.05
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 57.98 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 33.38
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 30.86
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnsupportedOffsetEncodingException.java 50.3 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java 38.11
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java 31.49
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnsupportedOffsetEncodingException.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnsupportedOffsetEncodingException.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/UnknownOffsetMetadataMagicException.java 50.3 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/CorruptOffsetMetadataException.java 37.26
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ControllerThreadOnly.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ControllerThreadOnly.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ArchitectureTest.java 33.65
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/DispatchScanMeter.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/DispatchScanMeter.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OrderingModeDispatchParityTest.java 41.12
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 37.57
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java 37.09
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitWindowLostUpdateProbes.java 34.65
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateAcknowledgedCommitOffsetTest.java 33.58
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 33.31
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerOffsetCommitter.java 30.21
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 42.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 37.09
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 34.13
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateManagerRevokeAfterFailedAssignmentTest.java 31.01
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMap.java 30.79
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 49.64
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardStaleSweepReplacementEvictionTest.java 42.22
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardDisplacementOrphanReachabilityTest.java 41.47
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 38.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 36.02
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 33.69
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardAvailableCountOwnershipTest.java 33.22
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java 31.25
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRebalancePathTest.java 30.22
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 49.64
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRebalancePathTest.java 44.62
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java 40.88
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 38.12
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardDisplacementOrphanReachabilityTest.java 37.81
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 36.4
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 31.03
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkClaimStateMachineTest.java 49.22
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java 36.83
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 33.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java

📄 parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java 42.1
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 36.4
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 36.25
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 36.02
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 33.31
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/KafkaSanityTests.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/KafkaSanityTests.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/LoopingResumingIteratorTest.java 34.98
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 58.48 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 45.35
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/Rebalance857CommitSyncDeadlockProbeBase.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/Rebalance857CommitSyncDeadlockProbeBase.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java 33.66
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/Rebalance857CommitSyncDeadlockProbeBase.java 33.66
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 53.57 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 45.35
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 30.49
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java 44.94
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalPartialResultSetIT.java 35.23
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 33.32
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalVisibilityIT.java 31.63
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 44.94
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 35.25
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 31.2
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java 31.82
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 31.51
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java 31.2
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalPartialResultSetIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalPartialResultSetIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 35.23
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalVisibilityIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalVisibilityIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 31.63
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 58.48 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 53.57 ⚠️
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 36.73
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 42.97
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java 40.42
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 36.63
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 32.75
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 32.42
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 44.32
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 42.97
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 38.26
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java 50.57 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 44.32
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 36.63
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 32.88
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeDrainIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeDrainIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkDrainIT.java 38.54
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 39.1
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkDrainIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkDrainIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeDrainIT.java 38.54
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkCooperativeIT.java 39.1
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 32.42
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkKeyOrderIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 50.57 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 40.42
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 38.26
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 32.88
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 32.75
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCap.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCap.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCapIT.java 51.06 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCapIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCapIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/DiagnosticQuietCap.java 51.06 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceProgressView.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceProgressView.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceStallDetector.java 30.28
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceStallDetector.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceStallDetector.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/InstanceProgressView.java 30.28
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/KeyOrderLedger.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/KeyOrderLedger.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/KeyOrderLedgerIT.java 30.29
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/KeyOrderLedgerIT.java

📄 parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/KeyOrderLedgerIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/KeyOrderLedger.java 30.29
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorConfigurationTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorConfigurationTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/SubmitWorkToPoolShutdownRaceTest.java 36.26
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorTestBase.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessorTest.java 31.08
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ArchitectureTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ArchitectureTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RebalanceCallbackRuleControlTest.java 33.99
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ControllerThreadOnly.java 33.65
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/ControllerThreadOnlyReachFromARebalanceCallback.java 30.07
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AsyncCommitAcknowledgementTestBase.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AsyncCommitAcknowledgementTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerSyncCommitMarksCleanOnReturnTest.java 47.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitRejectionTestBase.java 46.1
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerAsyncCommitCallbackDroppedTest.java 35.24
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CheckQuarantineOwnersScriptTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CheckQuarantineOwnersScriptTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineRegistryScriptTest.java 43.53
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java 39.24
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitRejectionTestBase.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitRejectionTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AsyncCommitAcknowledgementTestBase.java 46.1
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerSyncCommitMarksCleanOnReturnTest.java 41.33
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitResponseTimeoutSymptomTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitResponseTimeoutSymptomTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerTestBase.java 32.53
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java 50.92 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 49.17
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 43.67
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ForeignThread.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ForeignThread.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTestBase.java 34.65
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MdcBoundaryProbe.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MdcBoundaryProbe.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MdcContextPropagationTest.java 35.0
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MdcContextPropagationTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MdcContextPropagationTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MdcBoundaryProbe.java 35.0
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerAsyncCommitCallbackDroppedTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerAsyncCommitCallbackDroppedTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerAsyncCommitCallbackFailsTest.java 45.12
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AsyncCommitAcknowledgementTestBase.java 35.24
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerAsyncCommitCallbackFailsTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerAsyncCommitCallbackFailsTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerAsyncCommitCallbackDroppedTest.java 45.12
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerCommitTimeoutTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerCommitTimeoutTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerSaslAuthenticationTest.java 43.76
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerSaslAuthenticationTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerSaslAuthenticationTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerCommitTimeoutTest.java 43.76
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerSyncCommitMarksCleanOnReturnTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerSyncCommitMarksCleanOnReturnTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AsyncCommitAcknowledgementTestBase.java 47.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitRejectionTestBase.java 41.33
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerTestBase.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/MockConsumerTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitResponseTimeoutSymptomTest.java 32.53
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/PCRetriableExceptionTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/PCRetriableExceptionTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java 32.36
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessorTest.java 32.67
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessorTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessorTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ParallelEoSSStreamProcessorRebalancedTest.java 32.67
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorTestBase.java 31.08
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CheckQuarantineOwnersScriptTest.java 39.24
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineRegistryScriptTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineRegistryScriptTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CheckQuarantineOwnersScriptTest.java 43.53
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RebalanceCallbackRuleControlTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RebalanceCallbackRuleControlTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkContainerSortedCollectionRuleControlTest.java 54.52 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ArchitectureTest.java 33.99
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/BlockingReachThroughAMethodReference.java 33.4
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/ControllerThreadOnlyReachFromARebalanceCallback.java 30.54
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RunTagFilter.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RunTagFilter.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RunTagFilterTest.java 34.63
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RunTagFilterTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RunTagFilterTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RunTagFilter.java 34.63
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 87.85 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 86.57 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 86.57 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 83.2 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 83.2 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 83.2 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 81.72 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 81.72 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TransactionalClaim.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalCrashReplayIT.java 35.25
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalBatchVisibilityIT.java 33.32
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 31.82
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/BlockingReachThroughAMethodReference.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/BlockingReachThroughAMethodReference.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/ControllerThreadOnlyReachFromARebalanceCallback.java 44.61
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RebalanceCallbackRuleControlTest.java 33.4
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/ControllerThreadOnlyReachFromARebalanceCallback.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/ControllerThreadOnlyReachFromARebalanceCallback.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/BlockingReachThroughAMethodReference.java 44.61
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RebalanceCallbackRuleControlTest.java 30.54
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ArchitectureTest.java 30.07
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/SortedCollectionOfWorkContainers.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/SortedCollectionOfWorkContainers.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkContainerIsNeverInASortedCollectionArchTest.java 40.49
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ConsumerManagerCloseOwnershipTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ConsumerManagerCloseOwnershipTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTest.java 34.41
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerStaleContainerTest.java 35.8
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ExternalEnginePipelineBufferTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ExternalEnginePipelineBufferTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 39.28
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/LastCommitTimeFenceTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/LastCommitTimeFenceTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCrossThreadFieldFenceTest.java 32.18
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/metrics/PCMetrics859Test.java 34.68
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollContextInternalTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollContextInternalTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 38.82
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 35.89
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProduceLockHandover.java 32.93
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollerDeathClosesTheConsumerTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollerDeathClosesTheConsumerTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.47
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProduceLockHandover.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProduceLockHandover.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollContextInternalTest.java 32.93
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java 42.8
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollContextInternalTest.java 35.89
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 32.52
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionalEagerProcessingIT.java 31.51
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/SubmitWorkToPoolShutdownRaceTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/SubmitWorkToPoolShutdownRaceTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 38.17
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorConfigurationTest.java 36.26
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 39.6
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 34.37
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ConsumerManagerCloseOwnershipTest.java 34.41
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTestBase.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ThreadConfinedConsumerTestBase.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/ForeignThread.java 34.65
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkClaimStateMachineTest.java 74.38 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java 43.99
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/ProducerManagerTest.java 42.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 36.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/CollectionUtils.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/CollectionUtils.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/JavaUtils.java 33.28
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtilsTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtilsTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtils.java 35.58
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/LoopingResumingIteratorTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/LoopingResumingIteratorTest.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/KafkaSanityTests.java 34.98
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtilsTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtilsTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/ThrowableUtils.java 31.86
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/metrics/PCMetrics859Test.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/metrics/PCMetrics859Test.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/metrics/PCMetrics.java 40.04
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java 34.68
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetCodecTestUtils.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetCodecTestUtils.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/WorkManagerOffsetMapCodecManagerTest.java 30.32
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureUnitTest.java 36.62
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureUnitTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureUnitTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetEncodingBackPressureTest.java 36.62
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/WorkManagerOffsetMapCodecManagerTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/WorkManagerOffsetMapCodecManagerTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetEncoding.java 31.43
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/offsets/OffsetCodecTestUtils.java 30.32
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OffsetEncoderWidenedRangeRaceTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OffsetEncoderWidenedRangeRaceTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitEncodeShift894Test.java 42.47
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingEncodeWindowState.java 35.03
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OrderingModeDispatchParityTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OrderingModeDispatchParityTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/DispatchScanMeter.java 41.12
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateAcknowledgedCommitOffsetTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateAcknowledgedCommitOffsetTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 33.58
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitEncodeShift894Test.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitEncodeShift894Test.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OffsetEncoderWidenedRangeRaceTest.java 42.47
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitShiftCompounding894Test.java 38.25
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitShiftCompounding894Test.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitShiftCompounding894Test.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitEncodeShift894Test.java 38.25
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitWindowSeamTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitWindowSeamTest.java

File Similarity (%)
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitWindowLostUpdateProbes.java 32.24
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCrossThreadFieldFenceTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCrossThreadFieldFenceTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/LastCommitTimeFenceTest.java 32.18
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 30.51
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateManagerRevokeAfterFailedAssignmentTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateManagerRevokeAfterFailedAssignmentTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionStateManager.java 31.01
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ProcessingShardStaleReplacement909Test.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ProcessingShardStaleReplacement909Test.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerStaleContainerTest.java 44.25
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingCommitCycleState.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingCommitCycleState.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingEncodeWindowState.java 58.44 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingEncodeWindowState.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingEncodeWindowState.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingCommitCycleState.java 58.44 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OffsetEncoderWidenedRangeRaceTest.java 35.03
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueLincheckTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueLincheckTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 38.6
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRebalancePathTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRebalancePathTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 44.62
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java 41.96
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardDisplacementOrphanReachabilityTest.java 36.32
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 31.92
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 30.22
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRebalancePathTest.java 41.96
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerStaleCheckDoubleLookupTest.java 41.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardDisplacementOrphanReachabilityTest.java 41.52
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 40.88
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 33.42
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 31.25
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardAvailableCountOwnershipTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardAvailableCountOwnershipTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 33.22
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardDisplacementOrphanReachabilityTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardDisplacementOrphanReachabilityTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java 41.52
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 41.47
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 37.81
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 37.07
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRebalancePathTest.java 36.32
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardStaleSweepReplacementEvictionTest.java 34.16
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueLincheckTest.java 38.6
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java 30.51
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java 30.36
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerStaleContainerTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerStaleContainerTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ProcessingShardStaleReplacement909Test.java 44.25
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/EpochAndRecordsMapRaceTest.java 35.8
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardStaleSweepReplacementEvictionTest.java 38.99
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 38.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ShardManager.java 38.12
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardDisplacementOrphanReachabilityTest.java 37.07
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java 33.42
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRebalancePathTest.java 31.92
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardStaleSweepReplacementEvictionTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardStaleSweepReplacementEvictionTest.java

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 42.22
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardPopulationRaceTest.java 38.99
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardDisplacementOrphanReachabilityTest.java 34.16
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkClaimStateMachineTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkClaimStateMachineTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java 74.38 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java 52.55 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 49.22
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkContainerIsNeverInASortedCollectionArchTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkContainerIsNeverInASortedCollectionArchTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/archfixture/SortedCollectionOfWorkContainers.java 40.49
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkContainerSortedCollectionRuleControlTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkContainerSortedCollectionRuleControlTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/RebalanceCallbackRuleControlTest.java 54.52 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 30.36
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerStaleCheckDoubleLookupTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerStaleCheckDoubleLookupTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueRequeueWindowTest.java 41.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkClaimStateMachineTest.java 52.55 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TransactionalBulkCommitTest.java 43.99
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/CommitHistorySubject.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/CommitHistorySubject.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/LongPollingMockConsumerSubject.java 36.19
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/LongPollingMockConsumerSubject.java

📄 parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/LongPollingMockConsumerSubject.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/truth/CommitHistorySubject.java 36.19
parallel-consumer-examples/parallel-consumer-example-core/src/main/java/bz/stub/parallelconsumer/examples/core/CoreApp.java

📄 parallel-consumer-examples/parallel-consumer-example-core/src/main/java/bz/stub/parallelconsumer/examples/core/CoreApp.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-reactor/src/main/java/bz/stub/parallelconsumer/examples/reactor/ReactorApp.java 35.72
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java

📄 parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/ReactorAppTest.java 38.93
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/integrationTests/CoreAppMetricsIntegrationTest.java 36.6
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/VertxAppTest.java 34.77
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java

📄 parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 83.2 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 83.14 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 81.93 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 81.93 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 78.74 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 78.74 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java

📄 parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 81.72 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 81.66 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 80.47 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 80.47 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 77.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 77.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 77.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 75.96 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/integrationTests/CoreAppMetricsIntegrationTest.java

📄 parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/integrationTests/CoreAppMetricsIntegrationTest.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java 36.6
parallel-consumer-examples/parallel-consumer-example-reactor/src/main/java/bz/stub/parallelconsumer/examples/reactor/ReactorApp.java

📄 parallel-consumer-examples/parallel-consumer-example-reactor/src/main/java/bz/stub/parallelconsumer/examples/reactor/ReactorApp.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-vertx/src/main/java/bz/stub/parallelconsumer/examples/vertx/VertxApp.java 64.1 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/main/java/bz/stub/parallelconsumer/examples/core/CoreApp.java 35.72
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/ReactorAppTest.java

📄 parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/ReactorAppTest.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/VertxAppTest.java 45.29
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java 38.93
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java

📄 parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 83.2 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 83.14 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 81.93 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 81.93 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 78.74 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 78.74 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java

📄 parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 81.72 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 81.66 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 80.47 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 80.47 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 77.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 77.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 77.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 75.96 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/main/java/bz/stub/parallelconsumer/examples/vertx/VertxApp.java

📄 parallel-consumer-examples/parallel-consumer-example-vertx/src/main/java/bz/stub/parallelconsumer/examples/vertx/VertxApp.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-reactor/src/main/java/bz/stub/parallelconsumer/examples/reactor/ReactorApp.java 64.1 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java

📄 parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 83.2 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 83.14 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 81.93 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 81.93 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 78.74 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 78.74 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.33 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/VertxAppTest.java

📄 parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/VertxAppTest.java

File Similarity (%)
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/ReactorAppTest.java 45.29
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java 34.77
parallel-consumer-mutiny/src/main/java/bz/stub/parallelconsumer/mutiny/MutinyProcessor.java

📄 parallel-consumer-mutiny/src/main/java/bz/stub/parallelconsumer/mutiny/MutinyProcessor.java

File Similarity (%)
parallel-consumer-reactor/src/main/java/bz/stub/parallelconsumer/reactor/ReactorProcessor.java 42.7
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java

📄 parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java 81.26 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 49.17
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 49.07
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyMdcPropagationTest.java

📄 parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyMdcPropagationTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorMdcPropagationTest.java 47.0
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyPCTest.java

📄 parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyPCTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorPCTest.java 69.36 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java

📄 parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 86.57 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 86.51 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 85.25 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 81.93 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 81.93 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 81.93 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 80.47 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 80.47 ⚠️
parallel-consumer-reactor/src/main/java/bz/stub/parallelconsumer/reactor/ReactorProcessor.java

📄 parallel-consumer-reactor/src/main/java/bz/stub/parallelconsumer/reactor/ReactorProcessor.java

File Similarity (%)
parallel-consumer-mutiny/src/main/java/bz/stub/parallelconsumer/mutiny/MutinyProcessor.java 42.7
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java

📄 parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 81.26 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 50.92 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 50.79 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorMdcPropagationTest.java

📄 parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorMdcPropagationTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyMdcPropagationTest.java 47.0
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorPCTest.java

📄 parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorPCTest.java

File Similarity (%)
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyPCTest.java 69.36 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java

📄 parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 86.57 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 86.51 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 85.25 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 81.93 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 81.93 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 81.93 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 80.47 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 80.47 ⚠️
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 43.87
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 43.57
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 38.67
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 37.87
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 35.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 33.7
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 43.87
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 43.68
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 41.82
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 39.59
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 33.46
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 38.0
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 37.87
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 34.8
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBaseUnitTest.java 31.02
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java

📄 parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 43.68
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 38.67
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 38.0
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 30.21
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java

📄 parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 36.73
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 30.49
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java

📄 parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/TestConventionsArchTest.java 87.85 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 86.51 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 86.51 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 83.14 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 83.14 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 83.14 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 81.66 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 81.66 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBaseUnitTest.java

📄 parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBaseUnitTest.java

File Similarity (%)
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 31.02
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java

📄 parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorBatchTest.java 50.79 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 49.07
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 43.67

@codecov

codecov Bot commented Sep 8, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 82.95%. Comparing base (b654cb2) to head (82eecea).
⚠️ Report is 5 commits behind head on master.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@             Coverage Diff              @@
##             master     #487      +/-   ##
============================================
+ Coverage     82.50%   82.95%   +0.45%     
- Complexity     1563     1582      +19     
============================================
  Files            96       96              
  Lines          5383     5421      +38     
  Branches        537      544       +7     
============================================
+ Hits           4441     4497      +56     
+ Misses          747      727      -20     
- Partials        195      197       +2     
Flag Coverage Δ
chaos 53.17% <ø> (?)
integration 61.83% <ø> (+0.30%) ⬆️
performance 47.74% <ø> (?)
unit 79.26% <ø> (+0.09%) ⬆️

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

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

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Sep 8, 2026 •

Copy link
Copy Markdown

🟢 Throughput — OK

This branch measured about 27% faster than master, on the one test this measures. That is larger than this test's own run-to-run spread of about 17%, so it is worth looking at.

What Value Meaning
Compared with master 1.265 above 1.00 is faster, below is slower
Subject test took 31.8s the test under measurement
Control tests took 21.8s the other tests in this same run
Subject ÷ controls, here 1.460 not a speed - a shape that cancels machine speed
Subject ÷ controls, master 1.847 median of recent master runs
Reported rate 124172 rec/s this machine only; not comparable across runners

Allowable range 🟢 ≥ 0.70 · 🟡 0.50–0.70 (about a 30% loss) · 🔴 < 0.50 (about a 50% loss)

What the numbers mean, and what they cannot tell you

The one that gets misread. Subject ÷ controls is a shape, not a speed. 1.7 means the subject took 1.7 times as long as the control tests in the same run - it says nothing about master on its own, and a reviewer has already read it as "1.7x faster than master". Only Compared with master answers that question.

Why a shape and not a rate. A rate depends on which runner you drew. A shape does not: every test here processes a fixed number of records, so a runner twice as slow doubles the subject and the controls together and leaves their ratio alone. That is the whole trick, and it is why the reported rate is shown last and labelled as this machine only.

Reading the comparison. master ÷ this run. Above 1.00 the subject is proportionally quicker here than on master; below 1.00 it is slower. 0.50 means it takes twice as long relative to its controls - that is the failing bound, not a small one.

By conservation, not by correction. Every test in this lane processes a fixed number of records, so within one run the ratio of one test's time to another's is invariant under machine speed — a runner twice as slow doubles both terms and leaves the ratio alone. There is no machine-index correction to be wrong, because nothing needed correcting. share = subjectSeconds / controlSeconds, both from this same run.

Per-method times, not class times. A class time is work + setup, and container startup and @BeforeAll do not scale with work — they are the non-conserved term, and leaving them in breaks the invariant.

Reference is the median of 9 recent perf baseline (master) run(s), read from their artifacts. There is no committed baseline to go stale, and a share is dimensionless, so an old entry stays comparable to a new one without re-baselining. Shares observed: 1.712 – 2.032.

What this still cannot do. It removes machine-to-machine variance. It does not remove this test's own run-to-run variance, measured at about 30% on a single unchanged commit while its controls stayed within 5%. That is a property of the test, not of the comparison, and no arithmetic here can touch it — which is why the reference is a median and the bounds are deliberately coarse. 🟡 means look at this; only 🔴 is outside the measured spread.

Runs used: eb9fdb0, 51d9bb2, 0ca787c, b654cb2, a055248, 65e11e3, e05b399, ee3d8a9, 890aa53

Since the previous push: ratio 0.979 -> 1.265, share 1.876 -> 1.46, rate 64008 -> 124172 (+94.0%). One push of difference sits inside this test's measured spread - read it as movement, not as a result.

Updated for 82eecea · run 34298933341 · 2026-09-09 01:31 UTC

@github-actions

github-actions Bot commented Sep 8, 2026 •

Copy link
Copy Markdown

⚠️ SpotBugs Report

354 bug(s) found (rule-level exclusions only - see docs/inflight/static-spotbugs-rule-registry.md). See the annotations on the Files Changed tab for details.

Updated for 82eecea · run 34298933341 · 2026-09-09 01:30 UTC

astubbs added a commit that referenced this pull request Sep 8, 2026
…PR that carries it

The three lines the release note still has to name now read like the
rest of the burn-down: a box, the PR in front, and what closes the box.
A ticked box means the v6 action for that line is done, not that the
defect is closed - the revoke wait is ticked because its release-note
sentence is written and its fix is #408 after v6; the
INSTANCE_STALL line waits on #488, whose load arm has now
measured the starvation reading from the direction the idle replays
never could; the intake stall waits on #487, whose soak arms are
instrumented and predicted but not yet run.

Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>

@astubbs astubbs left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

lgtm

… blocking is not why

#471 named the record-intake load gate as the untested candidate for the stall its soak found
and said one run reading the gate's own DEBUG line would settle it. Three ran. The hypothesis is half
right, and the half that is wrong is the mechanism it named.

THE ARMS, each differing from the first by exactly ONE term, six minutes rather than thirty because
the stall is reached in the first second. Same seed 3747722682837130843, failureFraction 0.5, 1000
keys over 20 partitions, maxConcurrency 14, 100ms user function, 1000 records every 20s, the suite's
Testcontainers Kafka, macOS arm64 workstation at 5-13 load average. WorkManager at DEBUG throughout,
and the config that carried it VERIFIED in the log by OnConsoleStatusListener rather than assumed -
which mattered, because the gate's logger sits under a bare package pin and -Dpc.log.level=debug does
not reach it.

  ARM 1  KEY, the experimental arm.
         PREDICTED: successes freeze inside 60s; the gate reads true with workable above the target
         and STAYS true; every partition paused; failures climb at ~14 workers / 100ms = 140/s.
         OUTCOME: confirmed on every clause. Succeeded froze at 451 - #471's own
         thirty-minute number, reproduced in six minutes - failed 47,977 (133/s). The gate read true
         on 37,356 of 37,360 evaluations; the four false ones are the first 800ms, before the first
         fetch. It latched at inShards=500 vs target(14)*loadingFactor(2)=28 - on the FIRST fetch,
         0.8s in - and never unlatched. 20 partitions paused at every sample.

  ARM 2  UNORDERED, the control on ORDERING. No shard head can block anything behind it.
         PREDICTED (and recorded before running, in the form expected to be right rather than the
         form that would be convenient): it stalls too, which refutes the head-of-line half while
         leaving the gate half standing.
         OUTCOME: as predicted. Gate true on 39,689 of 39,693 evaluations, 20 partitions paused
         throughout, successes crawling 232 -> 314 on records already in the buffer.

  ARM 3  -Dsoak.messageBufferSize=20000, the control on the GATE ITSELF. Threshold 42 -> 20,006,
         maxConcurrency and therefore the worker count and retry throughput untouched.
         PREDICTED: the outcome flips - the gate stays false, partitions stay unpaused, records keep
         arriving and successes keep rising.
         OUTCOME: flipped. Gate false on all 35,652 evaluations, ZERO partitions paused at any
         sample, inShards climbing monotonically 549 -> 17,103 with the producer, successes 897.

VERDICT. Arm 3 is the positive control, so the gate is what stops intake. Arm 2 kills the stated
mechanism. Arm 1's own arithmetic kills it more directly: the 549 records it held came from ONE burst
over 1000 distinct keys, so there was at most one record per key and NOTHING was queued behind any
blocked head. What latches the gate is records that are themselves perfectly workable - retried
continuously, saturating every worker - and that never retire.

AND ARM 3 EXPOSES A SECOND BOUND, which is why no gate change fixes this. Lifting the intake bound
did not restore throughput: successes doubled and then plateaued by minute three while the held
population kept climbing linearly. The poisoned records re-offer themselves every retry delay and
consume the whole worker budget, so raising the threshold converts a hard stall into an
unbounded-memory slow starve. "Count only what is selectable" is worse: under KEY or PARTITION
ordering at most one record per shard is ever selectable and a shard whose head is at a worker has
none, so a healthy loaded instance would call itself under-loaded and fetch without bound. The
distinguishing property is liveness of the shard head, not a count, and that is not decidable from
the shard's state. The fix has to bound the FAILURES - #149's dead letter queue, which
roadmap.yaml already describes in these terms - and the cheapest thing available before then is to
make the latch loud rather than silent.

Still eliminated, re-measured on all three arms: offset-encoding back pressure. Neither of
PartitionState#updateBlockFromEncodingResult's two messages appears once in any of the three logs.

RECORDED WHERE IT WILL BE FOUND. CommitResponseTimeoutSoakIT's Calibration status gains the three
arms and the verdict, and its earlier block is dated so the two read as a sequence.
docs/inflight/bug-119-load-gate-counts-blocked-work-as-available.md carries the operator-visible
symptom, the decision and the sweep. bug-177-commit-response-timeout-unreproduced.md's arm 1 is
marked done and hands the gate question to that note, keeping #175's own question where it
belongs.

Co-authored-by: Claude Opus <noreply@anthropic.com>
@astubbs astubbs changed the title test(soak) astubbs#175: read the load gate's own equation, and pin what it counts that it cannot advance test(soak) astubbs#119: the load gate IS what stops intake, and head-of-line blocking is not why Sep 8, 2026
astubbs added a commit that referenced this pull request Sep 8, 2026
…o gate fix

#487's three arms settle the last replay-shaped unknown. The load
gate latches on the first fetch under a poison-record workload and never
unlatches; UNORDERED stalls the same way and the KEY arm's arithmetic
leaves nothing behind any head, so the head-of-line half of #471's
hypothesis is refuted while the load-gate half is confirmed by a
positive control on the threshold alone. Lifting the threshold trades
the stall for unbounded memory, so the fix is a retry bound, not a gate
change - #149's dead-letter queue, after v6. The burn-down records
the verdict, the release-note sentence it implies, and the one interim
the owner may want: a warning when the gate latches with nothing
retiring.

Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Sep 8, 2026
…high-failure-rate case

Reviewer feedback on #487, relayed by the owner: under retry-forever
the poison population only grows, workers saturate at about concurrency
times retry delay over function duration, and only then does the gate
latch - so any long-lived instance with any poison and no terminal
handling stalls eventually. The burn-down's release-note line now says
that, names the saturation figure and its inputs, ties it to the two
upstream flat-counter reports, and records that the low-rate arm which
measures it is queued.

Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
astubbs and others added 2 commits September 8, 2026 23:00
…or a busy pool - it is an eventual certainty

Review feedback on #487 said the previous close understated the finding: under retry-forever
the held poison population only grows, so the latch is not a possibility to be weighed but something
any long-lived instance reaches. Checked against the existing logs first, then measured with a fourth
arm rather than asserted. The reviewer's conclusion is CONFIRMED and their arithmetic is a correct
UPPER BOUND; the ordering claim inside it is refuted, in the direction that makes the defect worse.

THE ARITHMETIC, CHECKED AGAINST ARMS 1-3 BEFORE ADOPTING IT. parkedForRetry is not a property of the
population - by Little's law it is retry-throughput times retryDelay. Three independent confirmations
in logs already taken: parkedForRetry has median 135 and hard max 140 in all three arms while
inShards ranges 549 to 17,103, a 31x population change with an unchanged parked count; the failure
rate is 133 / 133.5 / 129.5 per second in those same three arms against a C/U ceiling of 140/s; and
arm 1's predicted unparked of 549-140=409 is exactly its observed minimum. So

    unparked = P - (retry throughput * retryDelay)
    latch when unparked > targetAmountOfRecordsInFlight * loadingFactor

and since retry throughput cannot exceed maxConcurrency/userFnDuration, the subtracted term is
bounded by maxConcurrency*retryDelay/userFnDuration = 140 here. P only grows. The latch is therefore
unavoidable, with a computable ceiling of 140+42 = 182 held records at these defaults.

ARM 4 - failureFraction 0.01, ten minutes, everything else arm 1's.
  PREDICTED, written before the run: the gate oscillates early and then stops permanently (the
  discriminator, since arms 1 and 2 never oscillated at all); successes flow for minutes; parked
  tracks P then pins at 140; the latch arrives late but arrives, at P between 168 and 182, around
  5.6-6.1 minutes.
  OUTCOME: the shape is confirmed, the numbers are not, and the miss matters. The gate DID oscillate
  - 264 false readings against exactly four in each of arms 1 and 2, all of those at startup - and
  then stopped: the last false is inShards=71 - parkedForRetry=29 = 42 vs target(14)*loadingFactor(3)
  =42, the boundary exactly, after which the final unbroken true run is 8m57s. Successes rose 992 ->
  1,971 -> 2,946 -> 3,902 and then froze at 3,902 for the remaining nine minutes.
  But it latched at P=98, about 64 seconds in - not 182 at six minutes - because its retry throughput
  settled at 30.6/s, so its parked term was ~30 rather than 140. A SLOWER RETRY SERVICE LATCHES THE
  GATE SOONER, since fewer records are in back-off and more therefore read as workable. 182 is a
  ceiling, not an estimate.

SATURATION IS NOT A PRECONDITION, and this is the correction worth carrying. At arm 4's latch the
pool was doing 30.6 failures/s - about 3 of its 14 workers, 22% utilisation, against arm 1's 95%. The
instance stopped fetching from the broker while 78% IDLE. What limits the retry cadence to ~3.2s per
record against a static 1s delay is NOT measured - confirmed static, no retryDelayProvider is set and
WorkContainer#computeRetryDueAt has no progressive backoff - and it is now the first arm in the
scenario's list, because the latch point is a function of that number.

HEAD-OF-LINE BLOCKING GAINS THE ROLE IT ACTUALLY HAS. It is still not what latches the gate (arm 2
latches with no ordering constraint; arm 1 held one record per key). It is what stops the residue
draining afterwards: arm 4's inShards fell 103 -> 98 and then sat at exactly 98 for 6,201 consecutive
evaluations, nothing retiring for nine minutes. Those 98 are ~40 poison plus ~58 healthy records
queued behind poisoned heads on their own keys - eleven idle workers beside 58 deliverable records
they were not allowed to reach.

TWO MORE MECHANISMS RULED OUT WITH EVIDENCE, both things a reader would otherwise suspect. A dead
poll thread (#477's class): the soak reported no finding in any of the four arms, so the
poller is alive and paused. A lost wakeup from a stale pause cache: maybeWakeupPoller() is gated on
!isSufficientlyLoaded(), so with the gate continuously true no wakeup is ever attempted - its "Found
Poller paused" line appears zero times in every arm, and nothing can lose a wakeup never sent.

AND A DISTINCTION THE MERGE MADE NECESSARY. #478 withdraws an eager-sync stall as "a bound the
processor count crosses, not a defect". Do not collapse this note into that one: that symptom DRAINED
and needed a processor-count cap to appear, while this one never drains and is reached at 22%
utilisation with no cap at all.

The failureFraction=0 arm is withdrawn as superseded - arm 4 answers what it was aimed at with a live
workload rather than an empty one.

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
@astubbs astubbs changed the title test(soak) astubbs#119: the load gate IS what stops intake, and head-of-line blocking is not why test(soak) astubbs#119: any retry-forever instance eventually stops fetching, at a threshold you can compute Sep 8, 2026
astubbs added a commit that referenced this pull request Sep 8, 2026
…turation is not a precondition

#487's fourth arm, at a low poison rate with the prediction
written first, latched the gate with three of fourteen workers busy. The
parked term the gate subtracts is throughput times retry delay, not a
population property, so the unparked count crosses the threshold as soon
as the poison population outgrows what the retry service holds in
back-off - and a slower retry service latches sooner. The earlier line
said saturation had to come first; it was wrong, and this replaces it
with what was measured, plus the one thing the arms left open: the
retry cadence is about three times the configured delay.

Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
@astubbs

astubbs commented Sep 9, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

@claude

claude Bot commented Sep 9, 2026 •

Copy link
Copy Markdown

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


Review

  • Gather context (PR body, commits, diff via gh pr diff 487)
  • Read changed files (CommitResponseTimeoutSoakIT.java, WorkManagerTest.java, ManagedPCInstance.java, both logback*.xml, both docs/inflight/ notes)
  • Verify claims (roadmap entry, cited docs, javadoc math, API visibility)
  • Post findings

This is a test/diagnostics-only PR (no src/main changes), consistent with its "No product code changes" claim. Reviewed against git diff origin/master...HEAD via gh pr diff 487.

Overall: solid. The investigative methodology (four single-variable arms, a positive control that flips the outcome, a derived latch-point bound that's then checked against measurement) is exactly what docs/investigating.md asks for, and the write-up is honest about where the bound (182) diverges from what was actually observed (arm 4 latching at 98) rather than smoothing that over.

A few things worth a look, none blocking:

  1. logback-integration-test.xml's new WorkManager logger looks currently unreachable. Per the file's own pre-existing comment block (WHICH FILE THE INTEGRATION SUITE READS: this one [logback-test.xml]... NOTHING SELECTS [the integration profile]), nothing passes -Dlogback.configurationFile to pick logback-integration-test.xml up. Adding the same logger there is defensible as "don't let the two configs drift" (mirroring the existing logback-silos.xml include pattern), but it's worth confirming that's the intent rather than an assumption that this file is live for soak runs — the PR body's own claim ("in logback-test.xml (the file an integration or soak run actually reads)") suggests you already know only one of the two actually fires.

  2. docs/inflight/bug-119-...md's ceiling arithmetic (140 + 42 = 182) is a sum of two different units — a throughput-bounded parked-term ceiling (140) and the arm-1/2 gate threshold (42, i.e. target(14)*loadingFactor(2)). The doc is careful elsewhere to call 182 "a ceiling, not an estimate" and shows arm 4 blowing well under it, so this isn't wrong, just worth a reader double-checking it's threshold + max-parked, not a second measured quantity — a one-clause note that 42 is the threshold term (not another parked-population figure) would head off that misread.

  3. Minor: ManagedPCInstance.Config.messageBufferSize uses 0 as the sentinel for "leave the dynamic load factor alone," matching ParallelConsumerOptions.messageBufferSize's own un-annotated (so implicitly 0-default) field — consistent, but there's no validation preventing a caller from explicitly passing 0 to mean "static buffer size zero" vs "don't set it," same ambiguity the product field already has. Not introduced by this PR, not worth fixing here.

  4. Confirmed correct, not a finding: the new WorkManagerTest#theLoadGateCountsRecordsQueuedBehindABlockedKeyHeadAsWorkable uses registerSomeWork() (3 records, one key) and existing helpers (fail(), advanceClockByDelay()) consistently with how they're used elsewhere in the file; the arithmetic in its assertions (2 workable before the delay, 3 after) matches ShardManager#getWorkableRecords()'s documented inShards - parkedForRetry formula. All the getWm()/getSm()/isSufficientlyLoaded() accessors the soak's new describeIntake() calls are public (Lombok @Getter on AbstractParallelEoSStreamProcessor.wm etc.), so no visibility issue there.

  5. Doc citations checked and resolve: bug-857-family.md, bug-177-commit-response-timeout-unreproduced.md, the stale-pause-cache solution doc, and docs/data/roadmap.yaml's dead-letter-queue entry (tracking: astubbs#149, why_now matches the doc's paraphrase).

No test-weakening, no scope creep beyond what the PR body describes, and the two docs/inflight/ notes are updated in the same commit as the code they describe, per docs/inflight/AGENTS.md.

@astubbs astubbs left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

lgtm

@astubbs
astubbs marked this pull request as ready for review September 9, 2026 01:00
astubbs and others added 2 commits September 9, 2026 13:01
The commit-response-timeout note handed the load-gate question to the
load-gate note after three arms. A fourth arm at a low poison rate ran
afterwards and changed the model - the gate latches on an idle instance
at a computable threshold, saturation is not a precondition - so the
handoff sentence now says so, and no longer calls what remains a product
decision.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
@astubbs

astubbs commented Sep 9, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

@claude

claude Bot commented Sep 9, 2026 •

Copy link
Copy Markdown

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


Review

  • Gather context (PR body, commits, diff via gh pr diff 487)
  • Read changed files (CommitResponseTimeoutSoakIT.java, WorkManagerTest.java, ManagedPCInstance.java, both logback*.xml, both docs/inflight/ notes)
  • Verify claims against the actual source (gate formula, javadoc, roadmap citation, method visibility)
  • Post findings

Confirmed test/diagnostics-only: no changes under any module's src/main. Diff is origin/master...HEAD for the current tip (0324b15).

Verified, not just read:

  • WorkManager#isSufficientlyLoaded() and ShardManager#getWorkableRecords() do compute inShards - parkedForRetry against target * loadingFactor exactly as the new javadoc and the docs/inflight/bug-119-...md note describe (WorkManager.java:350-365, ShardManager.java:227).
  • The new WorkManagerTest#theLoadGateCountsRecordsQueuedBehindABlockedKeyHeadAsWorkable test's helpers (registerSomeWork(), fail(), advanceClockByDelay()) do exactly what the test's comments claim — traced each one. The assertion sequence (2 workable pre-delay, 3 post-delay, isRecordsAwaitingProcessing() true) is consistent with the accounting gap the test is characterising.
  • pc.getWm() and pc.getPausedPartitionSize(), used by the new describeIntake() helper in the soak, are both public (AbstractParallelEoSStreamProcessor @Getter(AccessLevel.PUBLIC) wm, getPausedPartitionSize() at line 1271) — no visibility problem.
  • The docs/data/roadmap.yaml dead-letter-queue entry's why_now and tracking: astubbs#149 match the note's paraphrase verbatim, and PCMetricsDef.NUM_PAUSED_PARTITIONS is a real gauge (BrokerPollSystem.java:139).
  • The apparent inconsistency between arm 1's threshold (target(14)*loadingFactor(2)=28) and the "182 = 140+42" ceiling (which uses loadingFactor(3)=42) is not an error — loadingFactor is the dynamic load factor referenced in ManagedPCInstance.Config#messageBufferSize's own javadoc, and the note is explicit that 182 is a ceiling computed at the higher observed factor, not the arm-1 starting threshold.

Two things worth a second look, neither blocking:

  1. logback-integration-test.xml's new WorkManager logger is added to a profile the file's own header says is not loaded by default (-Dlogback.configurationFile=... must be passed explicitly). That's not an oversight here — logback-test.xml's new comment says outright "Both files carry it, each defaulting to its own file's level, so neither can lose it by being the one selected" — but it's worth the author confirming that's still the intended belt-and-suspenders reasoning rather than an assumption baked in twice.
  2. The javadoc's 142/152/167 line numbering aside, the doc's own arithmetic note ("140 + 42 = 182") sums a throughput-bounded ceiling with a threshold term from a different arm's snapshot of a dynamic value — correct as shown, but a one-clause note in the doc that 42 is loadingFactor's grown-in-place value (not a second independent measurement) would save a future reader from re-deriving that themselves.

Not a finding: ManagedPCInstance.Config.messageBufferSize reuses 0 as "leave it alone," same convention ParallelConsumerOptions.messageBufferSize already uses — consistent, and correctly guarded (ManagedPCInstance.java:249-251) so it's only applied when > 0.

No test-weakening, no product-code changes, and the two docs/inflight/ notes are updated in the same commits as the code they describe. The investigative structure (four single-variable arms, a positive control, a derived bound checked against measurement, and an honest account of where the bound and the observation diverge) matches what docs/investigating.md asks for. LGTM.

astubbs and others added 2 commits September 9, 2026 13:15
…namic factor cannot grow out of the latch

The review on #487 asked twice for the same clause: `140 + 42 = 182` sums
two different units, and a reader who takes 42 for a second measured population re-derives the whole
thing before believing it. So say what it is - the gate's own threshold term,
`targetAmountOfRecordsInFlight(14) * loadingFactor(3)`, read off the arms' gate lines. Arm 1 latched
against 28, because `DynamicLoadFactor` starts at 2 and had not stepped 0.8s in, which is the same
fact from the other side.

Naming `loadingFactor` as dynamic raises the question the note did not answer: if the threshold term
can climb toward `DEFAULT_MAX_LOADING_FACTOR`, the gate would unlatch on its own and the "eventual
certainty" would be an eventual inconvenience. It cannot, and the reason is in the source rather
than in these runs. `checkPipelinePressure()` steps the factor only when
`isPoolQueueLow() && lastWorkRequestWasFulfilled`, and `retrieveAndDistributeNewWork` sets that
second term as `gotWorkCount >= delta`, where `delta` is the shortfall of dispatched records against
the loaded target. Once the shards have nothing selectable left, every pass hands back less than the
shortfall, the flag stays false, and the factor is pinned wherever it stood when the latch arrived.

That correction replaces a wrong reason with the right one. The note previously said the factor
barely moved "since the pool was never starved" - which is false of arm 4, whose pool sat at 22%
utilisation with an empty executor queue, so `isPoolQueueLow()` read true throughout. It is the
fulfilment term that holds the factor down, not the pressure term, and arm 4 is the arm that proves
it: `loadingFactor(3)` unchanged across an unbroken `true` run of nearly nine minutes with eleven
workers idle.

The soak scenario's `Calibration status` block carries the naming clause too, since it states the
same arithmetic, and points at the note for the step-up argument rather than restating it.

No product code changes, and no measurement is revised - both arms' recorded numbers are unchanged.

Co-Authored-By: Claude Opus <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
@astubbs

astubbs commented Sep 9, 2026

Copy link
Copy Markdown
Owner Author

Review response

Both automated reviews (the 00:47 one and the 01:03 one at 0324b15) landed as top-level comments with no inline threads, so this reply addresses each observation by name - including the ones I verified and rejected. Head is now 82eecea49.

1. logback-integration-test.xml's new WorkManager logger sits in a profile nothing selects - verified, and deliberate

Rejected as a finding, and the file says so itself rather than my reconstructing an intent. logback-test.xml's own comment on the same logger reads: "THIS is the file an integration or soak run reads - see the profile note above - so the same logger in logback-integration-test.xml would not have reached the run. Both files carry it, each defaulting to its own file's level, so neither can lose it by being the one selected." That is the belt-and-braces reasoning stated in the tree, at the point of use, and it mirrors the existing convention the review spotted. The two copies cannot drift into disagreement because each defaults to its own file's level rather than to a shared literal. No change.

Worth restating why it is not cosmetic: WorkManager sits under a bare bz.stub.parallelconsumer package pin, so -Dpc.log.level=debug does not reach it. Had the flag only existed in the profile nobody selects, the instrumentation would have produced a silent false negative - a run that looks instrumented and carries no gate line - which is exactly the trap docs/logging.md exists for.

2. 140 + 42 = 182 sums two different units - accepted, fixed in 82eecea49

Both reviews asked for the same clause, which is a good signal that a reader really does stop there. The note and the soak's Calibration status block now say outright that the 42 is the gate's own threshold term, targetAmountOfRecordsInFlight(14) * loadingFactor(3) read off the arms' gate lines, not a second measured population - and that loadingFactor is DynamicLoadFactor#getCurrentFactor, which starts at 2 and steps up one at a time, which is why arm 1 latched against 28 before it had stepped at all.

Naming the factor as dynamic then raised a question the note had not answered, and answering it turned up a wrong claim of its own. If the threshold term can climb toward DEFAULT_MAX_LOADING_FACTOR, the gate would unlatch on its own and the "eventual certainty" would be an eventual inconvenience. It cannot, and the reason is in the source rather than in these runs: checkPipelinePressure() steps the factor only when isPoolQueueLow() && lastWorkRequestWasFulfilled, and retrieveAndDistributeNewWork sets that second term as gotWorkCount >= delta, where delta is the shortfall of dispatched records against the loaded target. Once the shards have nothing selectable left, every pass hands back less than the shortfall, the flag stays false, and the factor is pinned wherever it stood when the latch arrived.

That replaced a sentence in the sweep section that gave the wrong reason - it said the factor barely moved "since the pool was never starved", which is false of arm 4, whose pool sat at 22% utilisation with an empty executor queue, so isPoolQueueLow() read true throughout. It is the fulfilment term that holds the factor down, not the pressure term, and arm 4 is what proves it: loadingFactor(3) unchanged across an unbroken true run of nearly nine minutes with eleven workers idle. No recorded measurement changed - this is a corrected explanation of numbers already taken.

3. ManagedPCInstance.Config.messageBufferSize uses 0 as "leave it alone" - verified, no change

Agreed with the first review's own conclusion. It matches the convention ParallelConsumerOptions.messageBufferSize already uses, it is guarded so it only applies when > 0, and the ambiguity between "unset" and "explicitly zero" is the product field's, pre-existing and not introduced here. Fixing it here would change a public option's semantics inside a diagnostics-only PR.

4. Confirmations - checked independently, not taken on trust

I re-derived the gate arithmetic against WorkManager#isSufficientlyLoaded and ShardManager#getWorkableRecords rather than accepting the review's tick: the expression is inShards - parkedForRetry > target * getLoadingFactor() with getLoadingFactor() returning dynamicLoadFactor.getCurrentFactor(), which is what both reviews said and is also what made point 2 answerable. WorkManagerTest runs 31 tests green on this head, the new characterisation among them, and parallel-consumer-core test-compiles including src/test-integration.

Analysis surfaces

bin/check-pr-analysis-surfaces.sh 487 at 82eecea49: no findings on lines this diff wrote, and none inherited in the files it touches either. The SpotBugs comment's count is whole-tree and none of it annotates this PR's files.

On duplication: both CPD engines report zero new clones and +0.00% / -0.01% against base. The file-similarity tool's "increased similarities" table is all +0.1 and +0.0 on pairs this PR does not touch at all - ShardManager/RetryQueueRequeueWindowTest, the JStream* processors, the 894 encode-shift tests - which is denominator drift, not duplication this PR introduced. Nothing to refactor.

One register item left open, deliberately

docs/inflight/AGENTS.md asks that a note mapping to a GitHub issue carry a draft response before its PR merges, and there is no issue-response-119.md anywhere in the tree or on any branch. I have not written one here on purpose: #119 is the confluentinc#857 family mirror, its status is owned by bug-857-family.md and spans several in-flight branches, and a draft written from this PR alone would describe one candidate mechanism as though it were the issue. It belongs to the family register or the pre-release sweep, not to a characterisation PR that proposes no fix. Flagging rather than filling it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD

@astubbs
astubbs merged commit c79424a into master Sep 9, 2026
32 of 35 checks passed
@astubbs
astubbs deleted the bugs/857-intake-stall-under-always-failing-key branch September 9, 2026 01:38
astubbs added a commit that referenced this pull request Sep 9, 2026
…y-key removal are on master

The intake-stall measurement landed with the retry-cadence arm and the
interim latch warning as what remains, and its box is ticked. The last
by-key shard removal the #483 sweep reported is fixed
on master, red first with an ablation arm per leg of the guard. The
known unknown that named it is struck through with the outcome, and the
retry queue's same-shaped removal is recorded as that queue's keying
model rather than a remaining instance.

Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Sep 9, 2026
… named, and five stale lines are corrected

Owner's decisions, 2026-09-09: the merge queue is closed as of today,
with later finds 0.6.0.x unless data loss on a default configuration;
the poisoned-transaction wedge is the second named exception beside
#44, and the release-note draft now carries it; the gate-latch
warning #487 argued for is v6-sized and joins tier 1 as the last
item; the upstream flat-counter reporters are not asked.

Corrections from the owner's read of the note: the release page body
is posted by hand on the day with gh release edit, because release.yml's
exact heading match misses the unreleased heading on master - so
#199 follows the tag rather than gating it, and the two lines that
said the workflow already publishes the curated section are fixed; the
#468 line no longer asks the reader to check a PR body for two
by-key removals that #468 dismissed and #492 fixed; the
vetting sweep's opening claim that the quarantine registry is non-empty
is struck as the sweep's dated reading; and the disposition list names
the three deferred bug notes it omitted.

Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Sep 9, 2026
…a heading gets its blank line

The automated review read "Merged" after "joins tier 1 as its own item"
as the gate-latch warning having merged; it was #487 that merged,
and the sentence now says so. The data-loss heading gains the blank
line every other section boundary has.

Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Sep 9, 2026
This branch is docs-only - two markdown files differ from master - so neither
red it drew can be its own. Both are recorded against the notes that own them,
and reading each occurrence turned up a correction the note needed.

INTEGRATION TESTS, on this PR's own head. The shape in
ci-broker-container-exit-126-is-undiagnosable.md, exactly: one class fell slowly
at the container-start timeout and every other broker class fell in
milliseconds with NoClassDefFoundError on BrokerIntegrationTest. Codecov renders
that as "20 Tests Failed"; it is one failure.

What is new is that the cause was in the log all along. Testcontainers prints
the failed container's own output at GenericContainer#tryStart, one line below
the "Wait strategy failed" line the note's signature block quotes, and it reads
"sh: /tmp/testcontainers_start.sh: Text file busy" - ETXTBSY, exec refused
because the starter script was still open for writing. The container command
waits for that script to EXIST and then executes it, so a file the daemon has
created but not finished extracting is executable-shaped and not executable, and
the shell reports the refusal as exit 126. A Testcontainers start race, widened
by a busy runner; nothing in the product, the image or the Kafka configuration.

Refetching #347's 2026-08-25 job, the run this note was written from,
shows the identical two lines. So the note's premise under item 1 - "the
container's stdout is nowhere in the job log" - was false of its own founding
evidence. The instrument was fine; the triage stopped one line short. That
correction is proposed in the note's vetting marker rather than applied, because
the note's impact is misdirection and those are the owner's to close.

CHAOS PAIN SUITE 4/4, on #495 - also docs-only, one
README paragraph. ChaosChurnStormIT NO_PROGRESS at 96632/100000 for 30s against
a 30s bound, seed 3717713223451201639. It goes in
test-no-progress-window-may-not-transfer-to-w1.md as one appended row, with the
part that makes it worth having: the fleet KEPT CONSUMING, reaching 99569 by the
settle summary, so the outstanding count fell from 3368 to 431 - inside the
TAIL_SLACK of 500. That is the "drains" branch of the deciding experiment the
note states. It is the weak form and the row says so: no recovery diagnostic, so
the counter compared is the ledger's rather than the probe's, and the conductor's
churn ended 10s after the firing, so it is recovery-once-churn-stops.

The bigger finding is that the deciding experiment had already been answered
twice and this note never took delivery. test-857-churn-storm-async-stalls.md
drained six for six on seed 9086872209853284830 with the diagnostic engaged, and
its 2026-09-08 sighting drained seed 5650361238717170909 from 93487 to
101070/100000 at an outstanding count of 6513 - larger than every row in the
table. That sighting says outright that this note owns the question; the pointer
was written and nobody followed it. Proposed in the vetting marker for the same
reason as above.

RULED OUT, with a control arm rather than an argument. The six merges that
landed on master today - #480, #487, #488, #491,
#492 and #493 - are the obvious suspects for a chaos red, and
#491 does touch ProgressProbe.java. Its diff does not touch the
NO_PROGRESS path at all - it adds the UNCOMMITTED_COMPLETIONS detector, edits
javadoc, and refactors the finding sink - and the same test PASSED on two heads
that carry every one of those merges, four and six minutes either side of the
failing run. A deterministic regression is excluded; a rate change is not, and
one failure could not establish one.

Nothing quarantined. The container fault has no test to quarantine and the
exit-126 note says a re-run is the correct response there. The chaos firing has
no rate that rule 1 would accept, and docs/quarantined-tests.md is empty - which
is the state to preserve.

Co-Authored-By: Claude Opus <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
astubbs added a commit that referenced this pull request Sep 9, 2026
… it turned up

THE CONFIRMATION. One run of CommitResponseTimeoutSoakIT's KEY arm against the
shipped WARN - same seed 3747722682837130843, failureFraction 0.5, same
workstation, shortened to PT4M because the latch arrives in the first second and
this is a confirmation rather than a re-derivation, with the gate logger at info
so the report is visible without the per-tick DEBUG equation.

The arm reproduced: succeeded=451, which is arm 1's number and #471's
thirty-minute number. Exactly ONE WARN in the whole run, about ten seconds after
the banner - a hundred passes at the latched cadence #487 measured, as
designed - and no clear line, because the latch never cleared. Its operands
agree with the arms that derived them: inShards=549 (arm 1's pinned population),
parkedForRetry=138 (inside the band arms 1-3 measured), all twenty partitions
paused. Written into the scenario's own Calibration status block, which owns
these numbers.

THE SIGHTING. The Lincheck lane cancelled at its 20-minute budget twice on this
branch, with every other job in both runs green. It is the lane, not the branch,
and the control arm is a documentation-only branch that succeeded at 19m58s the
same afternoon - it cannot change what the model checker explores. A third
branch took 12m55s. Against a recorded 7m42s baseline, which side of the bound a
branch lands on is the runner it drew. Also ruled out directly: no harness in
the lane reaches the changed code - WorkManagerLincheckTest's operations are
handleFutureResult and the revoke/reassign pair, and no harness mentions the
intake gate.

Recorded in the lane's own note because a CI log expires and the evidence that a
red was infrastructure does not survive it. The decision it needs - a larger
budget, fewer iterations on the arm that dominates the wall clock, or a split -
is left open there.

Co-Authored-By: Claude Opus <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
astubbs added a commit that referenced this pull request Sep 9, 2026
… not "any poison"

Owner review point, 2026-09-09. "Retry-forever plus any poison at all" was
inherited from #487 and overstates the result.

A SINGLE record that never succeeds does not latch the gate and cannot. The gate
is inShards minus parkedForRetry against target times loading factor: one held
record, minus one parked while it waits out its back-off, is nowhere near a
threshold of tens. Its offset map encodes a single gap compactly, the commit sits
below it, and the instance runs indefinitely with that record retrying beneath a
healthy stream that keeps retiring.

What latches the gate is a non-zero FRACTION of a live stream that never
succeeds, and both properties that make it inevitable are about the population
rather than any one record: healthy records retire and leave the shards, these do
not, so their share of what is held rises monotonically while the stream keeps
arriving, and the parked term subtracted from it is bounded by throughput rather
than population. "Any fraction" is the correct claim and still a strong one -
the measured arm reached it at 1%.

Corrected in place in the note, which is the live record rather than a dated one,
with a dated section saying what was corrected and why. #487's own text on
master is left alone; the soak scenario's Calibration status block carries the
correction as a note against its verdict rather than a rewrite of it, because a
dated record of runs may not be edited to match today's reading - none of its
measurements change, only the claim drawn from them narrows. Every arm it ran was
a fraction (0.5, then 0.01).

Co-Authored-By: Claude Opus <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
astubbs added a commit that referenced this pull request Sep 9, 2026
… nothing retiring (#497)

#487 measured the record-intake stall and left the
cheap mitigation written up but not built. An instance that retries forever,
while a non-zero fraction of its stream never succeeds, ends with every
partition paused, its workers churning on records that never retire, and
nothing whatsoever in the log - the state was exported only as the
pc.partitions.paused gauge. In 487's low-poison arm the instance reached it
with eleven of its fourteen workers idle, looking healthy from outside. This
is that mitigation: one observation and one log line.

IT TAKES A FRACTION, NOT ONE BAD RECORD. A single record that never succeeds
is one held minus one parked against a threshold of tens, so it never
crosses; its offset map encodes one gap compactly, the commit sits below it,
and the instance runs indefinitely with that record retrying underneath a
healthy stream. What latches the gate is the share of held records that
never leave rising while the stream keeps arriving - healthy ones retire,
these do not - and the term subtracted from that share is bounded by
throughput rather than by population, so it crosses eventually. 487's own
wording, "retry-forever and any poison at all", overstates it and is
corrected here; its measurements are untouched, because every arm it ran was
a fraction.

NO SEMANTIC CHANGE. The gate's decision, the poller's pausing, the retry
service and every counter are untouched. isSufficientlyLoaded() returns
exactly what it returned before, and the broker-poll thread's route into it
through shouldThrottle() observes nothing at all. The control loop's
once-per-pass call in maybeWakeupPoller becomes
isSufficientlyLoadedReportingLatch(pausedPartitions), which takes ONE
reading of the shards and uses it for both the wakeup decision and the
report - so the report can never print an equation the decision was not made
on, the same trap ShardManager#getWorkableRecords already exists to close
for the DEBUG line.

CONSECUTIVE PASSES, NOT ELAPSED TIME. Both operands were already there: the
gate's own reading, and RecordPopulation#getRetiredTotal, which is monotonic
and is exactly "no record left a shard, by any route". Nothing new is
counted and no clock is read. A timing bound would be a threshold argument
nobody can win.

WHY A HUNDRED, AND WHERE IT IS WRONG. Chosen from the loop's two cadences
rather than a target wall-clock time, because when nothing retires the pass
rate differs by two orders of magnitude between the state being reported and
the state that must not be. Latched, every held record fails on every
attempt, so results arrive in the mailbox continuously and each pass returns
at once - 487's low-poison arm measured 6,201 gate evaluations across a
nine-minute unbroken latch, about 87ms a pass, so a hundred passes is about
nine seconds, and the state is permanent so a few seconds late costs
nothing. Healthy inside a long user function, the mailbox is empty and each
pass blocks for the commit interval, five seconds by default - so a hundred
passes is over eight minutes in which not one record anywhere retired. The
pass count gives the healthy case roughly fifty times the grace it gives the
latch, which no single elapsed-time bound can do. PC puts no ceiling on a
user function, which is why the report is a WARN and not an exception.

Eight minutes is the best case, not the bound, which the first draft of the
derivation got wrong and two review passes caught between them.
getTimeToBlockFor has two branches. On one, the healthy bound is the commit
interval - and under the transactional commit mode that default is two
orders of magnitude shorter, so the grace collapses to the same order as the
latched cadence. On the other, taken whenever dispatch sits below full
concurrency (the ordinary state under KEY or PARTITION ordering with fewer
active keys than maxConcurrency allows) and any record is in retry back-off,
the pass blocks for the retry delay instead - a one-second cadence on stock
defaults, about a hundred seconds of grace rather than eight minutes, with
no unusual configuration at all. Both are now named where the constant is
defined and in the note, the second marked as a static trace of the two
branches rather than a measured arm. The trigger is deliberately NOT
narrowed on parkedForRetry, which would separate a latched instance from a
merely-slow one: the line already prints that operand so a human can
separate them, and changing what fires wants its own measured arm, because a
transient zero in the parked count would suppress a real latch. Left open in
the note with both candidates.

ONCE, THEN QUIET, AND THE CLEAR SAYS WHICH CLEAR IT WAS - WITHOUT CLAIMING
RECOVERY. The WARN fires on the pass that reaches the count and not again,
naming inShards, parkedForRetry, workable, target times loading factor and
the paused-partition count as of the last poll - scalars only, so the line
cannot be truncated past the point where it stops identifying the event. The
clear is two statements, because the two ways it clears are not the same
news: a gate that has gone unloaded means the poller can fetch again and
says so, while records leaving the shards under a still-loaded gate leaves
the poller paused. Either clear re-arms the WARN.

Neither says processing recovered, and that is the correction review forced.
The trigger reads getRetiredTotal, which rises when a record leaves a shard
by ANY route - success, revocation, or a stale container being swept. Right
for the trigger: a revocation really does drain the shards and unlatch the
gate. Wrong for a message, because revoking a stalled instance is exactly
what an operator or the group coordinator does TO one, so "intake has
resumed" would have been an all-clear delivered at the moment somebody was
intervening, with nothing having succeeded. Both lines now report what is
measured and name the three routes, pinned by an arm that latches, revokes
with zero successes, and asserts the clear does not claim recovery.

THREAD MODEL. The three counters are written and read only by
observeLoadGateLatch, whose one production caller is maybeWakeupPoller on
the control thread. They deliberately carry no @ThreadConfined and no
owning-thread assertion, which is this repo's usual pairing: the harness
drives controlLoop from more than one thread inside a single test, so the
assertion would fire on a legitimate caller, and a diagnostic that can kill
the consumer is a worse trade than one that can miscount. No decision reads
these fields. The ledger entry points at the javadoc rather than restating
it.

RED FIRST, ON EVERY CLAUSE. Four sabotage arms, each restored. With the
report removed entirely - master's behaviour - the two positive tests fail
on their assertions rather than on compilation, and the control test still
passes, which is what a negative control should do. Dropping only the
"nothing retired" clause flips exactly the other two: the healthy-instance
test sees a WARN naming 300 held records, and the recovery line never
arrives. Deleting the count reset from the recovery branch fires the second
WARN one pass after the recovery instead of a hundred, which the re-arm arm
now catches. Dropping the honest tail from the all-clear branch reddens the
revocation arm.

CONFIRMED AGAINST A REAL BROKER. One run of CommitResponseTimeoutSoakIT's
KEY arm at 487's seed and failure fraction reproduced its number exactly
(succeeded=451) and emitted exactly one WARN, about ten seconds in - the
hundred passes at the measured latched cadence - with operands agreeing with
the arms that derived them: inShards=549, parkedForRetry=138, all twenty
partitions paused. No clear line in four minutes, because the latch never
clears. Recorded in the scenario's own Calibration status block.

REVIEWED FIVE WAYS. Codex found five things; four taken. A local
simplification pass found one - sharing the operand tail across the log
statements - rejected, because it would trade per-field arguments for one
opaque token and make each line unsearchable in source. A local review pass
found three more, all fixed: the false all-clear above; a mutant that
survived every test, deleting the count reset from the recovery branch while
leaving the flag reset, which the re-arm arm could not see because it
asserted a cumulative count after a full batch rather than the boundary; and
the wrong bound in the threshold derivation. The automated review on the PR
then found the half of the threshold correction the local pass had missed -
the retry-delay branch above. One finding is left open for the owner rather
than fixed: the observation runs only while the state is RUNNING, so a
graceful shutdown hanging in DRAINING - a plausible shape of this defect -
is never reported, and widening that guard is a decision about what the
diagnostic is for.

The Codex finding rejected, with the argument recorded as a dated cleared
suspicion: moving the observation after the mailbox drain. The observation
sits at the same point in every pass, so the window between two readings
spans a whole pass, drain included, and no retirement falls between them;
what the position costs is one pass of latency out of a hundred,
self-correcting on the next pass. Both remedies are worse - a second gate
read per pass buys it with an O(n) fair-lock acquisition on the hottest path
and reintroduces the equation-the-decision-was-not-made-on trap, and gating
on an empty mailbox would suppress the WARN in exactly the state it exists
for, because the latched workload's failure results flow through that same
mailbox continuously.

Also here: BrokerPollSystem gains getPausedPartitionCountForBackPressure(),
with isSubscriptionsPausedForBackPressure() expressed in terms of it; an
unposted draft response for the issue mirror, scoped to append to its Fork
status rather than replace it; and a sighting of the Lincheck lane
cancelling at its twenty-minute budget - this branch on both sides of the
bound, three cancels and one 19m57s pass with nothing changed that the lane
can see. That sighting is now corroboration rather than a diagnosis of its
own: #499 established the cause across every branch
on the day and raised the cap, and the note keeps 499's section whole with
this branch's data pointing at it.

Serves #119 (confluentinc#857);
closes neither. The fix that bounds the failures rather than the buffer is
#149's dead-letter queue, and the note stays open
on it.

Co-authored-by: Claude Opus (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Sep 9, 2026
The gate-latch warning is on master, which ticks the last tier 1 box.
The line records what the reviews settled: the trigger is consecutive
passes rather than elapsed time, the soak confirmation at #487's
seed, the two design calls left for the owner, and the correction that
the latch takes a fraction of never-succeeding records rather than one.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
astubbs added a commit that referenced this pull request Sep 10, 2026
…ut it (#475)

0.6.0.0 is a bugs-only stability release, and it is overdue: the fork has
carried the fixes for upstream's most-reported defects for months while the
release waited on features. This note is the source of truth for cutting it -
the owner's decisions, the merge queue from those decisions to the tag, every
open question, and the checks that make the published artefacts true on the
day. #197 is the tracking handle and its body points here; nothing is
maintained on the issue.

THE DECISIONS, 2026-09-07 and confirmed since. The bar is the stability
release and nothing else; Streams and Connect move to the next-0x horizon in
the roadmap data; the producer-recovery stack is outside v6. The release
claim carries two named exceptions rather than waiting on them: the
transactional revoke wait (#44, bounded since #466, not yet
declined) and, from 2026-09-09, the poisoned-transaction wedge, both in the
transactional producer mode only. The merge queue closed on 2026-09-09; later
finds are 0.6.0.x unless they are data loss on a default configuration.

THE BURN-DOWN, recorded as each merge landed. Tier 1, the self-contained
fixes, is complete: the last two to join were the batchSize bound
(#496) and the gate-latch warning (#497), both decided v6-sized
on the day the queue closed. Tier 3, the plumbing, has the changelog section
finalised as the release notes and the claim amended (#498) and the
release page body posted verbatim from CHANGELOG.md by release.yml (#501,
closing #199); what remains is the tag-day checks, the drafted issue
responses, and the tag. A can-follow list names what is deliberately
not v6.

WHAT THE RELEASE NOTE SAYS ABOUT THE confluentinc#857 FAMILY, each line with
the PR that settled it: the revoke-path deadlock proven by control arm, the
eager stall withdrawn as a timing bound that flips with the processor count,
the fifth item measured as the consumer-group protocol under churn rather
than PC, the poller death fixed, the instance-stall sightings classified as
worker saturation from the load side. The intake stall #471 found has
its verdict from #487: the record-intake load gate is what stops
intake, head-of-line blocking is not why, and any instance that retries
forever while a fraction of its stream never succeeds latches eventually at a
computable threshold, idle or not. There is no gate fix; the fix bounds the
failures (#149's dead-letter queue), and until then #497 makes
the state visible. One arm stays unattributed and is named as such.

DATA LOSS AND DUPLICATES: the bug-162 replay branch refuted and the false
truncation warning fixed (#494, closing #162).

KNOWN UNKNOWNS, split in two so nothing is papered over: what is still
unknown at the cut - the shard half of the per-shard liveness blind spot, the
flake rows kept open with reasons, the maturity claim - and, under its own
heading, the unknowns made known on 2026-09-08 and how each was settled.

TAG-DAY CHECKS, folded in from the retired blockers note: master green with
the lanes known to lie named, the churn scenario's no-progress window settled
by replay and widened in #499 with the rebalance-dwell bound named as
that class's survivor, the Lincheck lane's timeout raised against runner-speed
variance, the rename named in both groupId and packages, the README's
trademark wording claiming nothing it does not have (#495), and the
changelog section as the release notes since #498, posted as the release
body by release.yml since #501.

ONE CHANGELOG EDIT, on the owner's decision of 2026-09-10: the "size of this
release" table of merged-PR and line counts is removed. Measured on a branch,
carrying its own re-measure instruction, stale from the next merge on; the
notes make their claim through the fixes they name.

Also here: a ci- note from this PR's own last review round - the file-refs
gate reads a token as a path only with two segments, so the changelog rename
left this branch-only note naming the old file with nothing to go red, and
the note records the allow-list that would close it; the vetting sweep's
reading and every open bug note's disposition,
moved into the ranking note where the tiers override them; a dated survey of
upstream items with no fix and no response as its own deferred note; the
refactoring registry's codec entry corrected for what #480 did and did
not change; and the confluentinc#546 manifest entry marked merged. Two notes
retired with their content migrated: the blockers register and the
merge-order plan for a far larger v6. The question this note began as, "when
is v6 good enough?", was answered on 2026-09-08 and the file renamed.

Serves #197; closes nothing. The tracker closes when
the tag is cut.

Co-authored-by: Claude Fable 5.1 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Sep 17, 2026
…data pattern, not a count of failing records

The Known limitations bullet said any instance holding records that never
succeed will eventually stop fetching. That is wrong on its own source:
#497 says a single failing record, or a bounded set, never latches
the intake gate, and the soak in #487 measured the gate at a
42-record target where a larger messageBufferSize removed it. What bounds
the system is the offset-encoding contract: the committed offset is the
lowest incomplete one, the completions above it are encoded into 4 KB of
commit metadata, and regular patterns - a contiguous run of failures, or
every second offset failing - compress to almost nothing, so only an
irregular scatter of permanent failures among successes outgrows it. The
bullet now says that, keeps the gate as the separate and configuration-
dependent thing it is, and says the gate is slated for removal by the
direct-pull engine (#361). The published release page is edited to
match.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
astubbs added a commit that referenced this pull request Sep 17, 2026
…data pattern, not a count of failing records

The Known limitations bullet said any instance holding records that never
succeed will eventually stop fetching. That is wrong on its own source:
#497 says a single failing record, or a bounded set, never latches
the intake gate, and the soak in #487 measured the gate at a
42-record target where a larger messageBufferSize raised the ceiling.
What bounds the system is the offset-encoding contract: the committed
offset is the lowest incomplete one, the completions above it are encoded
into 4 KB of commit metadata, and regular patterns - a contiguous run of
failures, or every second offset failing - compress to almost nothing, so
only an irregular scatter of permanent failures among successes outgrows
it. The bullet now says that, as a nested list, and keeps the intake gate
as the separate, configuration-dependent thing it is. The published
release page is edited to match.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019XS64Xttx4vF5datYh7fmk
astubbs added a commit that referenced this pull request Sep 18, 2026
…inds no commit-response timeout (#518)

Records three arms of CommitResponseTimeoutSoakIT on the released code (v0.6.0.0
plus two docs commits, 2e6f13e) in the scenario's Calibration status and in
docs/inflight/bug-177-commit-response-timeout-unreproduced.md. No product or
test code changes - the record is the deliverable.

The question since #471: does a BARE "Timeout waiting for commit
response" - the poller wedged but alive, the one mechanism nobody has
characterised - ever appear on the released code when the workload is arranged
so the intake gate does not latch and commits keep happening for the whole
soak. #471's two 30-minute runs could not answer it: the retry-forever
poison latched the record-intake gate inside the first minute and no commit
was attempted after that, which #487 measured and #497 made loud.

Common to all arms: seed 3747722682837130843, failureFraction 0.5,
PERIODIC_CONSUMER_SYNC at 1s, 1000 keys over 20 partitions, maxConcurrency 14,
100ms user function, 1000 records every 20s, retry-forever; Testcontainers
confluentinc/cp-kafka:7.9.0 on Docker; a Linux x86_64 workstation with every
JVM pinned to 8 processors; no other Maven JVM on the box at the start of any
arm; -Dpc.loadgate.log.level=info and -Dsoak.progressInterval=PT30S. Commit
activity was read from the broker's __consumer_offsets with the broker's own
formatter, because every commit-path line in the product is DEBUG.

Arm A - control, unchanged, 6 minutes. The latch reproduces on the released
code to the number: succeeded frozen at 451 from the first 30s sample, the
#497 WARN 13.2s after the banner (inShards=549 parkedForRetry=140
workable=409 vs 42, pausedPartitions=20), every partition paused at all 11
samples, failed 49,710 (138/s). The broker saw 8 commit instants, all inside
the first 7.3s, and none in the remaining 5m50s. Load average 2.93 -> 1.54.

Arm B - 30 minutes, -Dsoak.messageBufferSize=20000, KEY, everything else the
reporter's. No findings. The gate held open for 7m06s (loaded=false, zero
paused partitions, at every sample to inShards=20,103), then latched at
inShards=20993 vs target(14)*loadingFactor(1429)=20006 and stayed latched for
the remaining 22m54s - so the #487 arm-3 value buys about seven minutes
of this producer, not thirty, because under KEY nearly everything produced is
held. But the assertion had already stopped being falsifiable at 3m06s, four
minutes before the latch, and the gate is not why: successes went 680, 784,
869, 884, 893, 895, 897 and froze with the gate open, and the broker's last
commit landed 185.7s after the first (27 commit instants). Under KEY each key
retires records until its first poisoned one and never again, so permanent
poison bounds successes by the key space, and dirty is derived from
completions, so once successes stop commitAndWait is never entered. No buffer
size changes that under KEY. Succeeded 897, failed 250,067 (139/s). Load
average 1.17 -> 0.13.

Arm C - 30 minutes, -Dsoak.messageBufferSize=100000 -Dsoak.ordering=UNORDERED:
the only combination of the existing knobs that holds both conditions.
UNORDERED lifts the head-of-line bound so healthy records keep retiring;
100,000 clears the ~90,000 a thirty-minute producer can have held. Both held
for the whole run: loaded=false and zero paused partitions at all 59 samples,
inShards peaking at 51,949 against 100,002, no WARN, no back-pressure line;
succeeded 37,641 and still rising at the end, failed 213,533 (119/s); a commit
in every one of the thirty minutes - 619 commit instants, the last 1794.8s
after the first, offset-map metadata growing to 768 base64 chars per partition.
No findings: no bare timeout, no poller death, no thread dump written. Load
average 0.12 -> 1.46.

What it establishes, as a rate under conditions: on v0.6.0.0, one instance, a
quiet box, zero bare commit-response timeouts and zero poller deaths across 654
acknowledged commit instants, 619 of them in thirty minutes of a continuously
exercised commit path. One run at one shape; it says the shape did not
reproduce once, not that it cannot.

What it does not establish: anything about #175's own configuration
(128 partitions, concurrency 64, a user function of minutes - still unrun),
a loaded box, a rebalance, more than one instance, durations past thirty
minutes, or KEY ordering with the commit path alive - which on this evidence
needs the per-attempt-failure arm rather than a buffer size. Arm C departs from
#177's reporter's ordering deliberately, and says so in both records.

No new knobs were added: -Dsoak.duration, -Dsoak.messageBufferSize and
-Dsoak.ordering already existed. The only thing genuinely missing from the
harness - evidence that commits were being attempted - was taken from the
broker rather than by adding a log line, and the command is recorded in the
javadoc so the next run can do the same.

Co-authored-by: Claude Fable 5.1 (1M context) <noreply@anthropic.com>
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