fix: rebalance pool in place#1125
Merged
Merged
Conversation
Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR changes tenant DB pool rebalancing to update existing Knex/Tarn pools in place (instead of draining/destroying and recreating), to avoid cache evictions and reduce GC churn during cluster autoscaling or tenant max-connection updates.
Changes:
- Update
TenantPool.rebalance()to modify the underlying Tarn pool’smaxvalue in place. - Trigger Tarn’s acquire/create loop after resizing (when available) to apply the new max.
- Update the unit test to assert the pool/Knex instance is preserved across rebalance and that
destroy()is not called.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/internal/database/pool.ts | Switches rebalance behavior from “replace/drain pool” to “resize Tarn pool max in place”. |
| src/internal/database/pool.test.ts | Adjusts expectations to validate in-place resizing and no pool destruction during rebalance. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Coverage Report for CI Build 26514061357Coverage increased (+0.1%) to 75.265%Details
Uncovered Changes
Coverage RegressionsNo coverage regressions found. Coverage Stats💛 - Coveralls |
544eb1a to
cd2014c
Compare
cd2014c to
6800125
Compare
itslenny
approved these changes
May 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixing Two issues in tenant pool lifecycle:
updateAgeOnGetprevented TTL eviction, so requests keptfailing against a broken pool.
Changes
TenantPool.rebalancemutatestarnPool.maxand nudges_tryAcquireOrCreate(). No destroy, no GC churn.onTenantConfigChangepicks the right teardown:databaseUrl/databasePoolUrlchanged → harddestroy. Next request rebuilds against the new endpoint.maxConnectionschanged → gracefulrecycle. New pool swapped into the cache synchronously; old pool drains in the background.PoolManager.recycle(tenantId, settings)— synchronous cache swap, background drain viaTenantPool.destroy(). UsesmanuallyDestroyedPoolsto keep the cache
disposehook from racing the explicit destroy.