Skip to content

[pull] master from apify:master - #275

Merged
pull[bot] merged 4 commits into
code:masterfrom
apify:master
Aug 27, 2026
Merged

[pull] master from apify:master#275
pull[bot] merged 4 commits into
code:masterfrom
apify:master

Conversation

@pull

@pull pull Bot commented Aug 27, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

janbuchar and others added 4 commits August 27, 2026 10:28
…anager to fix leaky abstraction of ThrottlingRequestManager (#4061)

- closes #3999
- closes #4027
- supersedes #4037
- supersedes #4038
- contributes to #4039

Worth reviewing in order — each change stands alone, with the reasoning
in its own message.

1. `checkReadiness()` replaces `isEmpty()` / `isFinished()` on
`IRequestLoader` and `IRequestManager`.
2. `IRequestManager.recordPacingSignal()` replaces the
`SupportsDomainThrottling` capability probe.
3. The crawler builds the `sameDomainDelaySecs` throttler in its
constructor, which is what puts it *inside* the tandem.
4. `sameDomainDelaySecs` goes in through `recordPacingSignal()` as a
floor covering every domain, so a manager that already paces takes it
instead of getting a second pacer wrapped around it.
5. `ThrottlingRequestManager`'s `inner` is optional — omitted, it opens
the default queue on first use. Same feature as #4037, which is a much
smaller patch on top of the lazy `inner` factory this branch already
has.

On #3999 this takes the first option — wrappers forward — but the
objection there was that it makes `RequestManagerTandem` know throttling
exists. It doesn't: pacing signals are `IRequestManager` members, so the
tandem forwards a `PacingSignal` it never looks inside, and learns
nothing throttling-specific. That deletes the capability-discovery
problem rather than solving it, which is why the delegation interface
from #4038 isn't here.

One capability check did survive that — the guard refusing
`sameDomainDelaySecs` over a `ThrottlingRequestManager` — and it missed
a throttler behind a tandem (#discussion_r3851833671). The fourth change
removes it rather than deepening it: the floor is a `PacingSignal` like
any other, so whatever paces takes it wherever it sits in a composition,
and a manager pacing only *some* of its domains throws rather than
under-applying it. No `instanceof` left anywhere.

#4039 is the shape `sameDomainDelaySecs` was producing on its own:
wrapping happened at first use, by which point the tandem for a
`requestList` already existed, so the pacer went outside it and a list's
requests reached the queue without passing a per-domain clock. The third
commit builds the pacer in the constructor instead, so those requests
are routed by domain like any other. The hand-built form in #4039's
reproduction is untouched — `fetchNextRequest` still takes whatever
`inner` offers without checking the clocks — so #4040 is still needed.

Migration notes in `docs/upgrading/upgrading_v4.md`.
The extractor now lives in apify/api-extractor-report and is invoked
through `pnpm dlx`, with the crawlee-specific packages and exclusions
passed as arguments.
Removes `closeCookieModals` from the Playwright and Puppeteer crawlers
along with the optional `idcac-playwright` dependency. Related: #3987
@pull pull Bot locked and limited conversation to collaborators Aug 27, 2026
@pull pull Bot added the ⤵️ pull label Aug 27, 2026
@pull
pull Bot merged commit 0369fed into code:master Aug 27, 2026
@pull
pull Bot had a problem deploying to github-pages August 27, 2026 23:45 Failure
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants