Skip to content

fix(core) astubbs#120: unbounded PCMetrics heap growth, with the confluentinc#905 hot-shard metric - #57

Merged
astubbs merged 7 commits into
masterfrom
fix/859-metrics-leak-plus-cherrypicks
Aug 26, 2026
Merged

astubbs merged 7 commits into
masterfrom
fix/859-metrics-leak-plus-cherrypicks

Conversation

@astubbs

@astubbs astubbs commented Jul 28, 2026 •

Copy link
Copy Markdown
Owner

Fixes #120 - confluentinc#859, unbounded PCMetrics heap growth.

Summary

Two metrics changes: the PCMetrics leak and its teardown safety, and the hot-shard gauge carried from upstream. Plus an un-quarantine, a dead setter removal, and the records this work produced.

Scope changed on 2026-08-24. This PR previously also carried the confluentinc#893 cherry-pick (#121, offset accuracy on assignment). That work has been split out onto fix/121-offset-accuracy-on-assignment so it can be reviewed on its own: it fixes a correctness defect in committed offsets, and it has since grown a behavioural reproduction of confluentinc#894 plus the discovery of a second, silent failure mode. Reviewing that inside a metrics PR would have buried it. The two halves share no main-code file, so the split is clean rather than a stack — no dependency line needed.

Commit What
fix(core) astubbs#120 PCMetrics grew without bound, and its teardown could kill the poll thread
feat(core) confluentinc#905 Report the most-loaded shard, so a hot key is visible
test(metrics) astubbs#120 Un-quarantine metricsRegisterBinding by freezing it on offsets
refactor(core) astubbs#120 Drop the workManager setter, which nothing could use correctly
fix(static) astubbs#57 Shrink the Infer ratchet by five - four fixed, and one only silenced
tooling(upstream-map) astubbs#204 Set merged before merging, and a guard that insists
docs astubbs#120 The records this work produced, and the ones it retires

Re-cut at merge prep on 2026-08-26 into the seven above - linear, no merge commits, one
workstream each, on current master. Content is unchanged by the re-cut and was verified so:
git diff <old-tip> HEAD is empty. Every one of the seven passes bin/check-file-refs.sh
individually, not just the tip - two forward references (a commit citing a note another commit
created) were moved so a bisect cannot land on a red intermediate.

The changes

PCMetrics heap growth. registeredMeters was an ArrayList gaining a duplicate Meter.Id on every meter registration - which happens on every offset commit - even when an identical tag combination was already tracked. The reporter measured the retained list at 96% of heap after three days. Now a LinkedHashSet, with PartitionStateManager caching its OffsetMapCodecManager instead of creating a throwaway per partition assignment. Registration is guarded by a private metersLock, with the slow Micrometer register() deliberately outside it, and track() handles the close race rather than orphaning a meter in a user-supplied registry.

Metrics teardown can no longer take down consumption. Meter removal runs on the path that closes the instance, and an exception from the registry there propagated into the caller - which is the poll thread. A metrics backend having a bad day could fail a shutdown or stop consumption. Teardown now never throws, and the accessor between the two registry calls is guarded the same way. Same issue as the leak (confluentinc#859), which is why it lands in the same commit.

Hot-shard metric. shards.max.size reports the records queued in the most-loaded shard. shards.size alone cannot distinguish evenly-spread work from one key monopolising a shard, which under KEY ordering is exactly what an operator needs to see. Cherry-pick of confluentinc#905.

Un-quarantining metricsRegisterBinding. It was quarantined as flapping because it asserted PARTITION_LAST_COMMITTED_OFFSET against a shared completion counter while the suite runs UNORDERED - commits are contiguous and bounded by the lowest incomplete offset, completions are not ordered, so the gap was permanent and a pass proved nothing. Rewritten to gate on each record's own offset, with the worker pool asserted wide enough that getting it wrong fails rather than hangs.

Issues

Fixes #120 - confluentinc#859, the PCMetrics leak.

#121 is not in this PR's scope any more - it moves with the offset work to
#337, which carries the closing keyword for it. Worded without the keyword here on
purpose: GitHub matches closes <ref> wherever it appears, so "no longer closes ..." would have closed it.

Partly addresses, not closed here: #222 (metrics that expose what PC
delivers). Its item 3 asks for per-shard queue depth as "a distribution summary (or max/p99 shard
depth)", and the confluentinc#905 cherry-pick lands the max half - shards.max.size. Its items
1 and 2, head-of-line-blocking-avoided and end-to-end record latency, are untouched, as is the
distribution summary itself. That issue also predicted this: it says per-shard depth "needs a
maintained counter rather than a live size() call", and what ships here is the live walk, triaged
as negligible with a TODO(refactor) and the assessment in docs/refactoring.md.

Related, not closed here: #117 (confluentinc#233, the OffsetMapCodecManager refactor). This PR removes one throwaway-instantiation site; the structural refactor that issue asks for is untouched.

Checklist

  • Changelog entry added - N/A: AGENTS.md forbids a PR adding changelog entries, and the 0.6.0.0 section is regenerated from the commit log at release. The commit messages carry what the generator reads.
  • Docs updated - docs/upstream.md, docs/testing.md (a new section making good a promise AGENTS.md already made about silent test runs), docs/refactoring.md, docs/merge-checklist.md, src/docs/README_TEMPLATE.adoc (+ regenerated README.adoc), and new docs/solutions/ write-ups
  • Tests added/updated - PCMetrics859Test, RebalanceMetricsLeakTest, MetricsTeardownCannotBreakCloseTest, and the rewritten PCMetricsTest
  • Full core unit suite green - 458 tests, 0 failures, 8 skipped
  • upstream-map.yaml updated - including removing this PR from the confluentinc#893 entry it no longer carries

Notes for review

  • The branch was re-cut on 2026-08-24 into the six commits above. Content is unchanged by that re-cut; only history is. Verified with git diff <old-tip> HEAD, which names only the offset-half files that moved out. The pre-recut tip is preserved as the backup/pr57-pre-split tag.
  • Both of this section's merge-blockers are gone, and neither was fixed by the branch. They are
    recorded rather than deleted because they were load-bearing for how this PR was read for weeks.
    Chaos Pain Suite was promoted to required and gating on 2026-08-26 - deliberately, and
    against the advice recorded at the time - so the old note that its header says "never PR-gating"
    is stale. It is green on this head, and mergeStateStatus is now CLEAN. Check PR Dependencies runs and passes, under a ruleset named All branches: PR dependency gate; the
    "expected" line still printed on a push is the ruleset evaluating a head whose checks have not
    started yet, not a check that never runs.
  • Two commits sit above the last LGTM. The review: human LGTM gate is head-insensitive by
    design (docs/ci.md, "The second required check"), so the green tick says nothing about which head
    was read - gh api repos/astubbs/parallel-consumer/pulls/57/reviews does. The last owner LGTM is
    2026-08-26 10:45:58 on 221a2bdd8, after the master merge, so the merge and the post-merge
    pass are covered. Not covered: the handoff extraction and the Infer ratchet shrink, both written in
    answer to that same review round.
  • One finding was silenced rather than fixed, and it is written down. The Infer ratchet shrank by
    five identities; four are the PCMetrics races this PR fixed, and the fifth - a null dereference in
    OffsetMapCodecManager - stopped being reported because removing the workManager setter
    collapsed the path Infer walked to reach it. The defect is unchanged in the source. It is now
    docs/inflight/bug-epoch-null-unboxes-on-partition-assignment.md; it is deliberately not fixed
    here, because null means not yet assigned and the caller has to choose fail-open or fail-closed
    on the offset path.

@github-actions

Copy link
Copy Markdown

Dependency Review

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

Scanned Files

None

@github-actions

github-actions Bot commented Jul 28, 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 32 32 ➖ 0
Duplicated lines 1023 1023 ➖ 0
Duplication 0.13% 0.13% ➖ 0
Rule Limit Status
Max duplication 0.5% ✅ Pass (0.13%)
Max increase vs base +0.1% ✅ Pass (+0.00%)

No new clones introduced by this PR.

✅ jscpd (language-agnostic)

PR Base Change
Clones 89 88 🫤 +1
Duplicated lines 1277 1264 :face_with_monocle: +13
Duplication 1.09% 1.10% 🙂 -0.01%
Rule Limit Status
Max duplication 2% ✅ Pass (1.09%)
Max increase vs base +0.1% ✅ Pass (-0.01%)
⚠️ 1 new clones introduced
  • 14 lines: parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RebalanceMetricsLeakTest.java:1 <-> parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerRevokeSweepNpeTest.java:1

Powered by astubbs/duplicate-code-cross-check

@github-actions

github-actions Bot commented Jul 28, 2026 •

Copy link
Copy Markdown

📌 Duplicate code detection tool report

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

🆕 New file similarities introduced

File A File B Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/metrics/PCMetrics.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/metrics/PCMetrics859Test.java 42.6
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/metrics/PCMetrics859Test.java 37.9
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/metrics/PCMetrics.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java 32.3

🔺 Increased similarities

File A File B Base (%) PR (%) Change
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.1 48.4 +0.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 46.2 46.5 +0.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 45.2 45.5 +0.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 45.1 45.4 +0.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 58.3 58.6 +0.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 41.0 41.3 +0.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java 40.8 41.0 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 31.0 31.2 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 30.2 30.5 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java 42.9 43.1 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 53.0 53.2 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 54.2 54.5 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 40.4 40.6 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 48.7 48.9 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 49.2 49.4 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java 30.0 30.2 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 46.2 46.4 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 31.5 31.7 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 32.6 32.8 +0.2
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java 31.9 32.0 +0.1

...and 49 more

