influxdb/tsdb/engine/tsm1/pools.go

144 lines
2.6 KiB
Go
Raw Normal View History

2015-11-24 16:44:37 +00:00
package tsm1
import (
"sync"
"github.com/influxdata/influxdb/pkg/pool"
)
2015-11-24 16:44:37 +00:00
var (
bufPool = pool.NewBytes(10)
2015-11-24 16:44:37 +00:00
float64ValuePool sync.Pool
2016-01-18 22:48:49 +00:00
integerValuePool sync.Pool
2015-11-04 21:06:06 +00:00
booleanValuePool sync.Pool
2015-11-24 16:44:37 +00:00
stringValuePool sync.Pool
)
// getBuf returns a buffer with length size from the buffer pool.
func getBuf(size int) []byte {
return bufPool.Get(size)
2015-11-24 16:44:37 +00:00
}
// putBuf returns a buffer to the pool.
func putBuf(buf []byte) {
bufPool.Put(buf)
}
// getBuf returns a buffer with length size from the buffer pool.
func getFloat64Values(size int) []Value {
var buf []Value
x := float64ValuePool.Get()
if x == nil {
buf = make([]Value, size)
} else {
buf = x.([]Value)
}
if cap(buf) < size {
return make([]Value, size)
}
for i, v := range buf {
if v == nil {
2016-11-15 19:43:00 +00:00
buf[i] = FloatValue{}
2015-11-24 16:44:37 +00:00
}
}
return buf[:size]
}
// putBuf returns a buffer to the pool.
func putFloat64Values(buf []Value) {
float64ValuePool.Put(buf)
}
// getBuf returns a buffer with length size from the buffer pool.
2016-01-18 22:48:49 +00:00
func getIntegerValues(size int) []Value {
2015-11-24 16:44:37 +00:00
var buf []Value
2016-01-18 22:48:49 +00:00
x := integerValuePool.Get()
2015-11-24 16:44:37 +00:00
if x == nil {
buf = make([]Value, size)
} else {
buf = x.([]Value)
}
if cap(buf) < size {
return make([]Value, size)
}
for i, v := range buf {
if v == nil {
2016-11-15 19:43:00 +00:00
buf[i] = IntegerValue{}
2015-11-24 16:44:37 +00:00
}
}
return buf[:size]
}
// putBuf returns a buffer to the pool.
2016-01-18 22:48:49 +00:00
func putIntegerValues(buf []Value) {
integerValuePool.Put(buf)
2015-11-24 16:44:37 +00:00
}
// getBuf returns a buffer with length size from the buffer pool.
2015-11-04 21:06:06 +00:00
func getBooleanValues(size int) []Value {
2015-11-24 16:44:37 +00:00
var buf []Value
2015-11-04 21:06:06 +00:00
x := booleanValuePool.Get()
2015-11-24 16:44:37 +00:00
if x == nil {
buf = make([]Value, size)
} else {
buf = x.([]Value)
}
if cap(buf) < size {
return make([]Value, size)
}
for i, v := range buf {
if v == nil {
2016-11-15 19:43:00 +00:00
buf[i] = BooleanValue{}
2015-11-24 16:44:37 +00:00
}
}
return buf[:size]
}
// putBuf returns a buffer to the pool.
func putStringValues(buf []Value) {
stringValuePool.Put(buf)
}
// getBuf returns a buffer with length size from the buffer pool.
func getStringValues(size int) []Value {
var buf []Value
x := stringValuePool.Get()
if x == nil {
buf = make([]Value, size)
} else {
buf = x.([]Value)
}
if cap(buf) < size {
return make([]Value, size)
}
for i, v := range buf {
if v == nil {
2016-11-15 19:43:00 +00:00
buf[i] = StringValue{}
2015-11-24 16:44:37 +00:00
}
}
return buf[:size]
}
// putBuf returns a buffer to the pool.
2015-11-04 21:06:06 +00:00
func putBooleanValues(buf []Value) {
booleanValuePool.Put(buf)
2015-11-24 16:44:37 +00:00
}
func putValue(buf []Value) {
if len(buf) > 0 {
switch buf[0].(type) {
2016-11-15 19:43:00 +00:00
case FloatValue:
2015-11-24 16:44:37 +00:00
putFloat64Values(buf)
2016-11-15 19:43:00 +00:00
case IntegerValue:
2016-01-18 22:48:49 +00:00
putIntegerValues(buf)
2016-11-15 19:43:00 +00:00
case BooleanValue:
2015-11-04 21:06:06 +00:00
putBooleanValues(buf)
2016-11-15 19:43:00 +00:00
case StringValue:
2015-11-04 21:06:06 +00:00
putStringValues(buf)
2015-11-24 16:44:37 +00:00
}
}
}