From d17d0f18e01bbe540a4e4006443f8f71607b57b4 Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Wed, 18 Oct 2017 07:19:46 -0600 Subject: [PATCH] Move copyBytes() and copyByteSlices() to bytesutil. --- pkg/bytesutil/bytesutil.go | 19 +++++++++++++++++++ tsdb/index/tsi1/index.go | 7 ++++--- tsdb/index/tsi1/index_files.go | 3 ++- tsdb/index/tsi1/tsi1.go | 19 ------------------- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/pkg/bytesutil/bytesutil.go b/pkg/bytesutil/bytesutil.go index 552391d0ce..f67d1e4d93 100644 --- a/pkg/bytesutil/bytesutil.go +++ b/pkg/bytesutil/bytesutil.go @@ -88,6 +88,25 @@ func Intersect(a, b [][]byte) [][]byte { return other } +// Clone returns a copy of b. +func Clone(b []byte) []byte { + if b == nil { + return nil + } + buf := make([]byte, len(b)) + copy(buf, b) + return buf +} + +// CloneSlice returns a copy of a slice of byte slices. +func CloneSlice(a [][]byte) [][]byte { + other := make([][]byte, len(a)) + for i := range a { + other[i] = Clone(a[i]) + } + return other +} + type byteSlices [][]byte func (a byteSlices) Len() int { return len(a) } diff --git a/tsdb/index/tsi1/index.go b/tsdb/index/tsi1/index.go index 97e1dc6f75..a63c9e0dff 100644 --- a/tsdb/index/tsi1/index.go +++ b/tsdb/index/tsi1/index.go @@ -17,6 +17,7 @@ import ( "github.com/influxdata/influxdb/influxql" "github.com/influxdata/influxdb/models" + "github.com/influxdata/influxdb/pkg/bytesutil" "github.com/influxdata/influxdb/pkg/estimator" "github.com/influxdata/influxdb/query" "github.com/influxdata/influxdb/tsdb" @@ -404,7 +405,7 @@ func (i *Index) MeasurementNamesByExpr(expr influxql.Expr) ([][]byte, error) { defer fs.Release() names, err := fs.MeasurementNamesByExpr(expr) - return copyByteSlices(names), err + return bytesutil.CloneSlice(names), err } func (i *Index) MeasurementNamesByRegex(re *regexp.Regexp) ([][]byte, error) { @@ -415,7 +416,7 @@ func (i *Index) MeasurementNamesByRegex(re *regexp.Regexp) ([][]byte, error) { var a [][]byte for e := itr.Next(); e != nil; e = itr.Next() { if re.Match(e.Name()) { - a = append(a, copyBytes(e.Name())) + a = append(a, bytesutil.Clone(e.Name())) } } return a, nil @@ -730,7 +731,7 @@ func (i *Index) MeasurementSeriesKeysByExpr(name []byte, expr influxql.Expr) ([] defer fs.Release() keys, err := fs.MeasurementSeriesKeysByExpr(name, expr, i.fieldset) - return copyByteSlices(keys), err + return bytesutil.CloneSlice(keys), err } // TagSets returns an ordered list of tag sets for a measurement by dimension diff --git a/tsdb/index/tsi1/index_files.go b/tsdb/index/tsi1/index_files.go index 1cb6f22e73..fb8f5df95b 100644 --- a/tsdb/index/tsi1/index_files.go +++ b/tsdb/index/tsi1/index_files.go @@ -8,6 +8,7 @@ import ( "sort" "time" + "github.com/influxdata/influxdb/pkg/bytesutil" "github.com/influxdata/influxdb/pkg/estimator/hll" "github.com/influxdata/influxdb/pkg/mmap" ) @@ -52,7 +53,7 @@ func (p *IndexFiles) MeasurementNames() [][]byte { itr := p.MeasurementIterator() var names [][]byte for e := itr.Next(); e != nil; e = itr.Next() { - names = append(names, copyBytes(e.Name())) + names = append(names, bytesutil.Clone(e.Name())) } sort.Sort(byteSlices(names)) return names diff --git a/tsdb/index/tsi1/tsi1.go b/tsdb/index/tsi1/tsi1.go index fe977162ab..1d1b565857 100644 --- a/tsdb/index/tsi1/tsi1.go +++ b/tsdb/index/tsi1/tsi1.go @@ -792,25 +792,6 @@ func (a byteSlices) Len() int { return len(a) } func (a byteSlices) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a byteSlices) Less(i, j int) bool { return bytes.Compare(a[i], a[j]) == -1 } -// copyBytes returns a copy of b. -func copyBytes(b []byte) []byte { - if b == nil { - return nil - } - buf := make([]byte, len(b)) - copy(buf, b) - return buf -} - -// copyBytes returns a copy of a slice of byte slices. -func copyByteSlices(a [][]byte) [][]byte { - other := make([][]byte, len(a)) - for i := range a { - other[i] = copyBytes(a[i]) - } - return other -} - // assert will panic with a given formatted message if the given condition is false. func assert(condition bool, msg string, v ...interface{}) { if !condition {