epgsql/pooler
66.6
Adequate · 23 September 2026
3.3k
lines of production code
Erlang
primary language
5
measurements over time
What this system is
Pooler is an Erlang library for managing dynamic connection pools of OTP behaviors. It provides a multi-pool architecture where each pool is independently supervised and serviced by its own gen\_server, preventing cross-pool contention and failure cascades. The system supports asynchronous member lifecycle management, group-based load balancing, and configurable connection recycling. It includes a benchmarking suite for performance testing and configuration examples for setting up multiple pools.
Features
Add basho\_bench test rig for performance testing
A new benchmarking suite has been added to the 'bench' directory, providing a test rig for performance testing the pooler library using basho\_bench. This includes a Makefile for building and running tests, configuration files (pooler.config, rebar.config), and Erlang modules (consumer, member, pooler\_driver) that simulate workloads and manage pool members. The suite allows users to run configurable load tests against the pooler implementation.
bench · high confidence
Added pooler configuration examples
Added configuration files for the pooler application, providing example setups for managing connection pools. The new files, demo.config and pooler-example.config, define two pools (pool1 and pool2) with specific start functions and connection limits, serving as a reference for users configuring the pooler system.
config · high confidence
Behavioural changes
Complete rename from pidq to pooler with new supervisor hierarchy
The application has been renamed from pidq to pooler, including the main application module (pooler\_app) and the root supervisor (pooler\_sup). The old pidq\_sup supervisor has been removed. The new structure introduces a multi-level supervisor hierarchy: pooler\_sup manages pooler\_starter\_sup and individual pool supervisors (pooler\_pool\_sup), each of which manages member supervisors (pooler\_pooled\_worker\_sup) and the pooler\_starter for async member lifecycle. This refactoring supports dynamic pool creation, hot upgrades, and better separation of concerns for pool management.
src · high confidence
Major architectural overhaul: multiple independent pools, async member lifecycle, and group-based load balancing
The library has been refactored from a single shared pool to a multi-pool architecture where each pool is serviced by its own gen\_server with an independent supervision tree, preventing cross-pool contention and failure cascades. Member creation and removal are now asynchronous and parallelized, keeping the pool server responsive during slow worker startups. The API has changed: pool names are now atoms, the old take\_pid/take\_member/0 functions are removed, and new group-based load balancing is available via pooler:take\_group\_member/1. Additionally, the project has migrated to Rebar3, added an Apache 2.0 license, and introduced configurable culling of stale members and proactive TTL-based connection recycling.
(repo-wide) · high confidence
Test coverage
Added benchmarks and property-based tests for pooler
Added new benchmark tests in test/bench\_take\_return.erl to measure take/return performance across various pool sizes and configurations, including FIFO dispatch order and TTL-based recycling scenarios. Added property-based tests in test/prop\_pooler.erl using the 'proper' library to verify pool behavior under randomized conditions. Added performance tests in test/pooler\_perf\_test.erl to validate concurrent worker behavior. Supporting test infrastructure includes error\_logger\_mon.erl for log monitoring, fake\_metrics.erl for metrics instrumentation testing, pooled\_gs.erl as a testable gen\_server member, and hotupgrade\_test.sh for release hot code upgrade validation.
test · high confidence
Housekeeping
Added developer notes and overview documentation for the pooler application
New documentation files have been added to the project. doc/dev-notes.org provides detailed implementation notes for the pooler application, covering the supervision tree, state management, member culling, and pool management specifications. Additionally, doc/overview.edoc was added to provide a high-level overview of the pooler OTP application and its usage for managing pools of OTP behaviors.
doc · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 67 → 67 (-0.5)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 95 → 96 (+0.8)
- Architecture 100 → 100 (+0.0)
- Maturity 48 → 53 (+4.6)
- Readiness 74 → 64 (-9.7)
- Security 85 → 84 (-1.8)
- Event Sourcing 100 → 100 (+0.0)
Resolved (7)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- No exposed public API
- Off-boarding risk: anonymized user #1
- Test reliability not included
- TooManyMethods: pooler (src/pooler.erl)
- complexity unreadable for .erl — churn × complexity hotspots could not be measured
New (20)
- Coverage not measured — no coverage collector is wired up
- Dependency hygiene PARTLY measured — rebar3 pinning read, dependency currency not (no rebar.lock-pinned Hex declaration to grade)
- Documentation: no usage examples (bench/README.md)
- Duplicated block (5 lines × 2) (src/pooler.erl)
- Duplicated block (5 lines × 2) (src/pooler.erl)
- Duplicated block (8–9 lines × 2) (bench/src/pooler_driver.erl)
- FixmeComment (src/pooler.erl)
- FixmeComment (test/pooler_tests.erl)
- FixmeComment (test/pooler_tests.erl)
- Floating source dependency: basho_bench
- Floating source dependency: pooler
- High: security finding (details withheld)
- High: security finding (details withheld)
- Hotspot: src/pooler.erl (src/pooler.erl)
- Medium: security finding (details withheld)
- Off-boarding risk: anonymized user #1
- TodoComment (src/pooler.erl)
- TodoComment (src/pooler_app.erl)
- Workflow token permissions not restricted
- pooler.mk_rec_action (cyclomatic 35) (src/pooler.erl)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
epgsql/pooler was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit bb2638c4b5977bcf4be1c3f1ea2ec54d4c49af77 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.