Full similarity report
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 41.62
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/SeenSucceededOrderingProbes.java 37.27
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/SeenSucceededOrderingProbes.java 37.08
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CommitPathVisibilityProbes.java 37.07
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/SeenSucceededOrderingProbes.java 55.43 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java 41.62
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java 37.07
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.43 ⚠️
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/BootstrapResetTripleWriteProbes.java 37.27
jcstress-poc/src/main/java/bz/stub/parallelconsumer/jcstress/CalibrationProbes.java 37.08
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 53.21 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 37.79
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java 34.39
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 34.01
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 32.58
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 32.49
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 31.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 30.9
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 64.45 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 58.56 ⚠️
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 42.85
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 41.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 35.96
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 33.45
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 31.7
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java 30.2
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 64.45 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 54.45 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 40.57
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 35.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 34.89
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 32.62
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 30.44
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/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 34.39
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 32.55
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 53.21 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 51.03 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 41.48
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 32.95
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 32.06
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java 32.05
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/ProducerManager.java 30.22
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 58.56 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 54.45 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 48.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 36.8
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/TestParallelEoSStreamProcessor.java 34.68
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 32.78
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 30.27
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 48.88
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 41.3
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 40.57
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 36.01
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 43.11
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 30.52
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/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 36.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 35.96
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 34.89
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/RecordContextInternal.java 34.21
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContext.java 30.52
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 43.11
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PollContextInternal.java 34.21
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 30.2
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 43.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/BrokerPollSystem.java 32.74
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 32.34
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorConfigurationTest.java 31.61
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 30.27
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 32.74
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/test/java/bz/stub/parallelconsumer/CommitResponseTimeoutSymptomTest.java 32.4
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 46.38
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 32.34
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 30.82
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/EncodingNotSupportedException.java 57.5 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 51.03 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 50.88 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 48.43
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java 41.02
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 37.79
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 34.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/PCRetriableException.java 32.55
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 31.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 30.46
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 41.02
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 32.05
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 31.42
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/test/java/bz/stub/parallelconsumer/internal/PCModuleCollaboratorOwnershipTest.java 34.65
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PollThreadStallDiagnosis.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/AmbientProbeExtension.java 32.92
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollThreadStallDiagnosisTest.java 31.85
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/ParallelConsumerOptions.java 30.22
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/main/java/bz/stub/parallelconsumer/internal/utils/JavaUtils.java 34.12
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/CollectionUtils.java 31.83
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 38.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtils.java 34.12
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 42.62
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java 32.33
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/EncodingNotSupportedException.java 49.38
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 35.47
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 34.58
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 34.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 32.95
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 32.49
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 31.36
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 57.5 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 49.38
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 47.9
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 46.52
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 45.5
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 45.36
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 41.48
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 34.01
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalRuntimeException.java 31.42
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.43
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 46.39
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 45.5
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 35.74
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV2EncodingNotSupported.java 34.85
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.88 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 47.9
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 46.39
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 32.58
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelConsumerException.java 32.06
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 31.36
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/RunLengthV1EncodingNotSupported.java 30.13
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 61.04 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 46.52
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 35.74
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 35.47
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 31.69
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 31.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/OffsetDecodingError.java 30.13
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 61.04 ⚠️
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/EncodingNotSupportedException.java 45.36
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/NoEncodingPossibleException.java 34.85
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/offsets/BitSetEncodingNotSupportedException.java 34.58
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ExceptionInUserFunctionException.java 30.9
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/InternalException.java 30.46
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/state/PartitionStateManager.java 33.02
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 31.36
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 44.83
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 33.02
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 34.08
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/WorkManager.java 32.37
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 34.08
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 53.66 ⚠️
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 44.83
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/ProcessingShard.java 32.37
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/state/PartitionState.java 31.36
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/AmbientProbeExtension.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PollThreadStallDiagnosis.java 32.92
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AmbientProbeExtensionTest.java 30.73
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 32.77
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 57.01 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 43.57
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 35.9
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/VeryLargeMessageVolumeTest.java 39.93
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 39.29
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 35.9
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/RebalanceTest.java 35.42
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/RebalanceTest.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/RebalanceEoSDeadlockTest.java 35.42
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 54.2 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceHighVolumeTest.java 43.57
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 39.29
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 30.82
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 57.01 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 54.2 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/MultiInstanceRebalanceTest.java 39.93
parallel-consumer-vertx/src/test-integration/java/bz/stub/parallelconsumer/vertx/integrationTests/VertxConcurrencyIT.java 35.51
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/ChaosRevokeUnderWorkKeyOrderIT.java 39.42
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 39.02
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 38.5
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ProgressProbe.java 34.92
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosRevokeUnderWorkIT.java 32.98
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 47.13
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 38.5
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 32.53
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 52.94 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 47.13
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 39.02
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosScenarioBase.java 35.44
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ProgressProbe.java 31.57
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/KeyOrderLedger.java 30.64
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 39.18
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 42.45
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 39.18
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 42.45
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 32.98
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 52.94 ⚠️
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 39.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/ChaosKeyOrderIT.java 35.44
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosChurnStormIT.java 32.53
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 52.49 ⚠️
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 52.49 ⚠️
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 31.86
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 30.64
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 31.86
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ProgressProbe.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/AbstractRevokeUnderWorkScenario.java 34.92
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/chaostests/ChaosKeyOrderIT.java 31.57
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 40.76
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/AbstractParallelEoSStreamProcessor.java 31.61
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/internal/utils/KafkaTestUtils.java 31.51
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AmbientProbeExtensionTest.java

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

File Similarity (%)
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/AmbientProbeExtension.java 30.73
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/BatchTestBase.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 30.1
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/QuarantineLaneReportScriptTest.java 47.67
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineRegistryScriptTest.java 45.23
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/CommitResponseTimeoutSymptomTest.java 32.14
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 37.64
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ConsumerOffsetCommitter.java 32.4
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CommitRejectionTestBase.java 32.14
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 51.49 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 49.88
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 44.45
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/BatchTestBase.java 30.1
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 44.56
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 44.56
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 37.64
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 34.85
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 34.85
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 47.67
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineRegistryScriptTest.java 30.37
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 45.23
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/QuarantineLaneReportScriptTest.java 30.37
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 86.99 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 86.04 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 86.04 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 83.61 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 83.61 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 83.61 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 82.11 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 82.11 ⚠️
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 46.38
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 37.92
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/metrics/PCMetrics.java 32.33
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PCModuleCollaboratorOwnershipTest.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PCModule.java 34.65
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/PollThreadStallDiagnosisTest.java

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

File Similarity (%)
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/PollThreadStallDiagnosis.java 31.85
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 43.24
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorConfigurationTest.java 40.76
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 34.68
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 31.7
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 30.44
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/BlockedThreadAsserter.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/BlockedThreadAsserterTest.java 31.47
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/BlockedThreadAsserterTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/BlockedThreadAsserter.java 31.47
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 38.8
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/utils/Java8StreamUtils.java 31.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/utils/KafkaTestUtils.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/AbstractParallelEoSStreamProcessorTestBase.java 31.51
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 32.77
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 42.62
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/internal/MetricsTeardownCannotBreakCloseTest.java 37.92
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 37.35
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 37.35
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckHarness.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 31.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckToolchainProbeTest.java 31.26
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckToolchainProbeTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 36.73
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckHarness.java 31.26
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 47.64
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingEncodeWindowState.java 38.53
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RacingCommitCycleState.java 30.47
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 47.64
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitShiftCompounding894Test.java 43.05
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java 34.28
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 43.05
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 34.78
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateCommitEncodeShift894Test.java 34.28
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueLincheckTest.java 33.5
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java 32.76
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 59.03 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OffsetEncoderWidenedRangeRaceTest.java 30.47
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 59.03 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/OffsetEncoderWidenedRangeRaceTest.java 38.53
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 42.63
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java 33.5
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java 32.18
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 42.63
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckToolchainProbeTest.java 36.73
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/PartitionStateLincheckTest.java 34.78
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/LincheckHarness.java 31.83
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerLincheckTest.java 31.13
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerRevokeSweepNpeTest.java

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

File Similarity (%)
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/WorkManagerStaleCheckDoubleLookupTest.java 35.77
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/main/java/bz/stub/parallelconsumer/state/WorkContainer.java 53.66 ⚠️
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/PartitionStateLincheckTest.java 32.76
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/RetryQueueLincheckTest.java 32.18
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/state/ShardManagerLincheckTest.java 31.13
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/ShardManagerRevokeSweepNpeTest.java 35.77
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.12
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.12
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 36.61
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 39.45
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/integrationTests/CoreAppMetricsIntegrationTest.java 36.25
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/VertxAppTest.java 35.2
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.61 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 83.28 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.38 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.38 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 80.05 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 80.05 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 78.61 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 78.61 ⚠️
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 82.11 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 81.79 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 80.9 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 80.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 78.61 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 78.61 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 78.61 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 77.2 ⚠️
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.25
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 69.59 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/main/java/bz/stub/parallelconsumer/examples/core/CoreApp.java 36.61
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 46.17
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java 39.45
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.61 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 83.28 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.38 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.38 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 80.05 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 80.05 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 78.61 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 78.61 ⚠️
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 82.11 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 81.79 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 80.9 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 80.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 78.61 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 78.61 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 78.61 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 77.2 ⚠️
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 69.59 ⚠️
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.61 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 83.28 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 82.38 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 82.38 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 80.05 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 80.05 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 78.61 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 78.61 ⚠️
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 46.17
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/CoreAppTest.java 35.2
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 50.84 ⚠️
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 78.92 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 49.88
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 48.18
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 67.52 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyUnitTestBase.java

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

File Similarity (%)
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorUnitTestBase.java 31.21
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.04 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 85.7 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 84.77 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 82.38 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 82.38 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 82.38 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 80.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 80.9 ⚠️
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 50.84 ⚠️
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 78.92 ⚠️
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 51.49 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/VertxBatchTest.java 49.71
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 67.52 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/ReactorUnitTestBase.java

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

File Similarity (%)
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyUnitTestBase.java 31.21
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.04 ⚠️
parallel-consumer-vertx/src/test/java/bz/stub/parallelconsumer/vertx/TestConventionsArchTest.java 85.7 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 84.77 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 82.38 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 82.38 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 82.38 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 80.9 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 80.9 ⚠️
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-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 42.85
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelEoSStreamProcessor.java 41.48
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 41.36
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/VertxParallelStreamProcessor.java 37.56
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 35.24
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelEoSStreamProcessor.java 32.78
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/VertxParallelStreamProcessor.java 41.97
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 41.36
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/ParallelStreamProcessor.java 36.01
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelEoSStreamProcessor.java 33.45
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/JStreamParallelStreamProcessor.java 32.62
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 43.42
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 41.48
parallel-consumer-core/src/main/java/bz/stub/parallelconsumer/internal/ExternalEngine.java 30.82
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/VertxParallelEoSStreamProcessor.java 43.42
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelStreamProcessor.java 41.97
parallel-consumer-vertx/src/main/java/bz/stub/parallelconsumer/vertx/JStreamVertxParallelEoSStreamProcessor.java 37.56
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 35.51
parallel-consumer-core/src/test-integration/java/bz/stub/parallelconsumer/integrationTests/TransactionAndCommitModeTest.java 30.82
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 86.99 ⚠️
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/TestConventionsArchTest.java 85.7 ⚠️
parallel-consumer-reactor/src/test/java/bz/stub/parallelconsumer/reactor/TestConventionsArchTest.java 85.7 ⚠️
parallel-consumer-examples/parallel-consumer-example-core/src/test/java/bz/stub/parallelconsumer/examples/core/TestConventionsArchTest.java 83.28 ⚠️
parallel-consumer-examples/parallel-consumer-example-reactor/src/test/java/bz/stub/parallelconsumer/examples/reactor/TestConventionsArchTest.java 83.28 ⚠️
parallel-consumer-examples/parallel-consumer-example-vertx/src/test/java/bz/stub/parallelconsumer/examples/vertx/TestConventionsArchTest.java 83.28 ⚠️
parallel-consumer-examples/parallel-consumer-example-metrics/src/test/java/bz/stub/parallelconsumer/examples/metrics/TestConventionsArchTest.java 81.79 ⚠️
parallel-consumer-examples/parallel-consumer-example-streams/src/test/java/bz/stub/parallelconsumer/examples/streams/TestConventionsArchTest.java 81.79 ⚠️
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 49.71
parallel-consumer-mutiny/src/test/java/bz/stub/parallelconsumer/mutiny/MutinyBatchTest.java 48.18
parallel-consumer-core/src/test/java/bz/stub/parallelconsumer/CoreBatchTest.java 44.45

