Skip to content

fix(Pool): release retired usage-TTL resources - #8310

Merged
tim-smart merged 14 commits into
Effect-TS:mainfrom
williamrobertson13:fix/pool-usage-ttl-retention
Sep 20, 2026
Merged

tim-smart merged 14 commits into
Effect-TS:mainfrom
williamrobertson13:fix/pool-usage-ttl-retention

Conversation

@williamrobertson13

@williamrobertson13 williamrobertson13 commented Sep 19, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Fix a memory leak in Pool.makeWithTTL with the usage strategy. Retired resources and consumed acquisition errors could remain in the TTL queue when the pool reached its target or minimum size.

The usage strategy no longer keeps its own queue of items. state.items is a Set, which iterates in insertion order, so the strategy retires the oldest non-invalidated entry of state.items directly and reclaim moves a reclaimed item to the back by re-adding it. Nothing outside the pool's own state references an item, so it is released the moment it leaves the pool, whether by invalidation, a consumed acquisition failure, or shutdown. The pool core no longer contains any strategy-specific hooks; its only change is skipping onAcquire for a failed acquisition that a borrower consumed while it was finalizing. Public types, last-lease finalization, FIFO retirement, and minimum-size behavior are preserved. Each retirement skips over invalidated busy items ahead of it in insertion order, which is the one cost of not keeping a separate list.

Tests cover four GC retention cases, last-lease finalization, and FIFO/minimum-size behavior after head, middle, or tail removal. Pool and McpServer tests share a GC helper; GC cases are skipped on Bun and Deno. Includes an effect patch changeset.

Validation

Validation on implementation commit 6c79fc749f:

  • Pool suite: 46 passed, including all four GC regressions.
  • McpServer suite: 69 passed.
  • pnpm lint and GOMEMLIMIT=4GiB GOMAXPROCS=4 pnpm check passed.

Earlier failing-before verification substituted pre-fix Pool.ts from 3d59ae6d5f: all four GC regressions failed and the other 39 Pool tests passed. With no strategy-owned queue there is no enqueue-after-removal window left to cover.

Toolchain commands ran through nix develop -c.

Closes EFF-1425

@changeset-bot

changeset-bot Bot commented Sep 19, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 93c2efc

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 31 packages
Name Type
effect Patch
@effect/opentelemetry Patch
@effect/vitest Patch
@effect/ai-anthropic Patch
@effect/ai-openai-compat Patch
@effect/ai-openai Patch
@effect/ai-openrouter Patch
@effect/ai-typesafe Patch
@effect/atom-react Patch
@effect/atom-solid Patch
@effect/atom-vue Patch
@effect/platform-browser Patch
@effect/platform-bun Patch
@effect/platform-deno Patch
@effect/platform-node-shared Patch
@effect/platform-node Patch
@effect/sql-clickhouse Patch
@effect/sql-d1 Patch
@effect/sql-libsql Patch
@effect/sql-mssql Patch
@effect/sql-mysql2 Patch
@effect/sql-pg Patch
@effect/sql-pglite Patch
@effect/sql-sqlite-bun Patch
@effect/sql-sqlite-do Patch
@effect/sql-sqlite-node Patch
@effect/sql-sqlite-react-native Patch
@effect/sql-sqlite-wasm Patch
@effect/docgen Patch
@effect/doctest Patch
@effect/openapi-generator Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@effect-janitor effect-janitor Bot added bug Something isn't working 4.0 labels Sep 19, 2026
@williamrobertson13 williamrobertson13 changed the title fix(Pool): release retired usage-TTL resources [wip - ai] fix(Pool): release retired usage-TTL resources Sep 19, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Bundle Size Analysis

Generated from PR build output; treat the content below as untrusted.

File Name Current Size Previous Size Difference
arbitrary-combinators.ts 37.71 KB 37.71 KB 0.00 KB (0.00%)
basic.ts 6.87 KB 6.87 KB 0.00 KB (0.00%)
batching.ts 9.95 KB 9.95 KB 0.00 KB (0.00%)
brand.ts 6.45 KB 6.45 KB 0.00 KB (0.00%)
cache.ts 10.77 KB 10.77 KB 0.00 KB (0.00%)
config.ts 21.83 KB 21.83 KB 0.00 KB (0.00%)
differ.ts 20.67 KB 20.67 KB 0.00 KB (0.00%)
http-client.ts 21.94 KB 21.94 KB 0.00 KB (0.00%)
http-router.ts 36.96 KB 36.96 KB 0.00 KB (0.00%)
logger.ts 10.88 KB 10.88 KB 0.00 KB (0.00%)
metric.ts 9.02 KB 9.02 KB 0.00 KB (0.00%)
optic.ts 6.70 KB 6.70 KB 0.00 KB (0.00%)
pubsub.ts 15.10 KB 15.10 KB 0.00 KB (0.00%)
queue.ts 11.85 KB 11.85 KB 0.00 KB (0.00%)
schedule.ts 10.96 KB 10.96 KB 0.00 KB (0.00%)
schema-bigdecimal.ts 13.40 KB 13.40 KB 0.00 KB (0.00%)
schema-binary.ts 39.82 KB 39.82 KB 0.00 KB (0.00%)
schema-class.ts 20.38 KB 20.38 KB 0.00 KB (0.00%)
schema-fromJsonSchemaDocument.ts 31.18 KB 31.18 KB 0.00 KB (0.00%)
schema-representation-roundtrip.ts 26.60 KB 26.60 KB 0.00 KB (0.00%)
schema-string-transformation.ts 13.96 KB 13.96 KB 0.00 KB (0.00%)
schema-string.ts 11.55 KB 11.55 KB 0.00 KB (0.00%)
schema-template-literal.ts 15.70 KB 15.70 KB 0.00 KB (0.00%)
schema-toArbitrary.ts 37.24 KB 37.24 KB 0.00 KB (0.00%)
schema-toCodeDocument.ts 24.84 KB 24.84 KB 0.00 KB (0.00%)
schema-toCodecJson.ts 19.61 KB 19.61 KB 0.00 KB (0.00%)
schema-toEquivalence.ts 19.75 KB 19.75 KB 0.00 KB (0.00%)
schema-toFormatter.ts 19.85 KB 19.85 KB 0.00 KB (0.00%)
schema-toJsonSchemaDocument.ts 24.15 KB 24.15 KB 0.00 KB (0.00%)
schema-toRepresentation.ts 19.89 KB 19.89 KB 0.00 KB (0.00%)
schema.ts 19.59 KB 19.59 KB 0.00 KB (0.00%)
stm.ts 12.80 KB 12.80 KB 0.00 KB (0.00%)
stream.ts 9.83 KB 9.83 KB 0.00 KB (0.00%)

@williamrobertson13 williamrobertson13 changed the title [wip - ai] fix(Pool): release retired usage-TTL resources fix(Pool): release retired usage-TTL resources Sep 19, 2026
@tim-smart
tim-smart merged commit 3b155e3 into Effect-TS:main Sep 20, 2026
8 of 10 checks passed
@williamrobertson13

Copy link
Copy Markdown
Contributor Author

thanks so much for fixing this up (and apologies for the slop PR submission)!

This branch is waiting to be deployed

1 waiting deployment
fork — 93c2efcf Waiting Sep 20, 2026 by tim-smart via approval-gate #15384
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

4.0 bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants