Skip to content

WIP: Fixes #21 - Dynamic concurrency control - #22

Closed
Antony Stubbs (astubbs) wants to merge 3 commits into
masterfrom
features/dynamic-concurrency-control
Closed

Antony Stubbs (astubbs) wants to merge 3 commits into
masterfrom
features/dynamic-concurrency-control

Conversation

@astubbs

@astubbs Antony Stubbs (astubbs) commented Nov 5, 2020 •

Copy link
Copy Markdown
Contributor

Fixes #21

Prevent user from having to choose a level of concurrency with either the core engine or the vertx engine.

Uses concepts from tcp congestion control to set the thread pool size by measuring performance of execution.
Originally planned to do this by hand using concepts from Engineering Control Theory, but stumbled upon Netflix's concurrency-limits library, which uses very similar theory from TCP congestion control theory.

…y-limits project

Uses concepts from tcp congestion control to set the thread pool size by
measuring performance of execution.
Originally planned to do this by hand using concepts from Engineering Control
Theory, but stumbled upon this library, which uses very similar theory from
TCP congestion control theory.
…deps for core)

- More pluggable execution model
@astubbs
Antony Stubbs (astubbs) force-pushed the features/dynamic-concurrency-control branch from e5ca55d to a861249 Compare November 5, 2020 17:05
@astubbs Antony Stubbs (astubbs) changed the title Fixes #21 - Dynamic concurrency control WIP: Fixes #21 - Dynamic concurrency control May 16, 2022
Antony Stubbs (astubbs) added a commit to astubbs/parallel-consumer that referenced this pull request Aug 14, 2026
A mirror records what a closed PR said; it does not keep the code. The 35 PRs
closed in the 2023-06-15 sweep were reachable through refs/pull/<n>/head in the
upstream repository - not a copy we control. If that repo is deleted, or a
contributor's fork disappears, the commits go with it and the mirrors describe
work whose diff no longer exists.

Checked each of the 35 against this fork's refs. 29 were already safe, raised
from branches that still exist here. Six were reachable only from upstream, and
were not even present in a local clone: confluentinc#22, confluentinc#204,
confluentinc#270, confluentinc#405, confluentinc#443 and confluentinc#506. All
six are now pinned as annotated archive/upstream-pr-<n> tags carrying the
upstream title, author, head branch and closure date, so provenance survives
without the upstream thread.

confluentinc#443 was the sharpest case - a third-party fork (Robbie-Palmer) can
vanish independently of Confluent's repository and nothing would have flagged it.

Tags rather than branches: they are not swept by branch-cleanup tooling and read
as archival rather than live work. Recorded as a recurring check, since a head
safe today can be orphaned tomorrow.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Antony Stubbs (astubbs) added a commit to astubbs/parallel-consumer that referenced this pull request Aug 14, 2026
…able

Review of this PR found the preservation work sound but the write-up wrong in
two places, and unbacked in a third.

Corrects the confluentinc#443 rationale, which was fabricated. Its head label is
confluentinc:pyallel-consumer and that branch is still live upstream; the
contributor's own fork is already gone and made no difference. All 35 swept
heads carry confluentinc: labels, so the exposure is upstream branch or
repository loss, not a contributor's fork vanishing. The original text inferred
the risk from the PR author field without checking the head repo.

Corrects "29 were already safe, because their PRs were raised from branches that
still exist on this fork". Raised-from is not the criterion that was used or
that holds: confluentinc#271's own branch is gone and its head survives only
because an unrelated branch contains it, while confluentinc#22, confluentinc#270
and confluentinc#405 have same-named fork branches that do NOT contain their
heads. The wording is now reachable-from, and the method records that stale
remote-tracking refs were reconciled against a live ls-remote.

Records the six SHAs in upstream-map.yaml under sweep-2023-admin-closure with
the tag names and a re-verify command, so the containment check can be redone
without re-querying upstream - PR numbers alone did not allow that. The cohort
comment there said all heads "were verified reachable", which this work
disproved for six of them; it now says what was actually found.

