Skip to content

PoolCluster: access to pool events, lack of docs #2468

Open
@singerb

Description

@singerb

I started experimenting with using PoolCluster to manage pools to multiple databases, including distinguishing readonly from readwrite (i.e. primary and replicas) via aliases and wildcards. I ran into trouble for a few reasons:

  • the example code given suggests that cluster.of() returns a Pool, when in fact it simply returns something that implements getConnection() and query(); after reading other issues, this of course makes sense because with a selector like READONLY* that naturally gives you an object that might represent N different pools
  • lack of explicit documentation here means I (and others) have had to infer this from testing and reading the source/issues
  • we need access to the Pool objects, however, to use things like the connection event (to set SQL session modes), and acquire/enqueue (for deadlock tracking); given the design constraint on of(), there needs to be another way to provide this access. Possibilities:
  • Allow passing full Pool objects to add(), not just PoolConfig; then the caller could do any setup needed before putting them in the cluster
  • Allow an optional callback to add() which will be called with the resulting Pool
  • Emit a pool or added event, similar to connection from Pool, that allows the listener to know when a new Pool has been created by the cluster and set listeners etc. on it
  • Allow passing event listeners in the config (would make sense as a larger design change, i.e. for all object types)

I know the documentation concerns have been raised before, but wanted to capture my thoughts on the other issues.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions