Skip to content

build(deps): bump vertx.version from 4.2.7 to 4.3.0 - #5

Closed
dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/maven/vertx.version-4.3.0
Closed

dependabot[bot] wants to merge 1 commit into
masterfrom
dependabot/maven/vertx.version-4.3.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github May 11, 2022

Copy link
Copy Markdown

Bumps vertx.version from 4.2.7 to 4.3.0.
Updates vertx-web-client from 4.2.7 to 4.3.0

Updates vertx-junit5 from 4.2.7 to 4.3.0

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps `vertx.version` from 4.2.7 to 4.3.0.

Updates `vertx-web-client` from 4.2.7 to 4.3.0

Updates `vertx-junit5` from 4.2.7 to 4.3.0

---
updated-dependencies:
- dependency-name: io.vertx:vertx-web-client
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.vertx:vertx-junit5
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added the dependencies Pull requests that update a dependency file label May 11, 2022
@astubbs astubbs closed this May 20, 2022
@dependabot @github

dependabot Bot commented on behalf of github May 20, 2022

Copy link
Copy Markdown
Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot
dependabot Bot deleted the dependabot/maven/vertx.version-4.3.0 branch May 20, 2022 14:18
astubbs added a commit that referenced this pull request Jul 28, 2026
…pd cap, regen README

Follow-up to the @claude review on PR #69.

- Dedupe the one clone this PR actually introduced: remove unused imports from
  MockConsumerTestWith{CommitTimeout,SaslAuthentication}Exception (SaslAuthenticationException
  and comment-only LongPollingMockConsumer) so the near-identical import blocks
  no longer register as a jscpd clone. Zero behaviour change (timing-sensitive
  test logic untouched). The other flagged clone (CoreAppTest<->VertxAppTest) is
  pre-existing on master - this PR doesn't touch those files - so it's left alone.
- Govern the jackson-databind test dep: add jackson.version=2.17.2 +
  dependencyManagement entry in the root pom; drop the hardcoded version from
  parallel-consumer-example-metrics (was the only ungoverned direct Jackson pin).
- Raise the jscpd absolute cap 4% -> 5% (matches PMD CPD). The repo baseline is
  already ~4.2%, so a 4% cap failed on every PR including the base branch; the
  real regression guard is the per-engine "max increase vs base" check.
