From a2b400d8ef86ad8be0979b2c584b764b125285b6 Mon Sep 17 00:00:00 2001 From: Matvey Gubanikhin Date: Mon, 2 Nov 2026 16:03:08 +0300 Subject: [PATCH 1/2] Add "pool_ping_timeout" to the connection string. --- fbxpool/pool.go | 13 +++++++++++++ fbxpool/pool_test.go | 20 +++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/fbxpool/pool.go b/fbxpool/pool.go index 1ce52f3..b78e482 100644 --- a/fbxpool/pool.go +++ b/fbxpool/pool.go @@ -22,6 +22,7 @@ var defaultMinIdleConns = int32(0) var defaultMaxConnLifetime = time.Hour var defaultMaxConnIdleTime = time.Minute * 30 var defaultHealthCheckPeriod = time.Minute +var defaultPingTimeout = time.Duration(0) type connResource struct { conn *fbx.Conn @@ -353,6 +354,7 @@ func NewWithConfig(ctx context.Context, config *Config) (*Pool, error) { // - pool_max_conn_idle_time: duration string (default 30 minutes) // - pool_health_check_period: duration string (default 1 minute) // - pool_max_conn_lifetime_jitter: duration string (default 0) +// - pool_ping_timeout: duration string (default 0, meaning no timeout) // // See Config for definitions of these arguments. // @@ -453,6 +455,17 @@ func ParseConfig(connString string) (*Config, error) { config.MaxConnLifetimeJitter = d } + if s, ok := config.ConnConfig.Config.RuntimeParams["pool_ping_timeout"]; ok { + delete(connConfig.Config.RuntimeParams, "pool_ping_timeout") + d, err := time.ParseDuration(s) + if err != nil { + return nil, fbconn.NewParseConfigError(connString, "cannot parse pool_ping_timeout", err) + } + config.PingTimeout = d + } else { + config.PingTimeout = defaultPingTimeout + } + return config, nil } diff --git a/fbxpool/pool_test.go b/fbxpool/pool_test.go index 0152c45..8bad315 100644 --- a/fbxpool/pool_test.go +++ b/fbxpool/pool_test.go @@ -44,13 +44,27 @@ func TestConnectConfig(t *testing.T) { func TestParseConfigExtractsPoolArguments(t *testing.T) { t.Parallel() - config, err := fbxpool.ParseConfig("pool_max_conns=42 pool_min_conns=1 pool_min_idle_conns=2") + config, err := fbxpool.ParseConfig("pool_max_conns=42 pool_min_conns=1 pool_min_idle_conns=2 pool_ping_timeout=250ms") assert.NoError(t, err) assert.EqualValues(t, 42, config.MaxConns) assert.EqualValues(t, 1, config.MinConns) assert.EqualValues(t, 2, config.MinIdleConns) - assert.NotContains(t, config.ConnConfig.RuntimeParams, "pool_max_conns") - assert.NotContains(t, config.ConnConfig.RuntimeParams, "pool_min_conns") + assert.Equal(t, 250*time.Millisecond, config.PingTimeout) + + // Pool parameters must be removed from the connection's RuntimeParams. + assert.NotContains(t, config.ConnConfig.Config.RuntimeParams, "pool_max_conns") + assert.NotContains(t, config.ConnConfig.Config.RuntimeParams, "pool_min_conns") + assert.NotContains(t, config.ConnConfig.Config.RuntimeParams, "pool_min_idle_conns") + assert.NotContains(t, config.ConnConfig.Config.RuntimeParams, "pool_ping_timeout") + + config, err = fbxpool.ParseConfig("") + assert.NoError(t, err) + assert.Zero(t, config.PingTimeout) + + for _, v := range []string{"abc", "250"} { + _, err := fbxpool.ParseConfig("pool_ping_timeout=" + v) + assert.Errorf(t, err, "pool_ping_timeout=%s should be rejected", v) + } } func TestConstructorIgnoresContext(t *testing.T) { From a0915ce7e0d21149b04bfcd65f0f400fbc32c033 Mon Sep 17 00:00:00 2001 From: Matvey Gubanikhin Date: Mon, 9 Nov 2026 12:21:30 +0300 Subject: [PATCH 2/2] Linter error fix. --- fbxpool/pool.go | 4 ++-- fbxpool/pool_test.go | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fbxpool/pool.go b/fbxpool/pool.go index b78e482..732c8e1 100644 --- a/fbxpool/pool.go +++ b/fbxpool/pool.go @@ -455,8 +455,8 @@ func ParseConfig(connString string) (*Config, error) { config.MaxConnLifetimeJitter = d } - if s, ok := config.ConnConfig.Config.RuntimeParams["pool_ping_timeout"]; ok { - delete(connConfig.Config.RuntimeParams, "pool_ping_timeout") + if s, ok := config.ConnConfig.RuntimeParams["pool_ping_timeout"]; ok { + delete(connConfig.RuntimeParams, "pool_ping_timeout") d, err := time.ParseDuration(s) if err != nil { return nil, fbconn.NewParseConfigError(connString, "cannot parse pool_ping_timeout", err) diff --git a/fbxpool/pool_test.go b/fbxpool/pool_test.go index 8bad315..22258ec 100644 --- a/fbxpool/pool_test.go +++ b/fbxpool/pool_test.go @@ -52,10 +52,10 @@ func TestParseConfigExtractsPoolArguments(t *testing.T) { assert.Equal(t, 250*time.Millisecond, config.PingTimeout) // Pool parameters must be removed from the connection's RuntimeParams. - assert.NotContains(t, config.ConnConfig.Config.RuntimeParams, "pool_max_conns") - assert.NotContains(t, config.ConnConfig.Config.RuntimeParams, "pool_min_conns") - assert.NotContains(t, config.ConnConfig.Config.RuntimeParams, "pool_min_idle_conns") - assert.NotContains(t, config.ConnConfig.Config.RuntimeParams, "pool_ping_timeout") + assert.NotContains(t, config.ConnConfig.RuntimeParams, "pool_max_conns") + assert.NotContains(t, config.ConnConfig.RuntimeParams, "pool_min_conns") + assert.NotContains(t, config.ConnConfig.RuntimeParams, "pool_min_idle_conns") + assert.NotContains(t, config.ConnConfig.RuntimeParams, "pool_ping_timeout") config, err = fbxpool.ParseConfig("") assert.NoError(t, err)