diff --git a/go.mod b/go.mod index f527c7fb..6710f0e8 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.18 require ( github.com/jackc/pgpassfile v1.0.0 github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b - github.com/jackc/puddle v1.2.1 + github.com/jackc/puddle v1.2.2-0.20220404125616-4e959849469a github.com/stretchr/testify v1.7.0 golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b golang.org/x/text v0.3.7 diff --git a/go.sum b/go.sum index a9851d43..9dc19a92 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,8 @@ github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHF github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= github.com/jackc/puddle v1.2.1 h1:gI8os0wpRXFd4FiAY2dWiqRK037tjj3t7rKFeO4X5iw= github.com/jackc/puddle v1.2.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.2.2-0.20220404125616-4e959849469a h1:oH7y/b+q2BEerCnARr/HZc1NxOYbKSJor4MqQXlhh+s= +github.com/jackc/puddle v1.2.2-0.20220404125616-4e959849469a/go.mod h1:ZQuO1Un86Xpe1ShKl08ERTzYhzWq+OvrvotbpeE3XO0= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= diff --git a/pgxpool/conn.go b/pgxpool/conn.go index edb4f257..3ab8b375 100644 --- a/pgxpool/conn.go +++ b/pgxpool/conn.go @@ -6,12 +6,12 @@ import ( "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgconn" - "github.com/jackc/puddle" + puddle "github.com/jackc/puddle/puddleg" ) // Conn is an acquired *pgx.Conn from a Pool. type Conn struct { - res *puddle.Resource + res *puddle.Resource[*connResource] p *Pool } @@ -113,7 +113,7 @@ func (c *Conn) Conn() *pgx.Conn { } func (c *Conn) connResource() *connResource { - return c.res.Value().(*connResource) + return c.res.Value() } func (c *Conn) getPoolRow(r pgx.Row) *poolRow { diff --git a/pgxpool/pool.go b/pgxpool/pool.go index c3abc51a..6e50198d 100644 --- a/pgxpool/pool.go +++ b/pgxpool/pool.go @@ -10,7 +10,7 @@ import ( "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgconn" - "github.com/jackc/puddle" + puddle "github.com/jackc/puddle/puddleg" ) var defaultMaxConns = int32(4) @@ -26,7 +26,7 @@ type connResource struct { poolRowss []poolRows } -func (cr *connResource) getConn(p *Pool, res *puddle.Resource) *Conn { +func (cr *connResource) getConn(p *Pool, res *puddle.Resource[*connResource]) *Conn { if len(cr.conns) == 0 { cr.conns = make([]Conn, 128) } @@ -70,7 +70,7 @@ func (cr *connResource) getPoolRows(c *Conn, r pgx.Rows) *poolRows { // Pool allows for connection reuse. type Pool struct { - p *puddle.Pool + p *puddle.Pool[*connResource] config *Config beforeConnect func(context.Context, *pgx.ConnConfig) error afterConnect func(context.Context, *pgx.Conn) error @@ -177,7 +177,7 @@ func ConnectConfig(ctx context.Context, config *Config) (*Pool, error) { } p.p = puddle.NewPool( - func(ctx context.Context) (any, error) { + func(ctx context.Context) (*connResource, error) { connConfig := p.config.ConnConfig if p.beforeConnect != nil { @@ -209,9 +209,9 @@ func ConnectConfig(ctx context.Context, config *Config) (*Pool, error) { return cr, nil }, - func(value any) { + func(value *connResource) { ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) - conn := value.(*connResource).conn + conn := value.conn conn.Close(ctx) select { case <-conn.PgConn().CleanupDone(): @@ -416,7 +416,7 @@ func (p *Pool) Acquire(ctx context.Context) (*Conn, error) { return nil, err } - cr := res.Value().(*connResource) + cr := res.Value() if p.beforeAcquire == nil || p.beforeAcquire(ctx, cr.conn) { return cr.getConn(p, res), nil } @@ -444,7 +444,7 @@ func (p *Pool) AcquireAllIdle(ctx context.Context) []*Conn { resources := p.p.AcquireAllIdle() conns := make([]*Conn, 0, len(resources)) for _, res := range resources { - cr := res.Value().(*connResource) + cr := res.Value() if p.beforeAcquire == nil || p.beforeAcquire(ctx, cr.conn) { conns = append(conns, cr.getConn(p, res)) } else {