README ¶
Archived project. No maintenance.
This project is not maintained anymore and is archived. Feel free to fork and use make your own changes if needed.
Thanks all for their work on this project.
RPool
Reader Pool is a thread safe reader pool for iocommon.ReadSeekCloser interface. It can be used to manage and reuse readers.
Install and Usage
Install the package with:
go get github.com/moisespsena-go/rpool
Please vendor the package with one of the releases: https://github.com/moisespsena-go/rpool/releases.
master
branch is development branch and will contain always the latest changes.
Example
// create a factory() to be used with channel based pool
factory := func() (iocommon.ReadSeekCloser, error) { return os.Open("file.txt") }
// create a new channel based pool with an initial capacity of 5 and maximum
// capacity of 30. The factory will create 5 initial readers and put it
// into the pool.
p, err := rpool.NewChannelPool(5, 30, factory)
// now you can get a reader from the pool, if there is no reader
// available it will create a new one via the factory function.
reader, err := p.Get()
// do something with reader and put it back to the pool by closing the reader
// (this doesn't close the underlying reader instead it's putting it back
// to the pool).
reader.Close()
// close the underlying reader instead of returning it to pool
// it is useful when acceptor has already closed reader and reader.Write() returns error
if pr, ok := reader.(*rpool.PoolReader); ok {
pr.MarkUnusable()
pr.Close()
}
// close pool any time you want, this closes all the readers inside a pool
p.Close()
// currently available readers in the pool
current := p.Len()
Credits
License
The MIT License (MIT) - see LICENSE for more details
Documentation ¶
Overview ¶
Package pool implements a pool of iocommon.ReadSeekCloser interfaces to manage and reuse them.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrClosed is the error resulting if the pool is closed via pool.Close(). ErrClosed = errors.New("pool is closed") )
Functions ¶
This section is empty.
Types ¶
type Factory ¶
type Factory func() (iocommon.ReadSeekCloser, error)
Factory is a function to create new connections.
type Pool ¶
type Pool interface { // Get returns a new reader from the pool. Closing the readers puts // it back to the Pool. Closing it when the pool is destroyed or full will // be counted as an error. Get() (iocommon.ReadSeekCloser, error) // Close closes the pool and all its readers. After Close() the pool is // no longer usable. Close() // Len returns the current number of readers of the pool. Len() int }
Pool interface describes a pool implementation. A pool should have maximum capacity. An ideal pool is threadsafe and easy to use.
func NewChannelPool ¶
NewChannelPool returns a new pool based on buffered channels with an initial capacity and maximum capacity. Factory is used when initial capacity is greater than zero to fill the pool. A zero initialCap doesn't fill the Pool until a new Get() is called. During a Get(), If there is no new connection available in the pool, a new connection will be created via the Factory() method.
type PoolReader ¶
type PoolReader struct { iocommon.ReadSeekCloser // contains filtered or unexported fields }
PoolReader is a wrapper around iocommon.ReadSeekCloser to modify the the behavior of iocommon.ReadSeekCloser's Close() method.
func (*PoolReader) Close ¶
func (p *PoolReader) Close() error
Close() puts the given connects back to the pool instead of closing it.
func (*PoolReader) MarkUnusable ¶
func (p *PoolReader) MarkUnusable()
MarkUnusable() marks the connection not usable any more, to let the pool close it instead of returning it to pool.