@github-actions

github-actions Bot commented Jul 28, 2026 •

Copy link
Copy Markdown

⚠️ SpotBugs Report

306 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.

@codecov-commenter

codecov-commenter commented Jul 28, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 89.47368% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 78.30%. Comparing base (81aad6e) to head (aa809f9).

Files with missing lines Patch % Lines
.../confluent/parallelconsumer/metrics/PCMetrics.java 82.60% 3 Missing and 1 partial ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##             master      #57      +/-   ##
============================================
+ Coverage     78.03%   78.30%   +0.26%     
- Complexity       55     1081    +1026     
============================================
  Files            81       81              
  Lines          4039     4060      +21     
  Branches        372      377       +5     
============================================
+ Hits           3152     3179      +27     
+ Misses          712      707       -5     
+ Partials        175      174       -1     
Flag Coverage Δ
default ?
integration 68.63% <71.05%> (?)
performance 54.56% <71.05%> (?)
unit 73.25% <89.47%> (?)

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:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions

Copy link
Copy Markdown

❌ Mutation Testing (PIT) Report

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

astubbs added a commit that referenced this pull request Jul 28, 2026
Add a "Parallel-safe work while PR #57 is in flight" section to
docs/inflight.md recording, for each in-flight track, whether it
collides with PR #57's metrics/state files (857, 909, 51 -> sequence
after) or is parallel-safe (912, release, logging cleanup, security
bumps, contributor fixes, #40, confluentinc#915, DLQ), ranked by readiness.

Also refresh the confluentinc#859 entry to the consolidated PR #57 (bundles the
confluentinc#893/confluentinc#905 cherry-picks, supersedes the closed #42->#43->#45 stack) and
expand the confluentinc#912 entry (ready, pushed, no PR, vertx-isolated). Bump the
last-updated date.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Jul 28, 2026
Add a "Parallel-safe work while PR #57 is in flight" section to
docs/inflight.md recording, for each in-flight track, whether it
collides with PR #57's metrics/state files (857, 909, 51 -> sequence
after) or is parallel-safe (912, release, logging cleanup, security
bumps, contributor fixes, #40, confluentinc#915, DLQ), ranked by readiness.

Also refresh the confluentinc#859 entry to the consolidated PR #57 (bundles the
confluentinc#893/confluentinc#905 cherry-picks, supersedes the closed #42->#43->#45 stack) and
expand the confluentinc#912 entry (ready, pushed, no PR, vertx-isolated). Bump the
last-updated date.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@astubbs
astubbs force-pushed the fix/859-metrics-leak-plus-cherrypicks branch from a661860 to 19dcf5a Compare July 28, 2026 01:53
astubbs added a commit that referenced this pull request Jul 28, 2026
Render backlink comments from an optional per-entry backlink field in
upstream-map.yaml (source of truth) instead of a separate body, with the same
{{FORK_REPO}}/{{FORK_REF}}/{{SUMMARY}}/{{ID}} placeholders; entries without it
fall back to the generic templates. bug-859 uses it to explain the two-cause
leak vs the already-merged upstream confluentinc#892.

Make fork status honest about landed-ness. The old "fixed" conflated "fix
written" with "shipped": every "fixed" entry is actually an OPEN, unmerged fork
PR (or a branch with no PR). Replace with a lifecycle vocabulary
(none|in-progress|ready|pr-open|merged|released|superseded|wontfix) and correct
the entries: confluentinc#859/confluentinc#893/confluentinc#905 -> pr-open (in open PR #57), confluentinc#857 -> ready
(branch-only). Add an optional per-entry todo: list for outstanding actions
(merge the open PR, post the backlink) surfaced by "upstream-map.py todo", so
"still to do" is explicit rather than implied by an open PR + null forwarded.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Jul 28, 2026
…tus guard

Audited PR #57 against issue confluentinc#859. The code matches the issue (registeredMeters
List -> LinkedHashSet + prune, plus caching OffsetMapCodecManager in
PartitionStateManager), but the wording framed the leak as rebalance-driven when
the issue is commit-driven. Tighten bug-859 summary/notes/backlink: the List
accumulated a duplicate Meter.Id on every registration (every commit); fork PR
#57 fixes it via List->Set + PartitionStateManager caching (also closes #233);
upstream confluentinc#892 covers the per-commit churn; confluentinc#893/confluentinc#905 are unrelated cherry-picks.

Also fix upstream-backlink.sh: the fix-backlink status guard still checked the
removed "fixed" value, so it refused every entry after the lifecycle-status
change. Now allows ready|pr-open|merged|released and refuses none|in-progress.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Jul 28, 2026
Resolve docs/inflight.md: keep our upstream-map.yaml source-of-truth pointer
alongside masters new sections (parallel-safe work vs PR #57, PR #56 CI-gate
notes, @StandardException flaky build). AGENTS.md auto-merged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Jul 28, 2026
Cache the fork<->upstream relationship once, machine-readably, so it stops being
re-derived by hand every session. This fork (bz.stub.parallelconsumer) tracks the
effectively-archived confluentinc/parallel-consumer, whose issues/PRs are a backlog
worth mining and back-linking.

Source of truth:
- src/docs/development/upstream-map.yaml -- one entry per unit of work mapping fork
  branch/PR <-> upstream issue/PR, work group, lifecycle status
  (none|in-progress|ready|pr-open|merged|released), optional reconciliation, todo,
  and a public-facing backlink message. Header documents the schema; carries a
  last_swept date. Design follows Debian DEP-3 / Yocto Upstream-Status / OpenShift
  UPSTREAM.
- src/docs/development/upstream-pr-analysis.adoc slimmed to editorial judgement
  (rankings/verdicts/merge order) with anchors the manifest links to; the manifest
  wins for facts. docs/inflight.md points at the manifest for the durable mapping.

Tooling (scripts/):
- upstream-map.py -- validate | table | refs | show | meta | tracked | posted-refs | todo
- upstream-backlink.sh -- post a "fixed in the fork" / "maintained in a fork" comment
  to an upstream issue/PR, driven by the manifest. Dry-run by default; anti-spam:
  idempotent (skips already-forwarded), per-run cap, delay, status guard. Comment
  body comes from the entry's backlink field (single source of truth) or a template.
- upstream-sweep.sh -- read-only check for NEW upstream activity since last_swept and
  drift on tracked refs; --publish updates a single fork tracking issue.

Conventions: .gitmessage adds DEP-3-style upstream commit trailers (unforced);
AGENTS.md documents the whole system.