Stops claiming a recurring check that nothing performs. --audit covers tracking
and mirroring, not reachability, and would report clean with every archive tag
deleted. Named as a manual step until a containment check is wired in.

Also drops the fork-network durability implication (deleting a public parent
re-roots the network rather than destroying objects, so the tags do discharge
the stated threat), trims the refactoring entry to the file's one-line
prior-art footnote style since fork-upstream mapping is explicitly out of scope
there, and fixes which method holds the user-function try/catch.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Antony Stubbs (astubbs) added a commit to astubbs/parallel-consumer that referenced this pull request Aug 14, 2026
Restores the six-row table removed in the previous commit. The review finding
was that the tag/PR/SHA tuples had two owners and a corrected SHA could drift -
not that a table was the wrong shape. Deleting it was an over-correction; six
rows are more scannable than a prose list.

The table now carries only what does not change - upstream PR, author, and what
the PR was. The tag name, target SHA and check date stay single-owner in
sweep-2023-admin-closure.preserved_heads.

The descriptions are the real upstream titles, fetched rather than recalled. The
first draft of this table invented them and got three wrong, including pasting
confluentinc#45's title onto confluentinc#22 - the same fabrication-from-memory
this PR exists to correct. Embedded upstream refs are dropped from the titles so
the issue-reference gate stays green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Antony Stubbs (astubbs) added a commit to astubbs/parallel-consumer that referenced this pull request Aug 17, 2026
…nk branch recovery

Extends the throttling ideation with idea 8: one adaptive controller
(#227 / confluentinc#21, TCP-congestion-theory concurrency) fed by
latency gradient, failures, and a structured rate-limit exception the
user function throws to teach the engine per-service ceilings at runtime.
Capacity limits are discoverable; contractual quotas are not - explicit
ceilings and adaptive discovery compose by min(), not compete.

Also: idea 5 gains the curated strategy-menu framing (each strategy a
distinct situation, min-composition, enforcement not user-selectable);
docs/refactoring.md idea bank gains the three missing flow-control
branches (dynamic-concurrency-control @6f85eac41, auto-tuning-pressure
@f4aa09788, rate-limiting @e9f49d321) plus upstream draft PR
confluentinc#22; the inflight entry now records the standalone-vs-
self-scaling gating decision.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
Antony Stubbs (astubbs) added a commit to astubbs/parallel-consumer that referenced this pull request Aug 20, 2026
Three records held the same commits under different framings. `preserved_branch_tips`
listed upstream branch tips pinned as tags. `sweep-2023-admin-closure.preserved_heads`
listed swept PR heads pinned as tags. `branch_accounting` listed the branches.

They were not three views of related things - they were the same SHAs. Every one of
the six preserved PR heads is the tip of an upstream branch: confluentinc#443 and the
`pyallel-consumer` tip are two names for 4533f6d, confluentinc#22 and
`features/dynamic-concurrency-control` for ba6b71f, and so on for all six. Ten more
overlapped between the branch-tip record and the mirror.

That is the drift docs/upstream.md already warns about in its own words - a corrected
SHA fixed in one copy while another still reads as authoritative - present in the file
whose job is to stop mappings being re-derived.

So the tag and the PR become FIELDS on the branch entry, and the other two records are
gone. The tags themselves are kept: a branch can be deleted or force-moved, an
annotated tag is the record that a specific commit was deliberately preserved. What
changed is that the fact is written once.

The reasoning from both deleted sections is absorbed into the section header rather
than lost - why tags outlive branches, and how to verify them without fetching. Every
reference in docs/upstream.md and the two inflight notes is repointed, and the claim
that the bot branches "were deliberately not preserved" is corrected: they were not
tagged, but they are mirrored now.

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

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dynamic concurrency control with flow control or tcp congestion control theory

2 participants