2
0
Jack Christensen d344a18fdb Add to the destructWG wait group while cond.L is locked
Otherwise, if many constructors are underway while the pool is closed it
is possible destructWG will get to 0 while the Wait in Close is underway
and then Add will be called again which is disallowed.

From the docs:

Note that calls with a positive delta that occur when the counter is
zero must happen before a Wait.

https://github.com/jackc/pgx/issues/1356
2022-10-27 20:46:47 -05:00
2022-09-17 08:48:15 -05:00
2022-07-30 12:12:43 -05:00
2022-07-30 11:27:56 -05:00
2018-12-26 17:21:07 -06:00
2022-09-03 13:10:10 -05:00

Build Status

Puddle

Puddle is a tiny generic resource pool library for Go that uses the standard context library to signal cancellation of acquires. It is designed to contain the minimum functionality required for a resource pool. It can be used directly or it can be used as the base for a domain specific resource pool. For example, a database connection pool may use puddle internally and implement health checks and keep-alive behavior without needing to implement any concurrent code of its own.

Features

  • Acquire cancellation via context standard library
  • Statistics API for monitoring pool pressure
  • No dependencies outside of standard library
  • High performance
  • 100% test coverage

Example Usage

constructor := func(context.Context) (net.Conn, error) {
  return net.Dial("tcp", "127.0.0.1:8080")
}
destructor := func(value net.Conn) {
  value.Close()
}
maxPoolSize := 10

pool := puddle.NewPool[net.Conn](&puddle.Config[int]{Constructor: constructor, Destructor: destructor, MaxSize: maxPoolSize})

// Acquire resource from the pool.
res, err := pool.Acquire(context.Background())
if err != nil {
  // ...
}

// Use resource.
_, err = res.Value().Write([]byte{1})
if err != nil {
  // ...
}

// Release when done.
res.Release()

Status

Puddle is stable and feature complete.

  • Bug reports and fixes are welcome.
  • New features will usually not be accepted if they can be feasibly implemented in a wrapper.
  • Performance optimizations will usually not be accepted unless the performance issue rises to the level of a bug.

License

MIT

S
Description
No description provided
Readme 189 KiB
Languages
Go 100%