Skip to content

Commit c09f921

Browse files
committed
Fix edge case where aggregation return an empty bucket.
1 parent 4d0e276 commit c09f921

File tree

2 files changed

+12
-13
lines changed

2 files changed

+12
-13
lines changed

pkg/quickwit/response_parser.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,12 @@ func processAggregationDocs(esAgg *simplejson.Json, aggDef *BucketAgg, target *Q
692692
frames := data.Frames{}
693693
fields := createFields(queryResult.Frames, propKeys)
694694

695+
// In some cases, there is no buckets. In this case
696+
// we don't want to override the dataframe with an empty one.
697+
if len(esAgg.Get("buckets").MustArray()) == 0 {
698+
return nil
699+
}
700+
695701
for _, v := range esAgg.Get("buckets").MustArray() {
696702
bucket := simplejson.NewFromAny(v)
697703
var values []interface{}

pkg/quickwit/response_parser_test.go

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -994,7 +994,7 @@ func TestProcessBuckets(t *testing.T) {
994994
"A": `{
995995
"metrics": [
996996
{
997-
"type": "max",
997+
"type": "count",
998998
"field": "counter",
999999
"id": "1"
10001000
}
@@ -1011,23 +1011,22 @@ func TestProcessBuckets(t *testing.T) {
10111011
"key": "val3",
10121012
"3": {
10131013
"buckets": [
1014-
{ "key": "info", "1": { "value": "299" } }, { "key": "error", "1": {"value": "300"} }
1014+
{ "key": "info", "doc_count": 299 }, { "key": "error", "doc_count": 10 }
10151015
]
10161016
}
10171017
},
10181018
{
10191019
"key": "val2",
10201020
"3": {
10211021
"buckets": [
1022-
{"key": "info", "1": {"value": "300"}}, {"key": "error", "1": {"value": "298"} }
1022+
{"key": "info", "doc_count": 300}, {"key": "error", "doc_count": 298 }
10231023
]
10241024
}
10251025
},
10261026
{
10271027
"key": "val1",
10281028
"3": {
10291029
"buckets": [
1030-
{"key": "info", "1": {"value": "299"}}, {"key": "error", "1": {"value": "296"} }
10311030
]
10321031
}
10331032
}
@@ -1042,7 +1041,7 @@ func TestProcessBuckets(t *testing.T) {
10421041
assert.Len(t, result.Responses, 1)
10431042
frames := result.Responses["A"].Frames
10441043
require.Len(t, frames, 1)
1045-
requireFrameLength(t, frames[0], 6)
1044+
requireFrameLength(t, frames[0], 4)
10461045
require.Len(t, frames[0].Fields, 3)
10471046

10481047
f1 := frames[0].Fields[0]
@@ -1051,28 +1050,22 @@ func TestProcessBuckets(t *testing.T) {
10511050

10521051
require.Equal(t, "label", f1.Name)
10531052
require.Equal(t, "level", f2.Name)
1054-
require.Equal(t, "Max", f3.Name)
1053+
require.Equal(t, "Count", f3.Name)
10551054

10561055
requireStringAt(t, "val3", f1, 0)
10571056
requireStringAt(t, "val3", f1, 1)
10581057
requireStringAt(t, "val2", f1, 2)
10591058
requireStringAt(t, "val2", f1, 3)
1060-
requireStringAt(t, "val1", f1, 4)
1061-
requireStringAt(t, "val1", f1, 5)
10621059

10631060
requireStringAt(t, "info", f2, 0)
10641061
requireStringAt(t, "error", f2, 1)
10651062
requireStringAt(t, "info", f2, 2)
10661063
requireStringAt(t, "error", f2, 3)
1067-
requireStringAt(t, "info", f2, 4)
1068-
requireStringAt(t, "error", f2, 5)
10691064

10701065
requireFloatAt(t, 299, f3, 0)
1071-
requireFloatAt(t, 300, f3, 1)
1066+
requireFloatAt(t, 10, f3, 1)
10721067
requireFloatAt(t, 300, f3, 2)
10731068
requireFloatAt(t, 298, f3, 3)
1074-
requireFloatAt(t, 299, f3, 4)
1075-
requireFloatAt(t, 296, f3, 5)
10761069
})
10771070

10781071
t.Run("Terms agg without date histogram", func(t *testing.T) {

0 commit comments

Comments
 (0)