Documentation
¶
Index ¶
- Variables
- type Factory
- type IResourcePool
- type RefreshCheck
- type Resource
- type ResourcePool
- func (rp *ResourcePool) Active() int64
- func (rp *ResourcePool) Available() int64
- func (rp *ResourcePool) Capacity() int64
- func (rp *ResourcePool) Close()
- func (rp *ResourcePool) DiffSettingCount() int64
- func (rp *ResourcePool) Exhausted() int64
- func (rp *ResourcePool) Get(ctx context.Context, setting *Setting) (resource Resource, err error)
- func (rp *ResourcePool) GetCount() int64
- func (rp *ResourcePool) GetSettingCount() int64
- func (rp *ResourcePool) IdleClosed() int64
- func (rp *ResourcePool) IdleTimeout() time.Duration
- func (rp *ResourcePool) InUse() int64
- func (rp *ResourcePool) MaxCap() int64
- func (rp *ResourcePool) MaxLifetimeClosed() int64
- func (rp *ResourcePool) Name() string
- func (rp *ResourcePool) Put(resource Resource)
- func (rp *ResourcePool) ResetSettingCount() int64
- func (rp *ResourcePool) SetCapacity(capacity int) error
- func (rp *ResourcePool) SetIdleTimeout(idleTimeout time.Duration)
- func (rp *ResourcePool) StatsJSON() string
- func (rp *ResourcePool) WaitCount() int64
- func (rp *ResourcePool) WaitTime() time.Duration
- type Setting
Constants ¶
This section is empty.
Variables ¶
var ( // ErrClosed is returned if ResourcePool is used when it's closed. ErrClosed = errors.New("resource pool is closed") // ErrTimeout is returned if a resource get times out. ErrTimeout = vterrors.New(vtrpcpb.Code_RESOURCE_EXHAUSTED, "resource pool timed out") // ErrCtxTimeout is returned if a ctx is already expired by the time the resource pool is used ErrCtxTimeout = vterrors.New(vtrpcpb.Code_DEADLINE_EXCEEDED, "resource pool context already expired") )
Functions ¶
This section is empty.
Types ¶
type IResourcePool ¶
type IResourcePool interface { Close() Name() string Get(ctx context.Context, setting *Setting) (resource Resource, err error) Put(resource Resource) SetCapacity(capacity int) error SetIdleTimeout(idleTimeout time.Duration) StatsJSON() string Capacity() int64 Available() int64 Active() int64 InUse() int64 MaxCap() int64 WaitCount() int64 WaitTime() time.Duration IdleTimeout() time.Duration IdleClosed() int64 MaxLifetimeClosed() int64 Exhausted() int64 GetCount() int64 GetSettingCount() int64 DiffSettingCount() int64 ResetSettingCount() int64 }
type RefreshCheck ¶
RefreshCheck is a function used to determine if a resource pool should be refreshed (i.e. closed and reopened)
type Resource ¶
type Resource interface { Close() Expired(time.Duration) bool ApplySetting(ctx context.Context, setting *Setting) error IsSettingApplied() bool IsSameSetting(setting string) bool ResetSetting(ctx context.Context) error }
Resource defines the interface that every resource must provide. Thread synchronization between Close() and IsClosed() is the responsibility of the caller.
type ResourcePool ¶
type ResourcePool struct {
// contains filtered or unexported fields
}
ResourcePool allows you to use a pool of resources.
func NewResourcePool ¶
func NewResourcePool(factory Factory, capacity, maxCap int, idleTimeout time.Duration, maxLifetime time.Duration, logWait func(time.Time), refreshCheck RefreshCheck, refreshInterval time.Duration) *ResourcePool
NewResourcePool creates a new ResourcePool pool. capacity is the number of possible resources in the pool: there can be up to 'capacity' of these at a given time. maxCap specifies the extent to which the pool can be resized in the future through the SetCapacity function. You cannot resize the pool beyond maxCap. If a resource is unused beyond idleTimeout, it's replaced with a new one. An idleTimeout of 0 means that there is no timeout. An maxLifetime of 0 means that there is no timeout. A non-zero value of prefillParallelism causes the pool to be pre-filled. The value specifies how many resources can be opened in parallel. refreshCheck is a function we consult at refreshInterval intervals to determine if the pool should be drained and reopened
func (*ResourcePool) Active ¶
func (rp *ResourcePool) Active() int64
Active returns the number of active (i.e. non-nil) resources either in the pool or claimed for use
func (*ResourcePool) Available ¶
func (rp *ResourcePool) Available() int64
Available returns the number of currently unused and available resources.
func (*ResourcePool) Capacity ¶
func (rp *ResourcePool) Capacity() int64
Capacity returns the capacity.
func (*ResourcePool) Close ¶
func (rp *ResourcePool) Close()
Close empties the pool calling Close on all its resources. You can call Close while there are outstanding resources. It waits for all resources to be returned (Put). After a Close, Get is not allowed.
func (*ResourcePool) DiffSettingCount ¶
func (rp *ResourcePool) DiffSettingCount() int64
DiffSettingCount returns the number of times different setting were applied on the resource.
func (*ResourcePool) Exhausted ¶
func (rp *ResourcePool) Exhausted() int64
Exhausted returns the number of times Available dropped below 1
func (*ResourcePool) Get ¶
Get will return the next available resource. If capacity has not been reached, it will create a new one using the factory. Otherwise, it will wait till the next resource becomes available or a timeout. A timeout of 0 is an indefinite wait.
func (*ResourcePool) GetCount ¶
func (rp *ResourcePool) GetCount() int64
GetCount returns the number of times get was called
func (*ResourcePool) GetSettingCount ¶
func (rp *ResourcePool) GetSettingCount() int64
GetSettingCount returns the number of times getWithSettings was called
func (*ResourcePool) IdleClosed ¶
func (rp *ResourcePool) IdleClosed() int64
IdleClosed returns the count of resources closed due to idle timeout.
func (*ResourcePool) IdleTimeout ¶
func (rp *ResourcePool) IdleTimeout() time.Duration
IdleTimeout returns the resource idle timeout.
func (*ResourcePool) InUse ¶
func (rp *ResourcePool) InUse() int64
InUse returns the number of claimed resources from the pool
func (*ResourcePool) MaxCap ¶
func (rp *ResourcePool) MaxCap() int64
MaxCap returns the max capacity.
func (*ResourcePool) MaxLifetimeClosed ¶
func (rp *ResourcePool) MaxLifetimeClosed() int64
MaxLifetimeClosed returns the count of resources closed due to refresh timeout.
func (*ResourcePool) Name ¶
func (rp *ResourcePool) Name() string
func (*ResourcePool) Put ¶
func (rp *ResourcePool) Put(resource Resource)
Put will return a resource to the pool. For every successful Get, a corresponding Put is required. If you no longer need a resource, you will need to call Put(nil) instead of returning the closed resource. This will cause a new resource to be created in its place.
func (*ResourcePool) ResetSettingCount ¶
func (rp *ResourcePool) ResetSettingCount() int64
ResetSettingCount returns the number of times setting were reset on the resource.
func (*ResourcePool) SetCapacity ¶
func (rp *ResourcePool) SetCapacity(capacity int) error
SetCapacity changes the capacity of the pool. You can use it to shrink or expand, but not beyond the max capacity. If the change requires the pool to be shrunk, SetCapacity waits till the necessary number of resources are returned to the pool. A SetCapacity of 0 is equivalent to closing the ResourcePool.
func (*ResourcePool) SetIdleTimeout ¶
func (rp *ResourcePool) SetIdleTimeout(idleTimeout time.Duration)
SetIdleTimeout sets the idle timeout. It can only be used if there was an idle timeout set when the pool was created.
func (*ResourcePool) StatsJSON ¶
func (rp *ResourcePool) StatsJSON() string
StatsJSON returns the stats in JSON format.
func (*ResourcePool) WaitCount ¶
func (rp *ResourcePool) WaitCount() int64
WaitCount returns the total number of waits.
func (*ResourcePool) WaitTime ¶
func (rp *ResourcePool) WaitTime() time.Duration
WaitTime returns the total wait time.
type Setting ¶
type Setting = smartconnpool.Setting
Setting represents a set query and reset query for system settings.