Connection pool follow-ups (#67): async min_idle is inert; hooks/timeouts untested
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 38/100
Research direction
Start in hyperdb-api/src/pool.rs, especially PoolConfig::min_idle, the async Manager::recycle path, and the sync should_evict implementation. Compare the async and sync pool behavior, then review deadpool's lifecycle hooks and timeouts. Done means choosing how async min_idle should behave or removing it, and adding coverage for hooks, timeout firing, and async contention.
Written by the indexing model from the issue text.
Description
Summary
Follow-ups from the connection-pool work for #67. The feature is functional and additive, but two areas are intentionally noted as not-yet-complete so they aren't mistaken for finished:
-
PoolConfig::min_idleis inert on the async pool. The field is stored and has a builder (hyperdb-api/src/pool.rs:223,:371), but the async eviction path — deadpool's per-connectionManager::recycle— only consultsmax_lifetimeandidle_timeout; it never readsmin_idle. A per-connection recycle callback has no view of the pool-wide idle/live count, so it cannot enforce a warm-connection floor.min_idleis honored only by the sync pool'sshould_evict(hyperdb-api/src/pool.rs:837-838). So an async caller settingmin_idlecurrently gets a no-op knob.Options: either implement a pool-wide
min_idlefloor for the async pool (likely needs a pool-level hook rather than the per-connection recycle callback), or dropmin_idlefrom the asyncPoolConfigso the surface matches behavior. -
Untested surfaces. A few public paths have no integration-test coverage yet:
after_connect/before_acquirelifecycle hooks (onlyRecycleStrategy::Custom, the recycle probe, is exercised).create_timeoutandrecycle_timeoutfiring — they are plumbed into deadpool'sTimeouts, but onlywait_timeoutfiring is proven by a test.- The async pool has no concurrency/contention test (the sync pool does).
Why file this
These were surfaced by an adversarial fact-check of the feature's PR description and are documented as known limitations there. Filing so they're tracked rather than silently assumed complete. Neither blocks the additive feature from landing.
Notes
Line references are against the #67 feature branch; they may shift if the branch is rebased before merge.
- Dominant language
- Rust
- Stars
- 2
- Forks
- 2
- Avg merge
- 12h 2m
- Merged PRs (30d)
- 60
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from tableau/hyper-api-rust
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
tableau/hyper-api-rust#294 ·
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
tableau/hyper-api-rust#311 ·
-
Difficulty 4/5 3-5 days Newbie friendliness 45/100
tableau/hyper-api-rust#305 ·
-
Windows Named Pipe: verify DACL denies other users, and measure read-path perf for MCP workloads Open
Difficulty 4/5 3-5 days Newbie friendliness 38/100
tableau/hyper-api-rust#302 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 72/100
tableau/hyper-api-rust#300 ·
All issues in tableau/hyper-api-rust
Similar issues
-
bug github_actions
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
registrystack/registry-stack#1393 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
longbridge/gpui-kit#3223 ·
-
bug engine
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
rocky-data/rocky#2181 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
oasisprotocol/oasis-sdk#2523 ·
-
[indexer] [QA] Add a focused test for the new NonRetryableError / assertSocketAlive() behavior. Openbot:ai-assisted component:indexer QA-roadmap status:untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
midnightntwrk/midnight-indexer#1557 ·