- Regenerate README.adoc from CHANGELOG (review finding #5): the Self-Hosted
  Tests bullet still described the old thread-parallel approach; it now matches
  the CHANGELOG's forked-per-broker wording.

Verified: `mvn -Pci test-compile` green across all modules.

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

The duplicate-code gate's +0.1% ratchet failed at +0.19% on one new 30-line
clone: the fleet-bootstrap block (executor, pre-produce, protected member,
background producer, initial fleet, probe construction) duplicated between
W1 and W4 - the review's deferred finding #5, force-escalated by CI.

bootstrapFleet(topic, pcConfig, expectedMessages, preProduceFraction,
initialFleetSize, heavyEvery, heavySleep) returns a FleetBootstrap holder
(executor, tracking state, producer thread, pc0, fleet, UNSTARTED probe) -
the holder owning the tracking state keeps the helper at 7 params instead
of the 10 the review feared. Scenarios unpack what they need and keep their
chaos shape (config, conductor weights/ticks, probe toggles) local; W4
chains its toggles onto the returned probe before start.

W1/W4 test bodies each shrink ~30 lines; dead imports pruned.
ChaosConductorPlanIT 4/4 green; copyright scanner 0 violations.

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

Six findings from the nine-persona code review of the commit-failure seam, applied
and verified together (seam suites 69/69, full core unit suite 445/445, gates green):

- Transaction recovery now recognises a commit that landed AFTER its budget was
  spent: the producer is READY, so there is nothing to complete or abort, and the
  old two-way complete-else-abort branch would have called abortTransaction() on
  READY - an invalid-transition KafkaException that escaped the seam's catch and
  fatally closed PC in the most benign case there is (the commit succeeded). The
  READY case is checked first and also caught defensively out of the abort call;
  recovery re-syncs ProducerWrapper's tracked state, which nothing else would.
  Two regression tests pin both routes (review finding #5, correctness +
  adversarial, validator-confirmed).

- The seam's accounting fields (assignment epoch, streak, last-success times, the
  committer's deferral streak) were volatile ints with non-atomic increments and
  THREE writer sites across two threads - SpotBugs flagged five of them. They are
  now immutable generations swapped through a single AtomicReference per owner, so
  a rebalance reset can no longer be lost under a racing exhaustion, and a
  CommitFailureContext is built from the one generation its exhaustion produced -
  epoch and streak can no longer mix across an assignment boundary (finding #8).

- CommitFailureHandler's javadoc claimed control-thread invocation; it actually
  runs on the dedicated pc-commit-failure-handler daemon thread, one at a time in
  failure order, 30s-bounded, fail-safe SHUT_DOWN on overrun/throw/null (finding #7).

- The two commit-outage ITs declared class @Timeouts BELOW the worst-case sum of
  their own sequential Awaitility ceilings (300s vs 420s; 420s vs 960s), so a
  slow-but-correct run would be killed by JUnit mid-scenario instead of failing an
  assertion. Timeouts raised with the arithmetic recorded beside them; every
  atMost() and assertion untouched (finding #10).

- docs/inflight/release-0.6.0.0.md now records the transactional path's give-up
  type change (InternalRuntimeException after 200 attempts -> public
  OffsetCommitBudgetExceededException on budget exhaustion) beside the existing
  #204 sync-path note (finding #9), and the candidate-ranking register
  drops its entry for the seam work landing with this branch, whose note this
  branch deletes (finding #6).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016jCtV2yqQvxDR6cLML8J8a
astubbs added a commit that referenced this pull request Sep 2, 2026
… a record that waited out a replacement behind the restored offsets

The replay-integrity findings #1, #5, #9, #10 and #12 of the
#410 review, resolved as one contract: recovery
owes the replay of the aborted transaction's work until the replay has
completed, and a record dispatched before that replay re-queues behind
what it put back. Each mechanism has a test that was red against the
previous code, run as a mutant of this commit.

What changed for a user of the PC-built transactional path:

- A throw inside the recovery drain no longer lets the next commit publish
  offsets for output the broker discarded. beginReplacement consumed the
  pending condition before the drain and replay ran; a successful-work
  listener (user code, run by the drain) throwing there was logged as
  "attempted again on a later pass", but the next pass found nothing
  pending, built the replacement at once, and its first commit trimmed the
  intact ledger. ProducerManager now carries replayOwed, set beside the
  consumed condition and cleared only when the drain and replay have
  returned normally; completeReplacement defers while it is set, and the
  recovery pass re-enters the write lock whenever it is set, condition or
  no condition. PartitionState forgets a ledger entry only after every
  entry is back in processing, and the mailbox drain lands every result
  before rethrowing the first failure - a throw mid-loop used to leave the
  results behind it in a local queue, in flight forever
  (ProducerRecoveryTest: aListenerThrowingDuringTheRecoveryDrainLeavesThe
  ReplayOwedUntilALaterPassCompletesIt, asserting that every offset the
  replacement committed has output in the replacement's own history;
  ProducerManagerRecoveryTest: noReplacementIsBuiltWhileTheReplayIsStill
  Owed).

- Under KEY or PARTITION ordering a record no longer produces ahead of the
  restored earlier record of its shard. The second record of a key is
  dispatched once the first completes, and can be on its way to the
  produce lock - or parked at it - when the replay puts the first back;
  it used to proceed the instant the replacement was published, and its
  output landed first. The control thread now stamps every batch with the
  replay generation at dispatch (it is the thread that also runs the
  replay, so the two are totally ordered - stamping on the worker would
  leave a batch queued in the pool across a replay unstamped), and the
  produce lock refuses a batch whose generation is stale: the read hold is
  released, the batch fails with ProducerInvalidatedException, and ordered
  selection takes the restored lower offset first. A replay that put
  nothing back moves the generation nothing, so a parked worker proceeds
  as before (ProducerRecoveryTest: aRecordDispatchedBeforeTheReplay
  ProducesAfterTheRestoredEarlierRecordOfItsKey, in eager mode so the
  record is held in its user function with no lock across the fence;
  ProducerManagerRecoveryTest: aWorkerDispatchedBeforeAReplayIsRefusedThe
  ProduceLockAfterIt and its control arm).

- Recovery is now silent at the record level, as the plan's settled
  decision said it was. A batch that could not be produced because the
  producer was being replaced took the same arm as a user-function
  failure, so RecordContext.getNumberOfFailedAttempts() rose by one per
  recovery, the retry delay applied, and a dead-letter-after-N policy
  could dead-letter a live record once per rebuild-and-refence cycle.
  WorkContainer.deferForRecovery() ends the delivery with no attempt
  counted, no retry delay and no last-failure reason; the failed-records
  meter does not count it; and the container goes back into selection
  without entering the retry queue, which reads an absent retry deadline
  as Instant.MIN and overflowed the control thread's lowest-retry-time
  calculation the first time a deferred record reached it. Recorded as a
  dated correction beside the decision in the plan's Key Technical
  Decisions (ProducerRecoveryTest: aRecordDeferredForRecoveryCarriesNo
  FailedAttemptAndCountsOnNoFailureMeter).

- The drain-before-replay order is pinned. The pair is extracted into a
  package-visible replayWorkDiscardedByAbortedTransaction(), and
  AbortedTransactionReplayStepTest mailboxes a completed result without
  draining, calls it, and asserts both offsets are restored; with the
  drain removed it returns 1 and offset 1 stays complete.

- The broker IT fences on a NON-empty ledger too. The existing case
  initialises the rogue only after every prior key is visible at
  read_committed, so its ledger is always empty when the fence lands and
  the replay never runs on the wire. The new case holds a processed phase
  uncommitted under a 10 s commit interval, asserts the verifier has seen
  none of it, then fences: every key's user function runs at least twice
  and exactly one result per key is visible after a settle poll, which
  both cases now run before asserting "exactly one". TransactionalClaim
  C15's proof text names the new case for the replay half.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
astubbs added a commit that referenced this pull request Sep 2, 2026
…ts, the rest of the commit before this

The previous commit (f8ed2bb) was meant to carry all of this; a pre-commit gate stopped the command before it staged these files, and the history-rewrite hook forbids amending under an in-progress review. Its message, which describes both commits together:

The replay-integrity findings #1, #5, #9, #10 and #12 of the
#410 review, resolved as one contract: recovery
owes the replay of the aborted transaction's work until the replay has
completed, and a record dispatched before that replay re-queues behind
what it put back. Each mechanism has a test that was red against the
previous code, run as a mutant of this commit.

What changed for a user of the PC-built transactional path:

- A throw inside the recovery drain no longer lets the next commit publish
  offsets for output the broker discarded. beginReplacement consumed the
  pending condition before the drain and replay ran; a successful-work
  listener (user code, run by the drain) throwing there was logged as
  "attempted again on a later pass", but the next pass found nothing
  pending, built the replacement at once, and its first commit trimmed the
  intact ledger. ProducerManager now carries replayOwed, set beside the
  consumed condition and cleared only when the drain and replay have
  returned normally; completeReplacement defers while it is set, and the
  recovery pass re-enters the write lock whenever it is set, condition or
  no condition. PartitionState forgets a ledger entry only after every
  entry is back in processing, and the mailbox drain lands every result
  before rethrowing the first failure - a throw mid-loop used to leave the
  results behind it in a local queue, in flight forever
  (ProducerRecoveryTest: aListenerThrowingDuringTheRecoveryDrainLeavesThe
  ReplayOwedUntilALaterPassCompletesIt, asserting that every offset the
  replacement committed has output in the replacement's own history;
  ProducerManagerRecoveryTest: noReplacementIsBuiltWhileTheReplayIsStill
  Owed).

- Under KEY or PARTITION ordering a record no longer produces ahead of the
  restored earlier record of its shard. The second record of a key is
  dispatched once the first completes, and can be on its way to the
  produce lock - or parked at it - when the replay puts the first back;
  it used to proceed the instant the replacement was published, and its
  output landed first. The control thread now stamps every batch with the
  replay generation at dispatch (it is the thread that also runs the
  replay, so the two are totally ordered - stamping on the worker would
  leave a batch queued in the pool across a replay unstamped), and the
  produce lock refuses a batch whose generation is stale: the read hold is
  released, the batch fails with ProducerInvalidatedException, and ordered
  selection takes the restored lower offset first. A replay that put
  nothing back moves the generation nothing, so a parked worker proceeds
  as before (ProducerRecoveryTest: aRecordDispatchedBeforeTheReplay
  ProducesAfterTheRestoredEarlierRecordOfItsKey, in eager mode so the
  record is held in its user function with no lock across the fence;
  ProducerManagerRecoveryTest: aWorkerDispatchedBeforeAReplayIsRefusedThe
  ProduceLockAfterIt and its control arm).

- Recovery is now silent at the record level, as the plan's settled
  decision said it was. A batch that could not be produced because the
  producer was being replaced took the same arm as a user-function
  failure, so RecordContext.getNumberOfFailedAttempts() rose by one per
  recovery, the retry delay applied, and a dead-letter-after-N policy
  could dead-letter a live record once per rebuild-and-refence cycle.
  WorkContainer.deferForRecovery() ends the delivery with no attempt
  counted, no retry delay and no last-failure reason; the failed-records
  meter does not count it; and the container goes back into selection
  without entering the retry queue, which reads an absent retry deadline
  as Instant.MIN and overflowed the control thread's lowest-retry-time
  calculation the first time a deferred record reached it. Recorded as a
  dated correction beside the decision in the plan's Key Technical
  Decisions (ProducerRecoveryTest: aRecordDeferredForRecoveryCarriesNo
  FailedAttemptAndCountsOnNoFailureMeter).

- The drain-before-replay order is pinned. The pair is extracted into a
  package-visible replayWorkDiscardedByAbortedTransaction(), and
  AbortedTransactionReplayStepTest mailboxes a completed result without
  draining, calls it, and asserts both offsets are restored; with the
  drain removed it returns 1 and offset 1 stays complete.

- The broker IT fences on a NON-empty ledger too. The existing case
  initialises the rogue only after every prior key is visible at
  read_committed, so its ledger is always empty when the fence lands and
  the replay never runs on the wire. The new case holds a processed phase
  uncommitted under a 10 s commit interval, asserts the verifier has seen
  none of it, then fences: every key's user function runs at least twice
  and exactly one result per key is visible after a settle poll, which
  both cases now run before asserting "exactly one". TransactionalClaim
  C15's proof text names the new case for the replay half.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VrpH51xNDodaajE4P2nhFg
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant