Return [] instead of null for empty result vectors.

This commit is contained in:
Julius Volz 2013-07-25 12:16:32 +02:00
parent 331be19af6
commit 81f0b85013
3 changed files with 14 additions and 11 deletions

View file

@ -75,7 +75,7 @@ func (t *fakeTarget) ScheduledFor() (time time.Time) {
func (t *fakeTarget) Merge(newTarget Target) {} func (t *fakeTarget) Merge(newTarget Target) {}
func (t *fakeTarget) EstimatedTimeToExecute() time.Duration { return 0 } func (t *fakeTarget) EstimatedTimeToExecute() time.Duration { return 0 }
func testTargetManager(t test.Tester) { func testTargetManager(t test.Tester) {
results := make(chan *extraction.Result, 5) results := make(chan *extraction.Result, 5)

View file

@ -401,7 +401,7 @@ func (node *VectorAggregation) Eval(timestamp time.Time, view *viewAdapter) Vect
func (node *VectorLiteral) Eval(timestamp time.Time, view *viewAdapter) Vector { func (node *VectorLiteral) Eval(timestamp time.Time, view *viewAdapter) Vector {
values, err := view.GetValueAtTime(node.fingerprints, timestamp) values, err := view.GetValueAtTime(node.fingerprints, timestamp)
if err != nil { if err != nil {
log.Printf("Unable to get vector values") log.Println("Unable to get vector values:", err)
return Vector{} return Vector{}
} }
return values return values
@ -589,7 +589,7 @@ func (node *MatrixLiteral) Eval(timestamp time.Time, view *viewAdapter) Matrix {
} }
values, err := view.GetRangeValues(node.fingerprints, interval) values, err := view.GetRangeValues(node.fingerprints, interval)
if err != nil { if err != nil {
log.Printf("Unable to get values for vector interval") log.Println("Unable to get values for vector interval:", err)
return Matrix{} return Matrix{}
} }
return values return values
@ -602,7 +602,7 @@ func (node *MatrixLiteral) EvalBoundaries(timestamp time.Time, view *viewAdapter
} }
values, err := view.GetBoundaryValues(node.fingerprints, interval) values, err := view.GetBoundaryValues(node.fingerprints, interval)
if err != nil { if err != nil {
log.Printf("Unable to get boundary values for vector interval") log.Printf("Unable to get boundary values for vector interval:", err)
return Matrix{} return Matrix{}
} }
return values return values

View file

@ -109,14 +109,15 @@ func (v *viewAdapter) chooseClosestSample(samples metric.Values, timestamp time.
} }
} }
func (v *viewAdapter) GetValueAtTime(fingerprints clientmodel.Fingerprints, timestamp time.Time) (samples Vector, err error) { func (v *viewAdapter) GetValueAtTime(fingerprints clientmodel.Fingerprints, timestamp time.Time) (Vector, error) {
timer := v.stats.GetTimer(stats.GetValueAtTimeTime).Start() timer := v.stats.GetTimer(stats.GetValueAtTimeTime).Start()
samples := Vector{}
for _, fingerprint := range fingerprints { for _, fingerprint := range fingerprints {
sampleCandidates := v.view.GetValueAtTime(fingerprint, timestamp) sampleCandidates := v.view.GetValueAtTime(fingerprint, timestamp)
samplePair := v.chooseClosestSample(sampleCandidates, timestamp) samplePair := v.chooseClosestSample(sampleCandidates, timestamp)
m, err := v.storage.GetMetricForFingerprint(fingerprint) m, err := v.storage.GetMetricForFingerprint(fingerprint)
if err != nil { if err != nil {
continue return nil, err
} }
if samplePair != nil { if samplePair != nil {
samples = append(samples, &clientmodel.Sample{ samples = append(samples, &clientmodel.Sample{
@ -127,11 +128,12 @@ func (v *viewAdapter) GetValueAtTime(fingerprints clientmodel.Fingerprints, time
} }
} }
timer.Stop() timer.Stop()
return samples, err return samples, nil
} }
func (v *viewAdapter) GetBoundaryValues(fingerprints clientmodel.Fingerprints, interval *metric.Interval) (sampleSets []metric.SampleSet, err error) { func (v *viewAdapter) GetBoundaryValues(fingerprints clientmodel.Fingerprints, interval *metric.Interval) ([]metric.SampleSet, error) {
timer := v.stats.GetTimer(stats.GetBoundaryValuesTime).Start() timer := v.stats.GetTimer(stats.GetBoundaryValuesTime).Start()
sampleSets := []metric.SampleSet{}
for _, fingerprint := range fingerprints { for _, fingerprint := range fingerprints {
samplePairs := v.view.GetBoundaryValues(fingerprint, *interval) samplePairs := v.view.GetBoundaryValues(fingerprint, *interval)
if len(samplePairs) == 0 { if len(samplePairs) == 0 {
@ -141,7 +143,7 @@ func (v *viewAdapter) GetBoundaryValues(fingerprints clientmodel.Fingerprints, i
// TODO: memoize/cache this. // TODO: memoize/cache this.
m, err := v.storage.GetMetricForFingerprint(fingerprint) m, err := v.storage.GetMetricForFingerprint(fingerprint)
if err != nil { if err != nil {
continue return nil, err
} }
sampleSet := metric.SampleSet{ sampleSet := metric.SampleSet{
@ -154,8 +156,9 @@ func (v *viewAdapter) GetBoundaryValues(fingerprints clientmodel.Fingerprints, i
return sampleSets, nil return sampleSets, nil
} }
func (v *viewAdapter) GetRangeValues(fingerprints clientmodel.Fingerprints, interval *metric.Interval) (sampleSets []metric.SampleSet, err error) { func (v *viewAdapter) GetRangeValues(fingerprints clientmodel.Fingerprints, interval *metric.Interval) ([]metric.SampleSet, error) {
timer := v.stats.GetTimer(stats.GetRangeValuesTime).Start() timer := v.stats.GetTimer(stats.GetRangeValuesTime).Start()
sampleSets := []metric.SampleSet{}
for _, fingerprint := range fingerprints { for _, fingerprint := range fingerprints {
samplePairs := v.view.GetRangeValues(fingerprint, *interval) samplePairs := v.view.GetRangeValues(fingerprint, *interval)
if len(samplePairs) == 0 { if len(samplePairs) == 0 {
@ -165,7 +168,7 @@ func (v *viewAdapter) GetRangeValues(fingerprints clientmodel.Fingerprints, inte
// TODO: memoize/cache this. // TODO: memoize/cache this.
m, err := v.storage.GetMetricForFingerprint(fingerprint) m, err := v.storage.GetMetricForFingerprint(fingerprint)
if err != nil { if err != nil {
continue return nil, err
} }
sampleSet := metric.SampleSet{ sampleSet := metric.SampleSet{