2
0

Rename avaible resources to idle resources

This commit is contained in:
Jack Christensen
2018-12-26 13:22:46 -06:00
parent ebf42e3ab9
commit fddf7bbdb9
2 changed files with 21 additions and 21 deletions
+19 -19
View File
@@ -7,10 +7,10 @@ import (
) )
const ( const (
resourceStatusCreating = 0 resourceStatusCreating = 0
resourceStatusAvailable = iota resourceStatusIdle = iota
resourceStatusAcquired = iota resourceStatusAcquired = iota
resourceStatusHijacked = iota resourceStatusHijacked = iota
) )
// ErrClosedPool occurs on an attempt to get a connection from a closed pool. // ErrClosedPool occurs on an attempt to get a connection from a closed pool.
@@ -57,8 +57,8 @@ type Pool struct {
cond *sync.Cond cond *sync.Cond
destructWG *sync.WaitGroup destructWG *sync.WaitGroup
allResources []*Resource allResources []*Resource
availableResources []*Resource idleResources []*Resource
maxSize int maxSize int
closed bool closed bool
@@ -83,11 +83,11 @@ func (p *Pool) Close() {
p.cond.L.Lock() p.cond.L.Lock()
p.closed = true p.closed = true
for _, res := range p.availableResources { for _, res := range p.idleResources {
p.allResources = removeResource(p.allResources, res) p.allResources = removeResource(p.allResources, res)
go p.destructResourceValue(res.value) go p.destructResourceValue(res.value)
} }
p.availableResources = nil p.idleResources = nil
p.cond.L.Unlock() p.cond.L.Unlock()
// Wake up all go routines waiting for a resource to be returned so they can terminate. // Wake up all go routines waiting for a resource to be returned so they can terminate.
@@ -134,8 +134,8 @@ func (p *Pool) Acquire(ctx context.Context) (*Resource, error) {
} }
// If a resource is available now // If a resource is available now
if len(p.availableResources) > 0 { if len(p.idleResources) > 0 {
rw := p.lockedAvailableAcquire() rw := p.lockedIdleAcquire()
p.cond.L.Unlock() p.cond.L.Unlock()
return rw, nil return rw, nil
} }
@@ -187,13 +187,13 @@ func (p *Pool) Acquire(ctx context.Context) (*Resource, error) {
} }
} }
// lockedAvailableAcquire gets the top resource from p.availableResources. p.cond.L // lockedIdleAcquire gets the top resource from p.idleResources. p.cond.L
// must already be locked. len(p.availableResources) must be > 0. // must already be locked. len(p.idleResources) must be > 0.
func (p *Pool) lockedAvailableAcquire() *Resource { func (p *Pool) lockedIdleAcquire() *Resource {
rw := p.availableResources[len(p.availableResources)-1] rw := p.idleResources[len(p.idleResources)-1]
p.availableResources = p.availableResources[:len(p.availableResources)-1] p.idleResources = p.idleResources[:len(p.idleResources)-1]
if rw.status != resourceStatusAvailable { if rw.status != resourceStatusIdle {
panic("BUG: unavailable resource gotten from availableResources") panic("BUG: non-idle resource gotten from idleResources")
} }
rw.status = resourceStatusAcquired rw.status = resourceStatusAcquired
return rw return rw
@@ -204,8 +204,8 @@ func (p *Pool) releaseAcquiredResource(res *Resource) {
p.cond.L.Lock() p.cond.L.Lock()
if !p.closed { if !p.closed {
res.status = resourceStatusAvailable res.status = resourceStatusIdle
p.availableResources = append(p.availableResources, res) p.idleResources = append(p.idleResources, res)
} else { } else {
p.allResources = removeResource(p.allResources, res) p.allResources = removeResource(p.allResources, res)
go p.destructResourceValue(res.value) go p.destructResourceValue(res.value)
+2 -2
View File
@@ -80,7 +80,7 @@ func waitForRead(ch chan int) bool {
} }
} }
func TestPoolAcquireCreatesResourceWhenNoneAvailable(t *testing.T) { func TestPoolAcquireCreatesResourceWhenNoneIdle(t *testing.T) {
createFunc, _ := createCreateResourceFunc() createFunc, _ := createCreateResourceFunc()
pool := puddle.NewPool(createFunc, stubCloseRes, 10) pool := puddle.NewPool(createFunc, stubCloseRes, 10)
defer pool.Close() defer pool.Close()
@@ -208,7 +208,7 @@ func TestPoolAcquireContextCanceledDuringCreate(t *testing.T) {
assert.Nil(t, res) assert.Nil(t, res)
} }
func TestPoolCloseClosesAllAvailableResources(t *testing.T) { func TestPoolCloseClosesAllIdleResources(t *testing.T) {
createFunc, _ := createCreateResourceFunc() createFunc, _ := createCreateResourceFunc()
var closeCalls Counter var closeCalls Counter