Allow deleting series by time on a shard

pull/6483/head
Jason Wilder 2016-04-26 14:25:20 -06:00
parent 4d71d2b01f
commit d13d01b516
5 changed files with 12 additions and 9 deletions

View File

@ -34,7 +34,7 @@ type Engine interface {
CreateIterator(opt influxql.IteratorOptions) (influxql.Iterator, error) CreateIterator(opt influxql.IteratorOptions) (influxql.Iterator, error)
SeriesKeys(opt influxql.IteratorOptions) (influxql.SeriesList, error) SeriesKeys(opt influxql.IteratorOptions) (influxql.SeriesList, error)
WritePoints(points []models.Point) error WritePoints(points []models.Point) error
DeleteSeries(keys []string) error DeleteSeries(keys []string, min, max int64) error
DeleteMeasurement(name string, seriesKeys []string) error DeleteMeasurement(name string, seriesKeys []string) error
SeriesCount() (n int, err error) SeriesCount() (n int, err error)
MeasurementFields(measurement string) *MeasurementFields MeasurementFields(measurement string) *MeasurementFields

View File

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"io" "io"
"log" "log"
"math"
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
@ -368,7 +369,7 @@ func (e *Engine) WritePoints(points []models.Point) error {
} }
// DeleteSeries deletes the series from the engine. // DeleteSeries deletes the series from the engine.
func (e *Engine) DeleteSeries(seriesKeys []string) error { func (e *Engine) DeleteSeries(seriesKeys []string, min, max int64) error {
e.mu.RLock() e.mu.RLock()
defer e.mu.RUnlock() defer e.mu.RUnlock()
@ -387,7 +388,7 @@ func (e *Engine) DeleteSeries(seriesKeys []string) error {
deleteKeys = append(deleteKeys, k) deleteKeys = append(deleteKeys, k)
} }
} }
if err := e.FileStore.Delete(deleteKeys); err != nil { if err := e.FileStore.DeleteRange(deleteKeys, min, max); err != nil {
return err return err
} }
@ -403,7 +404,7 @@ func (e *Engine) DeleteSeries(seriesKeys []string) error {
} }
e.Cache.RUnlock() e.Cache.RUnlock()
e.Cache.Delete(walKeys) e.Cache.DeleteRange(walKeys, min, max)
// delete from the WAL // delete from the WAL
_, err := e.WAL.Delete(walKeys) _, err := e.WAL.Delete(walKeys)
@ -416,7 +417,7 @@ func (e *Engine) DeleteMeasurement(name string, seriesKeys []string) error {
delete(e.measurementFields, name) delete(e.measurementFields, name)
e.mu.Unlock() e.mu.Unlock()
return e.DeleteSeries(seriesKeys) return e.DeleteSeries(seriesKeys, math.MinInt64, math.MaxInt64)
} }
// SeriesCount returns the number of series buckets on the shard. // SeriesCount returns the number of series buckets on the shard.

View File

@ -5,6 +5,7 @@ import (
"bytes" "bytes"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"math"
"math/rand" "math/rand"
"os" "os"
"path/filepath" "path/filepath"
@ -112,7 +113,7 @@ func TestEngine_DeleteWALLoadMetadata(t *testing.T) {
} }
// Remove series. // Remove series.
if err := e.DeleteSeries([]string{"cpu,host=A"}); err != nil { if err := e.DeleteSeries([]string{"cpu,host=A"}, math.MinInt64, math.MaxInt64); err != nil {
t.Fatalf("failed to delete series: %s", err.Error()) t.Fatalf("failed to delete series: %s", err.Error())
} }

View File

@ -265,11 +265,11 @@ func (s *Shard) WritePoints(points []models.Point) error {
} }
// DeleteSeries deletes a list of series. // DeleteSeries deletes a list of series.
func (s *Shard) DeleteSeries(seriesKeys []string) error { func (s *Shard) DeleteSeries(seriesKeys []string, min, max int64) error {
if s.closed() { if s.closed() {
return ErrEngineClosed return ErrEngineClosed
} }
return s.engine.DeleteSeries(seriesKeys) return s.engine.DeleteSeries(seriesKeys, min, max)
} }
// DeleteMeasurement deletes a measurement and all underlying series. // DeleteMeasurement deletes a measurement and all underlying series.

View File

@ -6,6 +6,7 @@ import (
"io" "io"
"io/ioutil" "io/ioutil"
"log" "log"
"math"
"os" "os"
"path/filepath" "path/filepath"
"sort" "sort"
@ -605,7 +606,7 @@ func (s *Store) deleteSeries(database string, seriesKeys []string) error {
if sh.database != database { if sh.database != database {
continue continue
} }
if err := sh.DeleteSeries(seriesKeys); err != nil { if err := sh.DeleteSeries(seriesKeys, math.MinInt64, math.MaxInt64); err != nil {
return err return err
} }
} }