summaryrefslogtreecommitdiff
path: root/vendor/github.com/jackc/puddle/v2/pool.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/jackc/puddle/v2/pool.go')
-rw-r--r--vendor/github.com/jackc/puddle/v2/pool.go20
1 files changed, 17 insertions, 3 deletions
diff --git a/vendor/github.com/jackc/puddle/v2/pool.go b/vendor/github.com/jackc/puddle/v2/pool.go
index c8edc0fb6..c411d2f6e 100644
--- a/vendor/github.com/jackc/puddle/v2/pool.go
+++ b/vendor/github.com/jackc/puddle/v2/pool.go
@@ -139,6 +139,7 @@ type Pool[T any] struct {
acquireCount int64
acquireDuration time.Duration
emptyAcquireCount int64
+ emptyAcquireWaitTime time.Duration
canceledAcquireCount atomic.Int64
resetCount int
@@ -154,7 +155,7 @@ type Config[T any] struct {
MaxSize int32
}
-// NewPool creates a new pool. Panics if maxSize is less than 1.
+// NewPool creates a new pool. Returns an error iff MaxSize is less than 1.
func NewPool[T any](config *Config[T]) (*Pool[T], error) {
if config.MaxSize < 1 {
return nil, errors.New("MaxSize must be >= 1")
@@ -202,6 +203,7 @@ type Stat struct {
acquireCount int64
acquireDuration time.Duration
emptyAcquireCount int64
+ emptyAcquireWaitTime time.Duration
canceledAcquireCount int64
}
@@ -251,6 +253,13 @@ func (s *Stat) EmptyAcquireCount() int64 {
return s.emptyAcquireCount
}
+// EmptyAcquireWaitTime returns the cumulative time waited for successful acquires
+// from the pool for a resource to be released or constructed because the pool was
+// empty.
+func (s *Stat) EmptyAcquireWaitTime() time.Duration {
+ return s.emptyAcquireWaitTime
+}
+
// CanceledAcquireCount returns the cumulative count of acquires from the pool
// that were canceled by a context.
func (s *Stat) CanceledAcquireCount() int64 {
@@ -266,6 +275,7 @@ func (p *Pool[T]) Stat() *Stat {
maxResources: p.maxSize,
acquireCount: p.acquireCount,
emptyAcquireCount: p.emptyAcquireCount,
+ emptyAcquireWaitTime: p.emptyAcquireWaitTime,
canceledAcquireCount: p.canceledAcquireCount.Load(),
acquireDuration: p.acquireDuration,
}
@@ -363,11 +373,13 @@ func (p *Pool[T]) acquire(ctx context.Context) (*Resource[T], error) {
// If a resource is available in the pool.
if res := p.tryAcquireIdleResource(); res != nil {
+ waitTime := time.Duration(nanotime() - startNano)
if waitedForLock {
p.emptyAcquireCount += 1
+ p.emptyAcquireWaitTime += waitTime
}
p.acquireCount += 1
- p.acquireDuration += time.Duration(nanotime() - startNano)
+ p.acquireDuration += waitTime
p.mux.Unlock()
return res, nil
}
@@ -391,7 +403,9 @@ func (p *Pool[T]) acquire(ctx context.Context) (*Resource[T], error) {
p.emptyAcquireCount += 1
p.acquireCount += 1
- p.acquireDuration += time.Duration(nanotime() - startNano)
+ waitTime := time.Duration(nanotime() - startNano)
+ p.acquireDuration += waitTime
+ p.emptyAcquireWaitTime += waitTime
return res, nil
}