2
0
Commit Graph

63 Commits

Author SHA1 Message Date
Jack Christensen ba6bef1563 TryAcquire does not overfill pool 2021-12-02 18:00:10 -06:00
Jack Christensen 69f945a21a Merge doAcquire back into Acquire 2021-12-02 18:00:10 -06:00
Jack Christensen 021a5cc1a6 TryAcquire created resource in background instead of blocking
refs #14
2021-12-02 18:00:10 -06:00
Jack Christensen 4d33264d63 Do not leave pool lock after panic from nil context
refs #13
2021-11-13 17:39:29 -06:00
Alexander Staubo 69a4c02937 Fix several memory leaks caused by modifying a slice length without
removing the elements from the backing array.
2021-11-13 04:51:43 -06:00
A. Jensen cac2b5a858 Add TryAcquire and ErrNotAvailable
Fixes https://github.com/jackc/puddle/issues/10
2021-09-20 20:16:07 -05:00
Dmitriy Matrenichev aa0e8cd5bc Fix deadlock in Pool.CreateResource 2021-09-11 02:15:45 +03:00
Evgeny Vanslov 513cb84ff5 Ensure that conditional variable is signaled if resource failed to create 2020-12-03 19:14:39 +00:00
Yaz Saito dd3aa6a6bc Update the phrasing of TotalResources. 2020-10-03 23:04:50 -07:00
Yaz Saito a70fb082df Clarify the meanings of Stats accessors 2020-09-28 07:53:01 -07:00
Jack Christensen 91d0159cc9 Fix crash when pool is closed when resource is being created
Also, restore 100% test coverage.
2020-08-20 21:58:10 -05:00
Jack Christensen 6d0ef02e90 Fix: Resource.Destroy removed self from pool after destructor complete 2020-08-20 21:56:47 -05:00
Jack Christensen 558756d6c4 Fix race condition when CreateResource is called concurrently with Close
WaitGroup.Add(1) cannot be called after WaitGroup.Wait().
2020-04-02 22:11:33 -05:00
Jack Christensen 7cc1dd1985 CreateResource checks if pool is closed before any action 2020-04-02 22:11:22 -05:00
Jack Christensen 69489dce36 AcquireAllIdle immediately returns nil if pool is closed 2020-04-02 22:10:53 -05:00
Jack Christensen 2cd0ce3f9b Closing a closed pool is a no-op 2020-04-02 22:10:13 -05:00
Jack Christensen cde4bcb7af Initialize LastUsedNanotime on creation 2020-02-03 08:25:42 -06:00
Patrick Ellul c42fada37e CreateResource sets LastUsedNanotime so that Idle Time calculations are still valid 2020-02-03 15:56:07 +11:00
Patrick Ellul 4014e4825a CreateResource constructs a new resource without acquiring it. 2020-02-03 11:14:49 +11:00
Jack Christensen 807afe48a8 Use runtime.nanotime for duration tracking plus related restructuring
runtime.nanotime is significantly faster than time.Now. Use it unless
build tags prevent usage of unsafe.

Change LastUsedTime to LastUsedNanotime as a time.Time is no longer
available.

Add IdleDuration to make it more convenient to get the time a resource
has been idle.

Rename ReleaseIdle to ReleaseUnused to better indicate it is releasing
the resource without using it rather than that it is releasing a
resource acquired with AcquireAllIdle.

