Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions fbxpool/pool.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.
//
Expand Down Expand Up @@ -453,6 +455,17 @@ func ParseConfig(connString string) (*Config, error) {
config.MaxConnLifetimeJitter = d
}

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)
}
config.PingTimeout = d
} else {
config.PingTimeout = defaultPingTimeout
}

return config, nil
}

Expand Down
16 changes: 15 additions & 1 deletion fbxpool/pool_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.Equal(t, 250*time.Millisecond, config.PingTimeout)

// Pool parameters must be removed from the connection's RuntimeParams.
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)
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) {
Expand Down