// NewTxPool creates a new TxPool. It's not operational until it's Open'd. func NewTxPool( name string, txStatsPrefix string, capacity int, timeout time.Duration, poolTimeout time.Duration, idleTimeout time.Duration, enablePublishStats bool, qStats *QueryServiceStats) *TxPool { txStatsName := "" if enablePublishStats { txStatsName = txStatsPrefix + "Transactions" } axp := &TxPool{ pool: NewConnPool(name, capacity, idleTimeout, enablePublishStats, qStats), activePool: pools.NewNumbered(), lastID: sync2.AtomicInt64(time.Now().UnixNano()), timeout: sync2.AtomicDuration(timeout), poolTimeout: sync2.AtomicDuration(poolTimeout), ticks: timer.NewTimer(timeout / 10), txStats: stats.NewTimings(txStatsName), queryServiceStats: qStats, } // Careful: pool also exports name+"xxx" vars, // but we know it doesn't export Timeout. if enablePublishStats { stats.Publish(name+"Timeout", stats.DurationFunc(axp.timeout.Get)) stats.Publish(name+"PoolTimeout", stats.DurationFunc(axp.poolTimeout.Get)) } return axp }
func NewTxPool(name string, capacity int, timeout, poolTimeout, idleTimeout time.Duration) *TxPool { axp := &TxPool{ pool: dbconnpool.NewConnectionPool(name, capacity, idleTimeout), activePool: pools.NewNumbered(), lastId: sync2.AtomicInt64(time.Now().UnixNano()), timeout: sync2.AtomicDuration(timeout), poolTimeout: sync2.AtomicDuration(poolTimeout), ticks: timer.NewTimer(timeout / 10), txStats: stats.NewTimings("Transactions"), } // Careful: pool also exports name+"xxx" vars, // but we know it doesn't export Timeout. stats.Publish(name+"Timeout", stats.DurationFunc(axp.timeout.Get)) stats.Publish(name+"PoolTimeout", stats.DurationFunc(axp.poolTimeout.Get)) return axp }
func NewActivePool(queryTimeout, idleTimeout time.Duration) *ActivePool { return &ActivePool{ pool: pools.NewNumbered(), timeout: sync2.AtomicDuration(queryTimeout), connPool: NewConnectionPool(1, idleTimeout), ticks: timer.NewTimer(queryTimeout / 10), } }
func NewActiveTxPool(timeout time.Duration) *ActiveTxPool { return &ActiveTxPool{ pool: pools.NewNumbered(), lastId: sync2.AtomicInt64(time.Now().UnixNano()), timeout: sync2.AtomicDuration(timeout), ticks: timer.NewTimer(timeout / 10), txStats: stats.NewTimings("Transactions"), } }
func NewActivePool(name string, queryTimeout time.Duration, connKiller *ConnectionKiller) *ActivePool { ap := &ActivePool{ pool: pools.NewNumbered(), timeout: sync2.AtomicDuration(queryTimeout), ticks: timer.NewTimer(queryTimeout / 10), connKiller: connKiller, } stats.Publish(name+"Size", stats.IntFunc(ap.pool.Size)) stats.Publish( name+"Timeout", stats.DurationFunc(func() time.Duration { return ap.timeout.Get() }), ) return ap }
func NewActiveTxPool(name string, timeout time.Duration) *ActiveTxPool { axp := &ActiveTxPool{ pool: pools.NewNumbered(), lastId: sync2.AtomicInt64(time.Now().UnixNano()), timeout: sync2.AtomicDuration(timeout), ticks: timer.NewTimer(timeout / 10), txStats: stats.NewTimings("Transactions"), } stats.Publish(name+"Size", stats.IntFunc(axp.pool.Size)) stats.Publish( name+"Timeout", stats.DurationFunc(func() time.Duration { return axp.timeout.Get() }), ) return axp }
// NewResourcePool creates a new ResourcePool pool. // capacity is the initial capacity of the pool. // maxCap is the maximum capacity. // If a resource is unused beyond idleTimeout, it's discarded. // An idleTimeout of 0 means that there is no timeout. func NewResourcePool(factory Factory, capacity, maxCap int, idleTimeout time.Duration) *ResourcePool { if capacity <= 0 || maxCap <= 0 || capacity > maxCap { panic(errors.New("invalid/out of range capacity")) } rp := &ResourcePool{ resources: make(chan resourceWrapper, maxCap), factory: factory, capacity: sync2.AtomicInt64(capacity), idleTimeout: sync2.AtomicDuration(idleTimeout), } for i := 0; i < capacity; i++ { rp.resources <- resourceWrapper{} } return rp }