From 5d453485a92017e7fbd197696f271a7e03134741 Mon Sep 17 00:00:00 2001 From: georgysavva Date: Fri, 3 Apr 2020 10:28:05 +0300 Subject: [PATCH 1/2] Introduce new pool setting: LazyConnect --- go.sum | 2 -- pgxpool/pool.go | 19 +++++++++++++------ pgxpool/pool_test.go | 17 +++++++++++++++++ 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/go.sum b/go.sum index c967ffdf..6a274b4c 100644 --- a/go.sum +++ b/go.sum @@ -60,8 +60,6 @@ github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b h1:cIcUpcEP55F/QuZWEt github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9 h1:KLBBPU++1T3DHtm1B1QaIHy80Vhu0wNMErIFCNgAL8Y= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.1.0 h1:musOWczZC/rSbqut475Vfcczg7jJsdUQf0D6oKPLgNU= -github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.1 h1:PJAw7H/9hoWC4Kf3J8iNmL1SwA6E8vfsLqBiL+F6CtI= github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= diff --git a/pgxpool/pool.go b/pgxpool/pool.go index 0fa7c98f..83fa02d3 100644 --- a/pgxpool/pool.go +++ b/pgxpool/pool.go @@ -112,6 +112,11 @@ type Config struct { // HealthCheckPeriod is the duration between checks of the health of idle connections. HealthCheckPeriod time.Duration + // If set to true, pool doesn't do any I/O operation on initialization. + // And connects to the server only when the pool starts to be used. + // The default is false. + LazyConnect bool + createdByParseConfig bool // Used to enforce created by ParseConfig rule. } @@ -180,13 +185,15 @@ func ConnectConfig(ctx context.Context, config *Config) (*Pool, error) { go p.backgroundHealthCheck() - // Initially establish one connection - res, err := p.p.Acquire(ctx) - if err != nil { - p.p.Close() - return nil, err + if !config.LazyConnect { + // Initially establish one connection + res, err := p.p.Acquire(ctx) + if err != nil { + p.p.Close() + return nil, err + } + res.Release() } - res.Release() return p, nil } diff --git a/pgxpool/pool_test.go b/pgxpool/pool_test.go index 57fbb401..89f324a6 100644 --- a/pgxpool/pool_test.go +++ b/pgxpool/pool_test.go @@ -41,6 +41,23 @@ func TestConnectCancel(t *testing.T) { assert.Equal(t, context.Canceled, err) } +func TestLazyConnect(t *testing.T) { + t.Parallel() + + config, err := pgxpool.ParseConfig(os.Getenv("PGX_TEST_DATABASE")) + assert.NoError(t, err) + config.LazyConnect = true + + ctx, cancel := context.WithCancel(context.Background()) + cancel() + + pool, err := pgxpool.ConnectConfig(ctx, config) + assert.NoError(t, err) + + _, err = pool.Exec(ctx, "SELECT 1") + assert.Equal(t, context.Canceled, err) +} + func TestConnectConfigRequiresConnConfigFromParseConfig(t *testing.T) { t.Parallel() From 271f5a8a7d5ad409e4e18a946c667e7a9c2c83a4 Mon Sep 17 00:00:00 2001 From: georgysavva Date: Fri, 3 Apr 2020 10:56:40 +0300 Subject: [PATCH 2/2] revert go.sum --- go.sum | 2 ++ 1 file changed, 2 insertions(+) diff --git a/go.sum b/go.sum index 6a274b4c..c967ffdf 100644 --- a/go.sum +++ b/go.sum @@ -60,6 +60,8 @@ github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b h1:cIcUpcEP55F/QuZWEt github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9 h1:KLBBPU++1T3DHtm1B1QaIHy80Vhu0wNMErIFCNgAL8Y= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.0 h1:musOWczZC/rSbqut475Vfcczg7jJsdUQf0D6oKPLgNU= +github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.1 h1:PJAw7H/9hoWC4Kf3J8iNmL1SwA6E8vfsLqBiL+F6CtI= github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=