Zaldaryon's review of #384 flagged a follow-up on the shared QUERY_URL limiter (src/ipc/handlers/netHandlers.ts), which #384 added to stop a modpack import from opening one socket per mod with no ceiling:
The single global FIFO means Manage Mods' still-unbounded installed-mod fan-out can make a later catalog or filter fetch wait behind a full page scan; bounding that fan-out at its own call site would keep one page's scan from starving another page's first request.
useGetCompleteInstalledMods still queries the mod database once per installed mod with no cap of its own, so a large Mods folder can queue a long run of lookups against the shared 6-slot limiter. Everything else that shares that limiter, including a fresh catalog search or filter change on the mods list page, is a FIFO queue behind that run: the whole point of the queue (protecting the community-run mod database from an unbounded burst) also means one page's full scan can make another page's very first request wait for it.
The fix belongs at useGetCompleteInstalledMods's own call site: bound its fan-out (a ConcurrencyLimiter sized well under the shared 6, so the scan cannot occupy every slot on its own) rather than changing the shared limiter, which every caller of QUERY_URL still needs.
Linked from #384, which added the shared limiter this issue is a follow-up to.
Zaldaryon's review of #384 flagged a follow-up on the shared QUERY_URL limiter (
src/ipc/handlers/netHandlers.ts), which #384 added to stop a modpack import from opening one socket per mod with no ceiling:useGetCompleteInstalledModsstill queries the mod database once per installed mod with no cap of its own, so a large Mods folder can queue a long run of lookups against the shared 6-slot limiter. Everything else that shares that limiter, including a fresh catalog search or filter change on the mods list page, is a FIFO queue behind that run: the whole point of the queue (protecting the community-run mod database from an unbounded burst) also means one page's full scan can make another page's very first request wait for it.The fix belongs at
useGetCompleteInstalledMods's own call site: bound its fan-out (aConcurrencyLimitersized well under the shared 6, so the scan cannot occupy every slot on its own) rather than changing the shared limiter, which every caller of QUERY_URL still needs.Linked from #384, which added the shared limiter this issue is a follow-up to.