/
connection_pool.go
38 lines (31 loc) · 1.09 KB
/
connection_pool.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package db
import (
"context"
"fmt"
"time"
"code.cloudfoundry.org/lager/v3"
)
func NewConnectionPool(conf Config,
maxOpenConnections int, maxIdleConnections int, connMaxLifetime time.Duration,
logPrefix string, jobPrefix string, logger lager.Logger,
) (*ConnWrapper, error) {
retriableConnector := RetriableConnector{
Logger: logger,
Connector: GetConnectionPool,
Sleeper: SleeperFunc(time.Sleep),
RetryInterval: time.Duration(3) * time.Second,
MaxRetries: 10,
}
logger.Info("getting db connection", lager.Data{})
timeoutCtx, timeoutCancelFunc := context.WithTimeout(context.Background(), time.Duration(conf.Timeout)*time.Second)
connectionPool, err := retriableConnector.GetConnectionPool(conf, timeoutCtx)
defer timeoutCancelFunc()
if err != nil {
return nil, fmt.Errorf("%s.%s: db connect: %s", logPrefix, jobPrefix, err)
}
connectionPool.SetMaxOpenConns(maxOpenConnections)
connectionPool.SetMaxIdleConns(maxIdleConnections)
connectionPool.SetConnMaxLifetime(connMaxLifetime)
logger.Info("db connection retrieved", lager.Data{})
return connectionPool, nil
}