70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package tsdb
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/influxdata/platform/logger"
|
|
"github.com/influxdata/platform/models"
|
|
)
|
|
|
|
// TempShard represents a test wrapper for Shard that uses temporary
|
|
// filesystem paths.
|
|
type TempShard struct {
|
|
*Shard
|
|
path string
|
|
sfile *SeriesFile
|
|
}
|
|
|
|
// NewTempShard returns a new instance of TempShard with temp paths.
|
|
func NewTempShard(index string) *TempShard {
|
|
// Create temporary path for data and WAL.
|
|
dir, err := ioutil.TempDir("", "influxdb-tsdb-")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// Create series file.
|
|
sfile := NewSeriesFile(filepath.Join(dir, "db0", SeriesFileDirectory))
|
|
sfile.Logger = logger.New(os.Stdout)
|
|
if err := sfile.Open(); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// Build engine options.
|
|
opt := NewEngineOptions()
|
|
|
|
return &TempShard{
|
|
Shard: NewShard(0,
|
|
filepath.Join(dir, "data", "db0", "rp0", "1"),
|
|
sfile,
|
|
opt,
|
|
),
|
|
sfile: sfile,
|
|
path: dir,
|
|
}
|
|
}
|
|
|
|
// Close closes the shard and removes all underlying data.
|
|
func (sh *TempShard) Close() error {
|
|
defer os.RemoveAll(sh.path)
|
|
sh.sfile.Close()
|
|
return sh.Shard.Close()
|
|
}
|
|
|
|
// MustWritePointsString parses the line protocol (with second precision) and
|
|
// inserts the resulting points into the shard. Panic on error.
|
|
func (sh *TempShard) MustWritePointsString(s string) {
|
|
a, err := models.ParsePointsWithPrecision([]byte(strings.TrimSpace(s)), time.Time{}, "s")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if err := sh.WritePoints(a); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|