Refactor tests of usage tracking to not be intermingled with
AcquireAllIdle tests.
2020-01-25 18:47:55 -06:00
Jack Christensen e6e0e7fd81 Get last used time outside of pool mutex
Under heavy contention this slightly improves performance by spending
less time in the mutex.
2020-01-25 17:22:31 -06:00
Jack Christensen 6897b9f0cd Merge branch 'last-used-time' of git://github.com/ellulpatrick/puddle into ellulpatrick-last-used-time 2020-01-25 17:06:35 -06:00
Patrick Ellul 6a68341f62 maintain lastIUsedTime so clients can use it as a factor in idle and health check logic 2020-01-25 21:41:34 +11:00
Michael Tharp 26cd25c14b Fix deadlock race when acquire is cancelled
If the waiter goroutine completes before the section guarding
canceledAcquireCount has run, then there is a deadlock because there is
nothing that can unlock the mutex. Scheduling the second goroutine
ensures that one of the two can release the lock and keep things moving.
2019-12-16 21:58:42 +00:00
Jack Christensen e4ced69a3a Ensure maxSize > 0 2019-04-13 18:43:25 -05:00
Jack Christensen 0395a39c2d Use int32 for pool sizes 2019-04-13 18:39:08 -05:00
Jack Christensen fefda73679 Add documention 2018-12-26 17:17:25 -06:00
Jack Christensen 383709a0b4 Achieve 100% test coverage 2018-12-26 17:17:08 -06:00
Jack Christensen 33a5f62a2e Add stress test and fix race it detected 2018-12-26 16:35:01 -06:00
Jack Christensen ba34bdd8ef Add Pool.AcquireAllIdle 2018-12-26 15:52:48 -06:00
Jack Christensen df3f83d1f7 Store resource creation time 2018-12-26 15:35:13 -06:00
Jack Christensen d3964763bb Track successful acquire duration
Rename slow acquire to empty acquire to be more clear that it means the
pool was empty on acquire, not that it took some large amount of time.
2018-12-26 15:25:14 -06:00
Jack Christensen ec686c76d0 Add canceled acquire counting 2018-12-26 14:59:35 -06:00
Jack Christensen 109e4356b9 Track acquire and slow acquire count 2018-12-26 14:35:23 -06:00
Jack Christensen aa05ab2ade Use more detailed stat names 2018-12-26 14:12:00 -06:00
Jack Christensen d83b67b4a8 Fix use waitgroup after close race 2018-12-26 14:09:49 -06:00
Jack Christensen 80b43a4df9 Add Pool.Stat 2018-12-26 14:00:31 -06:00
Jack Christensen fddf7bbdb9 Rename avaible resources to idle resources 2018-12-26 13:22:46 -06:00
Jack Christensen ebf42e3ab9 Consistently use term acquired instead of borrowed 2018-12-26 13:20:14 -06:00
Jack Christensen 47190588bc Remove runtime changing of pool size
Reducing pool to minimize required functionality
2018-12-26 13:11:49 -06:00
Jack Christensen 3edeea2574 Remove min size
Pruning pool functionality
2018-12-26 13:05:03 -06:00
Jack Christensen 7df4afe7d3 Add Resource.Hijack 2018-12-26 13:03:07 -06:00
Jack Christensen af5402c2dd Add fast path, tests, and benchmarks for non-cancellable contexts 2018-12-26 03:11:49 -06:00
Jack Christensen ab3795c24c Pool.Close blocks until all resources released and destructed
Renamed resource constructor and destructor callbacks.
2018-12-26 02:59:36 -06:00
Jack Christensen f718a625cf Resolve some potential deadlocks
Tweak benchmarks
2018-12-26 02:24:07 -06:00
Jack Christensen dd010296a6 Convert allResources from map to array 2018-12-26 00:18:30 -06:00
Jack Christensen 667f04e9f7 Remove resource limits
Acquire health check will be able to take over this functionality.
2018-12-25 20:13:36 -06:00
Jack Christensen 590f7e07cb Remove unnecessary wrapping func 2018-12-25 19:27:33 -06:00
Jack Christensen 4ef5d16aa8 Rename Get to Acquire 2018-12-25 19:23:50 -06:00
Jack Christensen 3afe49e88b Releasing or destroying Resource is called by resource
This makes it impossible to return a resource to a pool that it did
not come from.
2018-12-25 19:17:57 -06:00