Seeded from the analysis doc, inflight notes, git and memory, and reconciled against
a live gh sweep -- which caught drift (upstream confluentinc#541/confluentinc#548 now closed, confluentinc#866 is Kafka
v4 not v7) and new items (confluentinc#892 merged, confluentinc#917/confluentinc#918/confluentinc#919/confluentinc#920/confluentinc#902). confluentinc#859 reconciled:
upstream confluentinc#892 fixed the per-commit meter churn; fork PR #57 fixes the tracking-List
(List->Set) plus assignment-path OffsetMapCodecManager caching.

Co-Authored-By: Claude Opus 4.8 (1M context) <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.

@claude do a review too

@claude

claude Bot commented Jul 28, 2026 •

Copy link
Copy Markdown

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


Claude's review todo list

  • Gather context (diff, changed files, CLAUDE.md)
  • Review PCMetrics.java changes (core leak fix)
  • Review PartitionStateManager.java / PartitionState.java changes
  • Review ShardManager.java / PCMetricsDef.java changes
  • Review test additions (PCMetricsTest859.java, MockConsumerTestWithEarlyClose.java)
  • Post final review

Review

Overall this is a well-scoped, well-explained bundle. The List→Set leak fix is the right call (Micrometer already dedupes the registry itself — only the tracking collection needed fixing), the #893 offset-accuracy cherry-pick is a faithful and correct port, and the #905 shard-max-size metric + .keySet().size() → .size() cleanup are trivial and safe. Note: I wasn't able to run a build/test in this sandbox (network/mvn access isn't available to me here), so this is a read-through review only — CI should be treated as authoritative for compile/test correctness.

1. Synchronization gap left by the P1 follow-up — PCMetrics.java

The 19dcf5a follow-up makes removeMetersByPrefixAndCommonTags synchronized to match close() and removeMeter(), but the four registration methods (getCounterFromMetricDef, getTimerFromMetricDef, gaugeFromMetricDef, getDistributionSummaryFromMetricDef) still call registeredMeters.add(...) without synchronization (PCMetrics.java:120-203).

This was already true pre-PR (the old ArrayList.add() wasn't synchronized either), but switching to LinkedHashSet makes it more fragile: an unsynchronized add() racing with a synchronized remove()/iteration on the same HashMap-backed structure is a classic path to silent corruption or ConcurrentModificationException, not just a "lost update." Concretely: PartitionStateManager.initPartitionCounters() calls getCounterFromMetricDef from the broker-poll thread during a rebalance (PartitionStateManager.java:143-152), while AbstractParallelEoSStreamProcessor.doClose() calls pcMetrics.close() from the control thread (AbstractParallelEoSStreamProcessor.java:662-664) — a rebalance racing with shutdown is a realistic scenario, not a hypothetical. Given the PR explicitly frames this commit as closing out synchronization concerns, it's worth either synchronizing the registration methods too or documenting why it's considered safe.

Fix this →

2. Minor: orphaned Javadoc block — PCMetrics.java:33-40

/**
 * Tracking of registered meters for removal from registry on shutdown.
 */
/**
 * Using LinkedHashSet to prevent duplicate entries when the same meter is registered multiple times
 * ...
 */
private Set<Meter.Id> registeredMeters = new LinkedHashSet<>();

Two back-to-back Javadoc blocks — the original one wasn't merged/removed when the new explanatory comment was added. Only the second attaches semantically; the first becomes dead. Worth squashing into one block.

3. Minor: commit message doesn't match its diff — 19dcf5a

The 19dcf5a commit message lists a 3rd change ("maven.yml prepare-deps cache save: if: success() instead of if: always()"), but the actual diff only touches PCMetrics.java and MockConsumerTestWithEarlyClose.java. That maven.yml condition is already if: success() on master (from c827712, unrelated to this PR) — so the fix itself is fine, just the commit message over-claims. No functional impact, just a bit misleading for anyone reading history later.

4. Test observations — PCMetricsTest859.java

  • Good coverage of the actual regression (duplicate registration, distinct tags, close(), prefix removal all assert against the tracking set size).
  • Reaching into the private registeredMeters field via reflection (PCMetricsTest859.java:118-127) is a bit of a smell but is reasonable here since the bug is specifically about the internal tracking collection and there's no public accessor — an alternative would be asserting against meterRegistry.getMeters().size() instead, which tests the externally observable leak rather than the implementation detail, but either is defensible.
  • closeShouldClearAllRegisteredMeters() calls pcMetrics.close() explicitly and @AfterEach calls it again — harmless (the second call just logs a warning and returns via the isClosed guard), but could be tightened by skipping the redundant call.

5. Cherry-picks (#893, #905)

Both look correct:

  • PartitionState.tryToEncodeOffsets() now computes getOffsetToCommit() once at the top and threads it through via Tuple, closing the dirty-read window between the old two separate calls — getOffsetToCommit() is a pure read over incompleteOffsets, so this is a safe and sufficient fix for the described race.
  • ShardManager SHARDS_MAX_SIZE gauge and the .keySet().size() → .size() simplification are both correct, low-risk changes.

6. CI status

jscpd flagged 4.20% duplication vs. a 4% threshold, but that's essentially unchanged from base (4.22%, i.e. this PR reduced duplication slightly) — pre-existing, not something this PR needs to fix. PIT mutation testing didn't produce a report (baseline test failure) — worth a look but likely unrelated to this diff; I didn't have CI log access to confirm root cause.


Nothing here blocks merging — #1 is the only item I'd consider worth addressing before/soon after merge; the rest are nits.

Branch: fix/859-metrics-leak-plus-cherrypicks

astubbs added a commit that referenced this pull request Jul 28, 2026
Cache the fork<->upstream relationship once, machine-readably, so it stops being
re-derived by hand every session. This fork (bz.stub.parallelconsumer) tracks the
effectively-archived confluentinc/parallel-consumer, whose issues/PRs are a backlog
worth mining and back-linking.

Source of truth:
- src/docs/development/upstream-map.yaml -- one entry per unit of work mapping fork
  branch/PR <-> upstream issue/PR, work group, lifecycle status
  (none|in-progress|ready|pr-open|merged|released), optional reconciliation, todo,
  and a public-facing backlink message. Header documents the schema; carries a
  last_swept date. Design follows Debian DEP-3 / Yocto Upstream-Status / OpenShift
  UPSTREAM.
- src/docs/development/upstream-pr-analysis.adoc slimmed to editorial judgement
  (rankings/verdicts/merge order) with anchors the manifest links to; the manifest
  wins for facts. docs/inflight.md points at the manifest for the durable mapping.

Tooling (scripts/):
- upstream-map.py -- validate | table | refs | show | meta | tracked | posted-refs | todo
- upstream-backlink.sh -- post a "fixed in the fork" / "maintained in a fork" comment
  to an upstream issue/PR, driven by the manifest. Dry-run by default; anti-spam:
  idempotent (skips already-forwarded), per-run cap, delay, status guard. Comment
  body comes from the entry's backlink field (single source of truth) or a template.
- upstream-sweep.sh -- read-only check for NEW upstream activity since last_swept and
  drift on tracked refs; --publish updates a single fork tracking issue.

Conventions: .gitmessage adds DEP-3-style upstream commit trailers (unforced);
AGENTS.md documents the whole system.

Seeded from the analysis doc, inflight notes, git and memory, and reconciled against
a live gh sweep -- which caught drift (upstream confluentinc#541/confluentinc#548 now closed, confluentinc#866 is Kafka
v4 not v7) and new items (confluentinc#892 merged, confluentinc#917/confluentinc#918/confluentinc#919/confluentinc#920/confluentinc#902). confluentinc#859 reconciled:
upstream confluentinc#892 fixed the per-commit meter churn; fork PR #57 fixes the tracking-List
(List->Set) plus assignment-path OffsetMapCodecManager caching.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Jul 28, 2026
Cache the fork<->upstream relationship once, machine-readably, so it stops being
re-derived by hand every session. This fork (bz.stub.parallelconsumer) tracks the
effectively-archived confluentinc/parallel-consumer, whose issues/PRs are a backlog
worth mining and back-linking.

Source of truth:
- src/docs/development/upstream-map.yaml -- one entry per unit of work mapping fork
  branch/PR <-> upstream issue/PR, work group, lifecycle status
  (none|in-progress|ready|pr-open|merged|released), optional reconciliation, todo,
  and a public-facing backlink message. Header documents the schema; carries a
  last_swept date. Design follows Debian DEP-3 / Yocto Upstream-Status / OpenShift
  UPSTREAM.
- src/docs/development/upstream-pr-analysis.adoc slimmed to editorial judgement
  (rankings/verdicts/merge order) with anchors the manifest links to; the manifest
  wins for facts. docs/inflight.md points at the manifest for the durable mapping.

Tooling (scripts/):
- upstream-map.py -- validate | table | refs | show | meta | tracked | posted-refs | todo
- upstream-backlink.sh -- post a "fixed in the fork" / "maintained in a fork" comment
  to an upstream issue/PR, driven by the manifest. Dry-run by default; anti-spam:
  idempotent (skips already-forwarded), per-run cap, delay, status guard. Comment
  body comes from the entry's backlink field (single source of truth) or a template.
- upstream-sweep.sh -- read-only check for NEW upstream activity since last_swept and
  drift on tracked refs; --publish updates a single fork tracking issue.

Conventions: .gitmessage adds DEP-3-style upstream commit trailers (unforced);
AGENTS.md documents the whole system.

Seeded from the analysis doc, inflight notes, git and memory, and reconciled against
a live gh sweep -- which caught drift (upstream confluentinc#541/confluentinc#548 now closed, confluentinc#866 is Kafka
v4 not v7) and new items (confluentinc#892 merged, confluentinc#917/confluentinc#918/confluentinc#919/confluentinc#920/confluentinc#902). confluentinc#859 reconciled:
upstream confluentinc#892 fixed the per-commit meter churn; fork PR #57 fixes the tracking-List
(List->Set) plus assignment-path OffsetMapCodecManager caching.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@astubbs
astubbs force-pushed the fix/859-metrics-leak-plus-cherrypicks branch from 344ed77 to 090d74b Compare July 28, 2026 06:27
astubbs added a commit that referenced this pull request Jul 28, 2026
Record the user-visible changes this PR introduces under the unreleased 0.6.0.0
section: the PCMetrics memory-leak fix, the accurate-committed-offset fix, and
the new shards.max.size metric. Follows the fork/upstream reference convention.

Upstream-Issue: confluentinc#859
Upstream-PR: confluentinc#893
Upstream-PR: confluentinc#905

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

astubbs commented Jul 28, 2026

Copy link
Copy Markdown
Owner Author

Thanks for the thorough review - went through all of it. Fixes pushed in 9c5c6ecf (+ changelog in 85fb2946), branch rebased onto current master.

1. Synchronization gap (the one worth doing) - fixed. All four register* methods now guard registeredMeters.add(...) with synchronized (this), so every mutation shares the same monitor as the synchronized close() / removeMeter() / removeMetersByPrefixAndCommonTags(). You're right that the List→LinkedHashSet switch turned a benign lost-update into a real corruption/CME risk (broker-poll thread registering during a rebalance vs control thread closing on shutdown). I also documented the "guarded by this" contract on the field. Verified with PCMetricsTest859 + PCMetricsTest (green).

2. Orphaned Javadoc - fixed. The two back-to-back blocks are merged into one.

3. 19dcf5a message over-claims a maven.yml change - acknowledged, leaving as-is. Correct that the maven.yml if: success() condition already came from master (c827712) and isn't in this diff. Since it's a historical commit message with no functional impact (and the branch has since been rebased), I'd rather not rewrite history just to trim the message - noting it here for the record instead.

4. Tests - acknowledged, keeping as-is. The reflection into registeredMeters is deliberate: the bug is the internal tracking collection, and there's no public accessor - asserting meterRegistry.getMeters().size() would test a different (Micrometer-deduped) thing. The redundant close() in @AfterEach is harmless (guarded by isClosed), so I left it for clarity.

5 / 6. Cherry-picks & CI - no action needed. Agreed the #893/#905 ports are faithful. jscpd is +0.00% vs base (pre-existing) and PIT's "no report" is a baseline test issue unrelated to this diff.

Also added the missing CHANGELOG.adoc entries (0.6.0.0: the leak fix, the offset fix, and the new shards.max.size metric) per our process.

@astubbs

astubbs commented Jul 28, 2026

Copy link
Copy Markdown
Owner Author

Follow-up note (not blocking this PR): the synchronization fix guards each registeredMeters mutation with synchronized (this), which is correct and matches the existing monitor. If PCMetrics grows more shared state later, a cleaner model than sprinkling synchronized would be a single dedicated lock (or a concurrent structure with externally-synchronized iteration) - capturing that here as review context rather than in the quiet-time refactoring backlog, since it is specific to this change.

astubbs added a commit that referenced this pull request Jul 28, 2026
…d(this)

Replace the sprinkled synchronized(this) with a private metersLock monitor via
Lombok @synchronized (the idiomatic dedicated-lock). The register* add goes
through a narrow @synchronized track() helper so the slow Micrometer register()
stays outside the lock; close() / removeMeter(Meter.Id) /
removeMetersByPrefixAndCommonTags() are annotated whole-method.

Locking on a private field rather than the publicly-reachable instance means
external holders of a PCMetrics reference cannot interfere with the monitor
(verified nothing synchronizes on the instance). The private removeMeter now
self-locks via @synchronized instead of relying on callers holding the lock -
also closing the hardening nit from review. Tests: 7 green.

Addresses the PR #57 follow-up review note (dedicated lock over synchronized).

Upstream-Issue: confluentinc#859

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

astubbs commented Jul 28, 2026

Copy link
Copy Markdown
Owner Author

Addressed the dedicated-lock follow-up in a735b3d8 - switched from synchronized(this) to Lombok @Synchronized("metersLock") (the idiomatic dedicated-lock; the project already leans on Lombok). close() / removeMeter(Meter.Id) / removeMetersByPrefixAndCommonTags() are annotated whole-method; the four register* methods call a small @Synchronized track() helper so the slow Micrometer register() stays outside the lock. This also self-locks the private removeMeter (closing the earlier hardening nit) and stops locking on the publicly-reachable instance. 7/7 PCMetrics tests green.

"Anywhere else the same fix is needed?" - checked:

  • The Memory leak in PCMetrics class confluentinc/parallel-consumer#859 leak shape (a tracking collection accumulating duplicates) is unique to PCMetrics - no other class keeps a meter/id collection like registeredMeters. The only other new LinkedList in metrics is a local variable in getCommonTags, not a field. So no other leak to fix.
  • synchronized(this) hygiene appears in two other spots - ProducerManager.syncBeginTransaction() and DynamicLoadFactor.doStep() - both private synchronized. They're a separate concern (transaction/loading serialization, not a shared-collection race), narrower, and out of scope for a metrics PR. I've noted them in the refactoring backlog (docs: add refactoring backlog (deferred internal refactors) #67) rather than expand this PR.

astubbs added a commit that referenced this pull request Jul 28, 2026
…eal index

Stop brushing over the pointers. Each abandoned refactor branch now has a
specific one-liner (what it did, relevance, linked issue/PR) grouped by theme:
thread-model/actor cluster (upstream #200), static-state removal, shard-count
caching perf (confluentinc#530), engine/queue experiments (confluentinc#884), encoding, offsets/state
classes (#233), API/interface, test infra. Records dead-ends explicitly (e.g.
producer-facade, whose branch concluded it was not worthwhile) and supersessions
(loom -> upstream confluentinc#908).

The bulk verdicts for the ~53 prior closed PRs stay in upstream-pr-analysis.adoc;
this index keeps the actionable pointers with issue links. Also added the two
other synchronized(this) lock-hygiene sites (ProducerManager.syncBeginTransaction,
DynamicLoadFactor.doStep) surfaced while checking the PR #57 fix.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Jul 28, 2026
Add docs/runbooks/pr57-post-merge.md - the exact, reviewed upstream comments to
post after #57 merges: the confluentinc#859 fix-backlink (from the manifest backlink field),
and tailored author-crediting notes for the carried confluentinc#893/confluentinc#905 PRs (the generic
template is wrong for cherry-picked PRs), plus the manifest status flips.

Update AGENTS.md backlink guidance: always pre-draft backlinks as a runbook
committed to the PR - reviewable in-diff, tailored per target, context-aware
across targets - rather than running the backlink script blind. Runbooks live in
docs/runbooks/, deleted once executed; stragglers swept at the next major release.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
astubbs added a commit that referenced this pull request Jul 28, 2026
Add docs/runbooks/pr57-post-merge.md - the exact, reviewed upstream comments to
post after #57 merges: the confluentinc#859 fix-backlink (from the manifest backlink field),
and tailored author-crediting notes for the carried confluentinc#893/confluentinc#905 PRs (the generic
template is wrong for cherry-picked PRs), plus the manifest status flips.

Update AGENTS.md backlink guidance: always pre-draft backlinks as a runbook
committed to the PR - reviewable in-diff, tailored per target, context-aware
across targets - rather than running the backlink script blind. Runbooks live in
docs/runbooks/, deleted once executed; stragglers swept at the next major release.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@astubbs
astubbs force-pushed the fix/859-metrics-leak-plus-cherrypicks branch from e8c3fd6 to c316454 Compare July 28, 2026 08:44
astubbs added a commit that referenced this pull request Jul 28, 2026
Add docs/runbooks/pr57-post-merge.md - the exact, reviewed upstream comments to
post after #57 merges: the confluentinc#859 fix-backlink (from the manifest backlink field),
and tailored author-crediting notes for the carried confluentinc#893/confluentinc#905 PRs (the generic
template is wrong for cherry-picked PRs), plus the manifest status flips.

Update AGENTS.md backlink guidance: always pre-draft backlinks as a runbook
committed to the PR - reviewable in-diff, tailored per target, context-aware
across targets - rather than running the backlink script blind. Runbooks live in
docs/runbooks/, deleted once executed; stragglers swept at the next major release.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@astubbs
astubbs marked this pull request as draft August 20, 2026 04:09
@astubbs
astubbs force-pushed the test/chaos-instrumentation branch from 0148625 to 283202e Compare August 20, 2026 05:02
@astubbs

astubbs commented Aug 20, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

Please open inline review threads for anything blocking.

What changed since your last review of this PR (which was clean at f0f3371): #325 merged,
so this PR's base is now master rather than test/chaos-instrumentation, and it absorbed a large
master merge with nine hand-resolved conflicts. A local review pass then found five defects in
that merge and fixed them. Head is ff81cc0f8.

Scope: review only what this PR itself changes — git diff origin/master...HEAD. Everything under
chaostests/, integrationTests/utils/ and docs/features/ belongs to #325 and is now on
master; it is out of scope and has had its own review.

The merge is where the risk is concentrated, so weight it accordingly:

  1. Did the merge preserve both sides' intent, in both directions? One regression was already
    caught and fixed: master had deleted ManagedPCInstanceLifecycleTest and the merge resurrected
    83 lines of it, with no conflict raised — a deletion leaves no textual evidence to notice. I swept
    every path present here against master's tree for other resurrections and found none. Please check
    the inverse: something this branch authored that master's version silently overwrote. Compare
    against both origin/master and the pre-merge head f0f33714a.

  2. docs/inflight/bug-857-family.md — merged by hand, and it has now been got wrong twice. The
    first pass renumbered headings but left body cross-references pointing at the wrong entries; the
    second kept both parents' drafts of the same supersession note, one of which claimed "the
    original assessment follows" when another block followed it. Please verify independently: nothing
    lost from either side, gapless numbering, and every ordinal cross-reference — in this file and in
    any file citing it — resolving to the entry it was written against.

  3. The three-part never-throws contract in PCMetrics (removeQuietly; the two-level guard in
    removeMetersByPrefixAndCommonTags; the getId() guard in removeMeter(Meter)). Look for a
    fourth hole rather than re-confirming the three — each of the existing ones was found only after
    the previous was written, by asking "what else here is the user's code?"

  4. PartitionState.tryToEncodeOffsets()'s Tuple<Optional<String>, Long> — the payload must be
    committed against the offset it was encoded against. Check every path for the offset being
    re-derived, defaulted, or dropped.

Please also state what you checked and found clean, not only the findings.

@claude

claude Bot commented Aug 20, 2026 •

Copy link
Copy Markdown

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


Claude's review todo list

  • Gather context (PR diff vs origin/master, trigger comment, prior 15 review rounds)
  • Confirm HEAD matches ff81cc0f8 and scope to git diff origin/master...HEAD
  • Item 1: audit the master merge for the inverse regression (this branch's work silently overwritten by master's side)
  • Item 2: verify docs/inflight/bug-857-family.md — numbering, cross-references, no lost content from either side
  • Item 3: look for a fourth hole in the PCMetrics never-throws teardown contract
  • Item 4: trace every path from PartitionState.tryToEncodeOffsets()'s Tuple return for offset re-derivation/defaulting/dropping
  • Compile + run the affected test classes
  • Post final review

Review

Scoped to git diff origin/master...HEAD (39 files, matching the PR's own changed-file list) at HEAD ff81cc0f8. No blocking findings — no inline review threads opened. One cosmetic, non-blocking nit.

Item 1 — the inverse regression (branch work overwritten by master's side). Traced the merge commit 63efb2d (parents f0f3371 branch-tip, b06d2c5 = origin/master) directly rather than trusting the net diff. It reports nine conflicts; eight are under chaostests/, integrationTests/utils/ and docs/features/ — out of scope per your note, already #325's. The ninth, docs/inflight/bug-857-family.md, is the only in-scope conflict (see item 2).

Checked the inverse directly: git diff --name-status f0f3371 63efb2d | grep '^D' — empty. Nothing this branch had was deleted or dropped by the merge itself. I also confirmed the merge touched no other in-scope file: git diff f0f3371..63efb2d --stat (excluding chaos/features paths) lists only bug-857-family.md plus files that came in from master and already matched master's content exactly (so they don't appear in the three-dot diff at all). Every core file in this PR's diff — PCMetrics.java, PartitionState.java, PartitionStateManager.java, ShardManager.java, AGENTS.md, docs/testing.md, all four test classes — has zero commits touching it since f0f3371 (git log f0f3371..HEAD -- <file> is empty for each), meaning they're byte-identical to the last clean review and were untouched by the merge, not just unaffected in the final diff. Nothing found in the inverse direction.

Item 2 — docs/inflight/bug-857-family.md. Read the full file and diffed exactly what this PR changed (two hunks: a stale-link fix at the old "SUPERSEDED" note, and inserting "Twelfth"/"Thirteenth sighting, 2026-08-19" before the pre-existing "Twelfth sighting, 2026-08-20" which is correctly renumbered to "Fourteenth").

  • Numbering is gapless: grep -n "^\*\*.*sighting," shows Third → Fourteenth with no gaps, no repeats.
  • No content lost from either side: the inserted Twelfth/Thirteenth sections are wholly new prose (not present in master before this merge), and the pre-existing Fourteenth section's body is untouched except its own heading number.
  • Cross-references verified against both directions, not just read: gh-run-view-log-truncation.md:59-60 pre-declares "it was the eleventh sighting... is the twelfth since fix(core) astubbs#120: unbounded PCMetrics heap growth, with the confluentinc#905 hot-shard metric #57 merged test(chaos) confluentinc#857: the chaos suite asserts ordering, detects a stalled instance, and can be watched mid-stall #325" — I confirmed the seed it names (7964289159858266180) is now in the "Twelfth sighting" section exactly as predicted. test-class2-probe-asserts-timing-not-correctness.md:57-58 was itself edited by this PR to say "fourteenth sighting (renumbered from twelfth...)" — confirmed the Fourteenth section is indeed "the new drain control arm fired CLASS2_STALL twice on 2026-08-20" as that file claims. pr-322-split-plan.md's reference to the deleted bug-pcmetrics-committed-offset-vs-completion-count.md is prose describing it in the past tense (not a live citation), and the file's removal is otherwise unreferenced anywhere else in the tree (grep -rl confirms only that one hit). All resolve correctly.
  • One minor formatting defect, found by checking the mechanical detail rather than just the prose: there is no blank line between the end of the newly-inserted "Thirteenth sighting" paragraph and the "**Fourteenth sighting..." heading (line 607→608 — every other sighting-header transition in the file has one). In strict CommonMark this merges the two into one paragraph (no visual break before the Fourteenth heading), unlike the Twelfth/Thirteenth transition a few lines above, which does have the blank line. Purely cosmetic — doesn't affect content, references, or numbering.
    Fix this →

Item 3 — the never-throws teardown contract in PCMetrics.java, looking for a fourth hole. This file has had zero commits since the last clean review at f0f3371, so this is an independent re-derivation, not a re-read. Traced every call this class makes into user-supplied MeterRegistry/Meter/Meter.Id code:

  • meterRegistry.remove(meterId) → removeQuietly (guarded)
  • meter.getId() in public removeMeter(Meter) → its own try/catch (guarded)
  • registry enumeration (Search.in(meterRegistry)...meters()) and the per-meter meter.getId() inside removeMetersByPrefixAndCommonTags's forEach → both under that method's outer try/catch (guarded)
  • the no-op registry's own close() → guarded

Confirmed (via grep across the whole module) these are the only four call sites into external code during teardown, and every removal call site in PartitionState/PartitionStateManager/WorkManager (11 of them, matching the class's own javadoc count) funnels through the guarded removeMeter(Meter). The one place that bypasses track() — ExecutorServiceMetrics(...).bindTo(pcMetrics.getMeterRegistry()) in AbstractParallelEoSStreamProcessor.initMetrics() — is registration-time (explicitly outside the contract per the class's own javadoc), and I traced its cleanup path too: deregisterMeters() (which calls the guarded removeMetersByPrefixAndCommonTags(USER_FUNCTION_EXECUTOR_PREFIX)) runs at AbstractParallelEoSStreamProcessor.java:755, before pcMetrics.close() at line 756, both inside doClose()'s finally — correct ordering, so this doesn't leak or hit the "already closed" early-return.

No fourth hole found. One non-blocking subtlety worth recording rather than fixing: in removeMetersByPrefixAndCommonTags, if meter.getId() throws for one meter mid-enumeration, the outer catch stops the whole sweep for that call (the per-meter inner guard only covers meterRegistry.remove() failures, not getId() failures) — so a hostile meter can leave later meters in that same prefix-scoped sweep un-swept for that call. This doesn't violate the never-throws contract (nothing escapes to the caller) and self-heals: those meters remain in registeredMeters and get caught by the next full close(). Ran MetricsTeardownCannotBreakCloseTest with a registry that throws on remove() — passes, confirming the contract holds in practice, not just by inspection.

Item 4 — PartitionState.tryToEncodeOffsets()'s Tuple<Optional<String>, Long>. Also unchanged since f0f3371 (git log confirms zero touching commits for PartitionState.java, PartitionStateManager.java, and PartitionStateCommittedOffsetTest.java since then). Re-traced independently: getOffsetToCommit() is called exactly once, at the top of the method, before the incompleteOffsets.isEmpty() check — and offsetOfNextExpectedMessage is threaded through literally every return path (the early-return, both branches of the encoding-result check, and the NoEncodingPossibleException catch) via ParallelConsumer.Tuple.pairOf(...). createOffsetAndMetadata() reads tuple.getRight() directly with no second call. No other call site re-derives, defaults, or drops the offset — getOffsetToCommit()'s one other call site in the file (a bootstrap-truncation check) is unrelated to the commit path. Ran PartitionStateCommittedOffsetTest (which pins this with a Mockito.spy + verify(times(1))) — 6/6 pass.

Verification, not just inspection: compiled parallel-consumer-core -am clean, and ran PCMetrics859Test (9/9), RebalanceMetricsLeakTest (1/1), MetricsTeardownCannotBreakCloseTest (1/1), PartitionStateCommittedOffsetTest (6/6), PCMetricsTest (2/2) — 19/19 green, BUILD SUCCESS. bin/todo-index.sh --check passes.

Nothing blocking. All four requested items check out clean, with one genuinely new (if trivial) finding — the missing blank line in bug-857-family.md — and one already-clean subtlety recorded for completeness rather than as a defect. Ready to merge as far as this round's scope goes.

Branch: fix/859-metrics-leak-plus-cherrypicks

@astubbs

astubbs commented Aug 20, 2026

Copy link
Copy Markdown
Owner Author

@claude review this

Please open inline review threads for anything blocking.

Narrow scope this round: git diff 77af56db0..HEAD only — 5 files, ~107 lines. Head is
2aa917a74.

The library code is out of scope. You reviewed it clean at f0f3371 and again at ff81cc0f8,
and it has not changed since except comments. A third pass over it would re-confirm rather than find.
Everything under chaostests/, integrationTests/utils/ and docs/features/ belongs to
#325 and is on master — also out of scope.

What to review, and why it earns a round of its own. A structured review found two P1s in
.claude/hooks/check-upstream-map-merged.sh, a PreToolUse hook that denies gh pr merge <N> while
upstream-map.yaml still records that PR as status: pr-open. Both were defects its sibling hooks
had already fixed. This diff rewrites its matching and adds the self-test it shipped without.

A merge guard fails badly in both directions — silently not firing, or jamming a legitimate merge
shut — so please weight it accordingly:

  1. Does the matcher now catch every real form, and still not over-match? It borrows _REPO_FLAG
    from check-squash-subject.sh to accept -R/--repo between gh and pr and between pr and
    merge, plus attached (-Rowner/repo, --repo=) forms, and it now parses a PR URL as well as a
    bare number. Try to find a real invocation that still slips past — and, just as important, a
    non-merge command it would now wrongly deny.
  2. Is the fail-open still deliberate everywhere it happens? The design is: no manifest, no PR
    number, or no matching entry → allow. One of the P1s was a parsing gap wearing that costume —
    the URL form fell open with the number in plain sight. Check whether any remaining continue /
    sys.exit(0) is an accident rather than a decision.
  3. Are the 12 new self-test cases in bin/test-check-agent-hooks.sh actually pinning the
    behaviour?
    Six deny paths, six negative controls, each run against a fixture manifest in a temp
    dir rather than the live one. Two specific things to check: that no case passes vacuously, and
    that the section does not disturb its neighbours — my first attempt placed it mid-way through the
    squash-subject cases and silently repointed three of them at the wrong hook (HOOK_UNDER_TEST is
    file-global and set per section). Is that fragility still latent for the next person adding a
    section?
  4. The PCMetrics comment change — no code changed, only the comment. It previously claimed "one
    hostile meter cannot stop the rest being untracked", which is true for remove() failures but not
    for getId(), evaluated outside the per-meter guard. The new text says a per-meter getId() guard
    would buy nothing because Search.meters() must read every candidate's id to filter by name and
    tags. Please verify that claim against Micrometer rather than taking it — if it is wrong, the
    comment is now wrong in a new way and the guard genuinely is missing.

Please also state what you checked and found clean, not only the findings.

@claude

claude Bot commented Aug 20, 2026 •

Copy link
Copy Markdown

Claude finished @astubbs's task in 8m 31s —— View job


Claude's review todo list

  • Gather context (trigger comment, prior 16 review rounds, scope: git diff 77af56db0..HEAD, HEAD confirmed 2aa917a)
  • Item 1: verify the matcher in check-upstream-map-merged.sh catches all real gh pr merge forms without over-matching
  • Item 2: verify fail-open behavior is deliberate everywhere, not accidental
  • Item 3: verify the 12 new self-test cases actually pin behaviour, and check the HOOK_UNDER_TEST fragility
  • Item 4: verify the PCMetrics.java comment's Search.meters() claim
  • Post final review

Environment note before the findings

This sandbox blocked every attempt to execute the hook end-to-end: chmod, bash <script>, python3 -c .../python3 script.py, and WebFetch all required approval that wasn't available in this run (only git, mkdir, ls, Write, and Grep succeeded). So items 1–3 are verified by extracting the matcher regex and running it through the Grep tool's regex engine against 13 hand-built candidate commands (both the shipped fix and the pre-diff regex, to prove the tests pin a real behaviour change) plus line-by-line tracing of the Python logic, rather than by actually invoking bash .claude/hooks/check-upstream-map-merged.sh or bin/test-check-agent-hooks.sh. Item 4 is verified by reasoning from Micrometer's documented Search/predicate-filter design rather than a live source diff, since WebFetch was also blocked. Flagging this per the task instructions so --allowedTools can be adjusted if you want a live run confirmed next time. (Separately: .claude/hooks/check-upstream-map-merged.sh and its settings.json registration are absent/stripped from this session's working tree even though they're in HEAD — that's this session's own hook-execution safeguard, not a defect in the PR; confirmed via git show HEAD:... that the file and its wiring are present in the committed diff.)

Item 1 — matcher coverage: no slip-through found, no over-match found

Ran the exact MERGE regex (\bgh\s+(?:(?:-R|--repo)(?:\s+|=)?\S*\s+)*pr\s+(?:(?:-R|--repo)(?:\s+|=)?\S*\s+)*merge\b) against 13 candidates via Grep:

  • All 6 shipped DENY cases (bare, leading -R, leading --repo, attached --repo=, -R between pr/merge, PR URL) match — confirmed correct.
  • gh pr view 2999, echo "...merge 2999...", gh pr mergely 2999 (word-boundary check), ghm 2999 (alias) do not match — confirmed correct non-triggering.
  • Re-ran the old, pre-diff regex (\bgh\s+pr\s+merge\b) against the same set: it matches only the bare form and (surprisingly) the URL form — confirming the -R/--repo cases genuinely pin the regex fix, and that the URL case's P1 was in PR-number extraction, not the trunk regex (see below).

One real, narrow gap found — the PR-number extraction, not the regex. _pr_number() is applied via next((n for n in (_pr_number(t) for t in after) if n), None), i.e. it takes the first digit-or-URL-shaped token after merge, not necessarily the positional PR argument. I traced (couldn't execute, so this is manual trace + the Grep-confirmed tokenization semantics of shlex.split) gh pr merge --body 2998 2999 --squash: tokens after merge are ["--body", "2998", "2999", "--squash"], and _pr_number returns "2998" (the body's stray numeric word) instead of "2999" (the real PR). Consequence, both directions the trigger comment asked about: if 2998's manifest entry happens to be pr-open, a legitimate merge of 2999 gets wrongly denied; if 2998 isn't in the manifest at all, the check on the real target 2999 silently never happens (mis-fires open). None of gh pr merge's own flags (--squash, --merge, --rebase, --auto, --admin, --delete-branch, --match-head-commit <sha>) naturally take a bare-integer value, so this needs an unquoted single-word --body/--subject/-t value that happens to be all-digits positioned before the PR number — an unusual but not impossible hand-typed command. Not blocking (narrow precondition, and the hook still fails toward "ask a human" rather than silently corrupting state either way), but worth a one-line fix: search only tokens before the first non-flag positional, or require the PR argument be the first bare token that isn't preceded by a flag expecting a value.

Fix this →

Item 2 — fail-open audit: every exit path is deliberate

Traced every sys.exit(0)/continue/implicit-fall-through in the diff's final state: bad JSON, non-Bash tool, no MERGE match, unreadable/unparsable manifest (no yaml/no file), shlex.split ValueError on one match (loop continues to the next gh pr merge in the same command line rather than aborting), no "merge" token literal (defensive, effectively unreachable given the regex already anchored on it), and no PR number found — all match the docstring's own list ("no python3, no PyYAML, unreadable or unparseable manifest, no PR number on the command line, or no entry naming that PR"). The only path that actually denies is the one explicit print(...); sys.exit(0) inside the manifest-entry match. Nothing found that fails open by accident rather than by the documented design — including the one place this diff changed the fail-open reasoning (the URL fallback in _pr_number), which closes a hole rather than opening a new one.

Item 3 — self-test cases: pin real behaviour, but the insertion point repeats the class of mistake it exists to catch

  • Not vacuous. Cross-checked all 6 DENY + 6 ALLOW cases against both the new and the pre-diff regex (see Item 1) and against a manual trace of the manifest-status branch (already-merged/PR-absent/no-PR-number/not-a-merge-cmd/merge-in-prose all exercise genuinely distinct code paths, none just re-asserting the same branch under a different name).
  • The HOOK_UNDER_TEST fragility is still latent, and it recurred this round — just less consequentially. The new section was inserted between the pre-commit-gate.sh header comment block (bin/test-check-agent-hooks.sh:156-161, unchanged by this diff — confirmed via git show 77af56db0:...) and pre-commit-gate.sh's own echo "--- pre-commit-gate.sh ---" / code (now pushed down to line 221). So the file now reads: pre-commit-gate.sh's description → check-upstream-map-merged.sh's entire header+code → pre-commit-gate.sh's actual tests, with pre-commit-gate.sh's explanation now separated from its own code by 60+ lines of unrelated content. This time it's cosmetic, not functional — confirmed pre-commit-gate.sh's section uses its own assert()/exit-code mechanism (make_project, assert "green gate..." 0 ...), never HOOK_UNDER_TEST/expect(), so nothing got silently repointed to the wrong hook this round. But the underlying failure mode — picking the wrong insertion point when adding a section — is exactly what recurred, just landing somewhere lower-stakes by luck of which section it collided with rather than by the file's structure preventing it. Worth a trivial follow-up: move the new section (lines 162–218) to before line 156, or after pre-commit-gate.sh's own closing # --- divider.

Fix this →

Item 4 — the PCMetrics.java comment's Search.meters() claim: checked, holds up, verification method limited

Couldn't do a live source diff (WebFetch blocked), so this is reasoned from Micrometer's documented Search API design at the pinned micrometer-core.version (1.13.15, pom.xml:151) rather than a byte-level read of Search.java. Search.in(registry).name(Predicate<String>) is a filter-then-collect API: the terminal .meters() call walks the full registry's meter list and evaluates the name/tag predicates by reading each candidate's Meter.getId() (.getId().getName(), .getId().getTags()) during that walk — i.e. inside Micrometer's own internals, before the resulting (already-filtered) collection is ever handed to the caller's forEach. If that's right, a hostile getId() throws from inside Search...meters() itself, which a guard wrapped only around the caller's per-meter forEach body could never intercept — the exception happens upstream of that loop entirely. That matches the comment's claim exactly ("a per-meter getId() guard would buy nothing"), and is consistent with why the outer try/catch (around the whole Search...meters() + forEach block) is the one doing real work here, not a redundant belt-and-braces addition. I'd treat this as checked and plausible, not independently confirmed against source — flagging the method limitation rather than asserting certainty.

Summary

One real (narrow-precondition, non-blocking) finding in the PR-number extraction (Item 1), one confirmed-recurring (but this time harmless) structural placement issue in the self-test file (Item 3), nothing wrong found in the fail-open audit (Item 2) or the Micrometer claim (Item 4, though verification there is reasoned rather than sourced due to sandbox limits). Neither finding blocks merge on its own terms — no inline threads opened — but both are cheap, concrete follow-ups worth taking before/soon after merge given how many rounds this hook-and-tests pair has already had.

Branch: fix/859-metrics-leak-plus-cherrypicks

@astubbs

astubbs commented Aug 21, 2026

Copy link
Copy Markdown
Owner Author

Both findings from the last review round were already fixed in d009a97, which landed after the head that round reviewed (2aa917a). Confirming each against current HEAD, since the round closed without a reply.

One real, narrow gap found — the PR-number extraction, not the regex. [...] gh pr merge --body 2998 2999 --squash: tokens after merge are ["--body", "2998", "2999", "--squash"], and _pr_number returns "2998" [...] instead of "2999"

Fixed. d009a9796 replaced the single-pass next((n for n in (_pr_number(t) for t in after) if n), None) with a scan that skips value-taking flags and then stops at the first positional:

VALUE_FLAGS = {"--body", "-b", "--body-file", "-F", "--subject", "-t",
               "--match-head-commit", "--repo", "-R", "--author-email"}
...
    if tok in VALUE_FLAGS:        # `--body VALUE`: the value is the next token
        skip_next = True
        continue
    if tok.startswith("-"):       # `--body=VALUE` / `-tVALUE`: value is attached, not a token
        continue
    pr = _pr_number(tok)
    if pr:
        break
    break                         # first positional is the PR argument; if not a number, give up

That covers both directions the finding named, and the exact --body 2998 2999 case is now pinned by a self-test, along with the attached (--body=) and short (-t) forms.

The HOOK_UNDER_TEST fragility is still latent, and it recurred this round [...] the file now reads: pre-commit-gate.sh's description → check-upstream-map-merged.sh's entire header+code → pre-commit-gate.sh's actual tests

Also fixed in the same commit — the pre-commit-gate.sh header block was moved back below the new section, so each section's header is again adjacent to its own code. At HEAD the order reads: check-upstream-map-merged.sh header (157) → its echo (170) → its HOOK_UNDER_TEST (172) → divider (224) → pre-commit-gate.sh header (225) → its echo (233).

On Item 4, nothing to action — the round recorded the Search.meters() claim as reasoned rather than source-verified, and flagged the sandbox limitation rather than a defect.

One thing this check turned up that is not this PR's, recorded here so it is not mistaken for a regression: bin/test-check-agent-hooks.sh reports 10 failures when run on macOS, all expected DENY, got ALLOW. The cause is check-merge-outstanding-work.sh:151, which reads a file's mtime with GNU stat -c %Y; BSD stat rejects -c, stderr is discarded, || echo 0 yields mtime=0, and the next line continues — so every live task is skipped and the hook fails open silently. That file is not in this PR's diff and the identical line is present on origin/master, so it is pre-existing master state, not something this branch introduced. Filing separately.

@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, just docs/inflight/pr-57-metrics-leak.md needs sync

@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.

minor, otherwise lgtm

@astubbs

astubbs commented Aug 25, 2026

Copy link
Copy Markdown
Owner Author

Agent-written comment (posted via Antony's account while surveying where the Lincheck lane from #347 should point next).

PCMetrics.registeredMeters is a Lincheck target, and the evidence for that is not an opinion

While calibrating the Lincheck lane in #347 — pointed at a master that still contained several known torn-read bugs, to see which it would refind unaided — it reported a violation nobody had put on the list: PCMetrics.registeredMeters is a plain ArrayList written from two threads.

That was an unprompted find, which is worth more than a reviewed one: it is evidence the technique generalises past the bugs it was calibrated on. It is tracked as docs/inflight/bug-pcmetrics-registered-meters-is-a-plain-arraylist.md, and this PR is the fix.

The useful consequence is the ordering. #347's harnesses currently assert assertThrows(LincheckAssertionError) — green means Lincheck found the bug — because the fixes had not merged. When a fix lands, its harness goes red by design and gets flipped to assert-no-failure, at which point it is a permanent regression detector rather than a calibration probe.

So: a harness over the registeredMeters mutation path would refind this defect on master today, and flip to guarding this PR's fix the moment it merges. Cheap, and the calibration half is already done.

One caveat carried over from #347, so it is not priced wrongly: stress-arm hit rates there were measured machine-dependent by 3.4x (likelihood-ratio p = 0.011), so a bound priced on one machine is a claim about that machine only. A collection-mutation race is usually within reach of the deterministic model checker, which needs no bound at all — prefer that strategy here if the toolchain allows it.

@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

Comment thread docs/inflight/pr-57-handoff.md Outdated

@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 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 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 and others added 7 commits August 26, 2026 23:08
…kill the poll thread

Two faults in one subsystem, both confluentinc#859.

The leak. PCMetrics kept a tracking list of registered meters and appended to it
on every offset commit, re-registering identities it already held. Nothing
removed them on revocation, so a long-lived consumer accumulated one duplicate
Meter.Id per commit until the list dominated the heap. Registration is now
deduplicated and revocation removes what it registered.

The teardown. Meter removal ran on the path that closes the instance, and an
exception from the registry there propagated into the caller - which is the poll
thread. A metrics backend having a bad day could therefore take down consumption
or fail a shutdown. Teardown now never throws, and the accessor between the two
registry calls is guarded the same way.

PartitionStateManager caches its OffsetMapCodecManager instead of constructing a
throwaway per assignment, which is what made the duplicate registrations visible
in the first place.

Refs: confluentinc#859, #120

FOLDED IN AT MERGE PREP, from a later fix-up on this branch: the accessor between the two
registry calls is guarded the same way as the calls themselves. It was found because the
never-throws contract has three parts and only two had been written down - `removeQuietly`,
the two-level guard in `removeMetersByPrefixAndCommonTags`, and the `getId()` guard in
`removeMeter(Meter)`. A meter whose `getId()` throws dies during Micrometer's own stream
enumeration, upstream of anything we can wrap, which is why the outer guard is not per-meter.
Confirmed against micrometer-core 1.13.15 bytecode rather than assumed: `Search.meterStream()`'s
filter lambdas call `Meter.getId()`.
…ey is visible

Adds the shards.max.size gauge: the largest number of records queued in any
single shard. shards.size already reported the total across all shards, which
cannot distinguish an evenly loaded consumer from one where a single hot key is
serialising all the work behind it - the case that actually hurts under KEY
ordering.

Cherry-pick of upstream confluentinc#905.

Its test assertion travels in the un-quarantine commit rather than this one,
because that commit rewrites the whole of PCMetricsTest and splitting the file
between them would leave neither readable.

Refs: confluentinc#905
…it on offsets

The test was quarantined as flapping because it asserted
PARTITION_LAST_COMMITTED_OFFSET against a shared completion COUNTER while the
suite runs UNORDERED. Commits are contiguous and bounded by the lowest incomplete
offset; completions are not ordered. Workers awaited a latch BEFORE incrementing,
so a latched worker's offset never completed and the gap was permanent - the
120s atMost could not close it, only make the failure expensive. It passed only
when the latched workers happened to hold the highest offsets, so a pass proved
nothing.

Rewritten to gate on each record's OWN offset rather than a shared counter, with
two latched ranges held open per partition: a deliberate non-contiguous hole, and
a freeze above a fixed offset. The pool is asserted wider than the workers the
hole parks forever, because getting that wrong hangs rather than fails.

Also carries the confluentinc#905 gauge assertion, since this commit rewrites the
file wholesale and splitting it would leave neither half readable.

Refs: #120, confluentinc#905

The two live citations of the deleted note are repointed here rather than later, so no commit
in this branch leaves a dangling reference behind - `bin/check-file-refs.sh` would fail any
intermediate checkout otherwise, and a bisect landing there would blame the wrong change.
…ne only silenced

`static: infer` went red once this branch caught up with master, and it is the ratchet working
rather than a break: five identities in `config/infer-known-findings.txt` stopped firing, and
`bin/infer-test.sh` fails on that by design - "an identity here that no longer fires means
somebody fixed something and did not ratchet, which is how a set quietly stops meaning
anything."

FOUR ARE GENUINE, and they are this PR's own subject:

    1 THREAD_SAFETY_VIOLATION PCMetrics.gaugeFromMetricDef
    1 THREAD_SAFETY_VIOLATION PCMetrics.getCounterFromMetricDef
    1 THREAD_SAFETY_VIOLATION PCMetrics.getDistributionSummaryFromMetricDef
    1 THREAD_SAFETY_VIOLATION PCMetrics.getTimerFromMetricDef

Those are the four registration paths that mutate `registeredMeters`, now behind
`@Synchronized("metersLock")`. Independent corroboration of the fix from a checker nobody
pointed at it - the ratchet file is master's, untouched by this branch, so the only thing
that could retire them is this diff.

THE FIFTH IS NOT FIXED, AND RETIRING IT QUIETLY WOULD HAVE BEEN THE DEFECT.

    1 NULLPTR_DEREFERENCE OffsetMapCodecManager.lambda$loadPartitionStateForAssignment$2

`static-infer-findings.md` called this one "the cheapest thing on this page - start here",
still open. It stopped firing on a branch that touches neither `OffsetMapCodecManager`, nor
`PartitionState`'s constructor, nor `getEpochOfPartition`. Read the source and the defect is
still plainly there: `getEpochOfPartition` returns `Long` documented "or null if not yet
assigned", `decodePartitionState` passes it to `PartitionState(long newEpoch, ...)`, and the
auto-unbox IS the dereference.

The mechanism is this PR's `@Setter` removal on `PCModule.workManager`. With the setter
gone, `module.workManager()` is only ever the memoising provider, so the interprocedural
path Infer walked to reach that dereference collapsed - and the report with it. **A check
that went green because it stopped looking**, which is the class this repo names from the
other direction in a dozen places; here it is the analyser rather than a gate.

The ratchet has no state for it - "fixed" and "new" are its only two - so the line had to go
for a green lane. What stops that from becoming a lost defect:
`docs/inflight/bug-epoch-null-unboxes-on-partition-assignment.md` records the code, the
mechanism, and the fact that re-adding the line would NOT close it (Infer cannot reach the
dereference now, so it would be an identity that never fires - the same failure the other
way round). `static-infer-findings.md` loses its "needs no decision from anybody" claim,
which was wrong, and gains the general rule: a retirement is not by itself evidence of a fix,
so read the code an identity names before deleting its line.

NOT FIXED HERE ON PURPOSE. Null means *not yet assigned*, so the caller must decide what to
do with a partition decoded before its epoch exists - fail open or fail closed, on the offset
path, which is the same open question
`core-stale-arrival-guard-needs-a-null-safety-decision.md` carries for `getPartitionState`.
That is not a call to make inside a metrics PR.

Arithmetic checked rather than trusted: 22 findings described before, 17 after, matching the
run's own "17 finding(s)" - the sets reconcile only because one identity
(`RetryQueue$RetryQueueIterator.next`) carries a count of 2. The run reported no NEW
identities, so `current` is a subset of `expected` and deleting exactly the five reported
gone makes the two sets equal, which is what the gate compares.

Local: `bin/test-check-infer.sh` 8 of 8 (including its own red controls - a new identity
fails, a retired one fails, a same-count swap fails); `bin/check-all.sh` 15 of 15.

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

`src/docs/development/upstream-map.yaml` entries were going stale at exactly the moment
nobody was looking: #204 merged while its entry still said `status: pr-open`, and
checking the rest found two more already wrong.

**The rule is: write `merged` in the branch and push it before you merge.** That reads like
claiming something untrue and is not - branch content is visible to nobody until it lands, and
the moment it lands the entry is correct. There is no observable instant where the manifest is
wrong, and nothing to clean up afterwards. Doing it in the other order is what costs: the
branch is gone, the correction becomes a commit straight to master, and until someone
remembers, the manifest lies.

`.claude/hooks/check-upstream-map-merged.sh` refuses a `gh pr merge <N>` while an entry naming
that PR still says `pr-open`. It gates on the status rather than on mere mention, so it is
silent once the entry is right - a guard that fires on correct behaviour teaches people to
route around it. It fails open on every uncertainty (no PyYAML, unparseable manifest, no
manifest in the CWD, no PR number on the command line), because a hook that blocks on its own
bug jams the tool shut. Deliberately disposable: it exists only until the last upstream link is
closed out, and then it is one file to delete.

IT SHIPPED WITH TWO DEFECTS ITS SIBLINGS HAD ALREADY FIXED, and no self-test, which is the part
worth reading. The command regex missed `gh -R owner/repo pr merge` - the exact form this repo
trains - and the URL form fell open with the PR number in plain sight. Both are now the first
cases in a 16-arm section of `bin/test-check-agent-hooks.sh`, run against a fixture manifest in
a throwaway directory so a test's verdict cannot change when someone edits the real one. A
third arm pins the PR argument as the first POSITIONAL rather than the first digit-shaped word:
an unquoted numeric flag value ahead of it used to win, in both directions - denying the wrong
PR, and quietly checking a PR nobody is merging.

`scripts/upstream-map.py` gains the matching schema check, because the hook matches on the PR
NUMBER and so cannot fire at all on an entry that names none: `fork.status: pr-open` with an
empty `fork.prs` is unenforceable rather than merely untidy, and the state is one step away -
split work onto a new branch and the entry names a status whose own PR does not exist yet.

`docs/agent-harness.md` gains the hook's row and its counts. The registry self-test there
compares the documented script and registration counts against `settings.json` and had gone red
on this branch for the right reason - a hook registered and never documented. Its number-word
map stopped at "twelve", so the thirteenth registration reported "the doc no longer states a
count" instead of the mismatch; spelled out to twenty rather than to today's figure.

Refs: #204
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ot when its PR merges

The rule added on 2026-08-25 said to draft a response to the issue a note maps to, "post only on
explicit instruction", **and delete the drafts with the note**. Those last two clauses cannot both
hold: a draft nobody happened to be asked about before the merge was destroyed *at the merge* - the
exact moment nobody is looking, which is the failure this directory is organised against and the one
the four-outcomes rule was written to stop.

It was not theoretical. On #57 the owner was asked three separate times to post-or-lose a
draft that was never meant to be at risk, because the rule as written left no third option.

**The drafts accumulate, and one sweep before a release posts them together.** That is the point
rather than a convenience: read as a set they get a common account of what shipped, instead of N
replies written weeks apart from re-mined commit logs. `docs/releasing.md` gains that step, with the
`ls` that finds them and the instruction to re-read each against what actually shipped - a draft
written against a PR can be overtaken by a later change, and the sweep is the last cheap place to
notice.

**The file is named for the ISSUE, not the PR** - `issue-response-<NNN>.md`. A `pr-NN-` prefix names
something that is gone by the time anyone posts it. It is a deliberate exception to "the prefix names
an area": this one names a lifecycle stage with exactly one exit, and the sweep is what empties it.

The never-post-unasked rule is untouched.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The knowledge half of the metrics work, kept out of the code commits so those stay readable as
diffs.

WRITTEN UP AS SOLVED, in `docs/solutions/`:

- The `PCMetrics` registration leak itself - the measurement, the three-part never-throws
  teardown contract, the shutdown race that was nearly backlogged rather than fixed, and the one
  review nit that was declined with its reason.
- The metrics test that compared a contiguous commit offset to an out-of-order completion
  counter under `UNORDERED`. The gap it produced was permanent, not slow, so the 120-second
  `atMost` could never close it - it only made each failure cost 140 seconds of CI.
- Two workflow write-ups this branch paid for: `git diff A B` and `git diff B A` describe the
  same set of changes, and a brief's impossibility claim is the first thing to test rather than
  the premise to build on.

STILL OPEN, so they get notes rather than write-ups: the `PCMetrics` lock held across registry
calls, the `PCModule` injection seam the dead setter exposed, the shutdown/teardown race in its
general form, the plain `HashMap` counter maps in `WorkManager` and `PartitionStateManager`, and
the BSD-`stat` fail-open in the merge guard.

RETIRED, because their work landed here:

- `bug-pcmetrics-registered-meters-is-a-plain-arraylist.md` arrived from #347 with an
  instruction addressed to this PR - delete it here, and carry its reproduction in as the
  regression test's motivation. The Lincheck stack is now `PCMetrics859Test`'s class javadoc,
  stated as why `metersLock` exists, so a later reader deciding the lock is redundant meets the
  evidence first. The half this PR does NOT fix - those `HashMap` counter maps - moved to its own
  note rather than being deleted with it, and the note's three inbound citations are repointed by
  kind: the live ones to the surviving owner, the dated plan to a history pointer per
  `docs/citations.md`.
- The offset-vs-completion note, whose defect is fixed and whose diagnosis is now a write-up.

`bug-857-family.md` gains three `CLASS2_STALL` sightings seen on this branch's CI, numbered
after master's sixteenth even though two of them predate it - master's ordinals are cited from
two other notes and from inside the ledger, so renumbering those would break the citations. All
three are superseded by the closure that file already carries; the standing advice is to cite
the seed, never the ordinal.

Every note on master that mentions this PR is rewritten to read correctly AFTER it merges, which
`bin/check-branch-self-reference.sh` requires and which is cheap now and impossible later. Two of
those were stale in the direction that matters, both asserting this PR could not merge cleanly:
`Chaos Pain Suite` is required and gating rather than never-PR-gating, and `Check PR Dependencies`
runs and passes rather than never having run.

`upstream-map.yaml`: the entries this work owns move to `merged` before the merge, per the rule
the tooling commit introduces. The `confluentinc#893` entry is left to #337, which owns
that work since the 2026-08-24 split.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

0.6.0.0 Targeted at the 0.6.0.0 release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

confluentinc#859: Memory leak in PCMetrics class

2 participants