@@ -2,6 +2,7 @@ package bloomgateway
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
"math/rand"
6
7
"sort"
7
8
"testing"
@@ -10,6 +11,7 @@ import (
10
11
"github.com/go-kit/log"
11
12
"github.com/pkg/errors"
12
13
"github.com/prometheus/common/model"
14
+ "github.com/prometheus/prometheus/model/labels"
13
15
"github.com/stretchr/testify/require"
14
16
15
17
"github.com/grafana/loki/v3/pkg/logproto"
@@ -79,7 +81,7 @@ func TestBloomQuerier(t *testing.T) {
79
81
}
80
82
expr , err := syntax .ParseExpr (`{foo="bar"}` )
81
83
require .NoError (t , err )
82
- res , err := bq .FilterChunkRefs (ctx , tenant , from , through , chunkRefs , plan.QueryPlan {AST : expr })
84
+ res , err := bq .FilterChunkRefs (ctx , tenant , from , through , nil , chunkRefs , plan.QueryPlan {AST : expr })
83
85
require .NoError (t , err )
84
86
require .Equal (t , chunkRefs , res )
85
87
require .Equal (t , 0 , c .callCount )
@@ -95,7 +97,7 @@ func TestBloomQuerier(t *testing.T) {
95
97
chunkRefs := []* logproto.ChunkRef {}
96
98
expr , err := syntax .ParseExpr (`{foo="bar"} | trace_id="exists"` )
97
99
require .NoError (t , err )
98
- res , err := bq .FilterChunkRefs (ctx , tenant , from , through , chunkRefs , plan.QueryPlan {AST : expr })
100
+ res , err := bq .FilterChunkRefs (ctx , tenant , from , through , nil , chunkRefs , plan.QueryPlan {AST : expr })
99
101
require .NoError (t , err )
100
102
require .Equal (t , chunkRefs , res )
101
103
require .Equal (t , 0 , c .callCount )
@@ -115,7 +117,7 @@ func TestBloomQuerier(t *testing.T) {
115
117
}
116
118
expr , err := syntax .ParseExpr (`{foo="bar"} | trace_id="exists"` )
117
119
require .NoError (t , err )
118
- res , err := bq .FilterChunkRefs (ctx , tenant , from , through , chunkRefs , plan.QueryPlan {AST : expr })
120
+ res , err := bq .FilterChunkRefs (ctx , tenant , from , through , nil , chunkRefs , plan.QueryPlan {AST : expr })
119
121
require .Error (t , err )
120
122
require .Nil (t , res )
121
123
})
@@ -134,7 +136,7 @@ func TestBloomQuerier(t *testing.T) {
134
136
}
135
137
expr , err := syntax .ParseExpr (`{foo="bar"} | trace_id="exists"` )
136
138
require .NoError (t , err )
137
- res , err := bq .FilterChunkRefs (ctx , tenant , from , through , chunkRefs , plan.QueryPlan {AST : expr })
139
+ res , err := bq .FilterChunkRefs (ctx , tenant , from , through , nil , chunkRefs , plan.QueryPlan {AST : expr })
138
140
require .NoError (t , err )
139
141
require .Equal (t , chunkRefs , res )
140
142
require .Equal (t , 2 , c .callCount )
@@ -143,28 +145,40 @@ func TestBloomQuerier(t *testing.T) {
143
145
}
144
146
145
147
func TestGroupChunkRefs (t * testing.T ) {
148
+ series := []labels.Labels {
149
+ labels .FromStrings ("app" , "1" ),
150
+ labels .FromStrings ("app" , "2" ),
151
+ labels .FromStrings ("app" , "3" ),
152
+ }
153
+
146
154
chunkRefs := []* logproto.ChunkRef {
147
- {Fingerprint : 0x00 , UserID : "tenant" , From : mktime ("2024-04-20 00:00" ), Through : mktime ("2024-04-20 00:59" )},
148
- {Fingerprint : 0x00 , UserID : "tenant" , From : mktime ("2024-04-20 01:00" ), Through : mktime ("2024-04-20 01:59" )},
149
- {Fingerprint : 0x01 , UserID : "tenant" , From : mktime ("2024-04-20 00:00" ), Through : mktime ("2024-04-20 00:59" )},
150
- {Fingerprint : 0x01 , UserID : "tenant" , From : mktime ("2024-04-20 01:00" ), Through : mktime ("2024-04-20 01:59" )},
151
- {Fingerprint : 0x02 , UserID : "tenant" , From : mktime ("2024-04-20 00:00" ), Through : mktime ("2024-04-20 00:59" )},
152
- {Fingerprint : 0x02 , UserID : "tenant" , From : mktime ("2024-04-20 01:00" ), Through : mktime ("2024-04-20 01:59" )},
155
+ {Fingerprint : series [ 0 ]. Hash () , UserID : "tenant" , From : mktime ("2024-04-20 00:00" ), Through : mktime ("2024-04-20 00:59" )},
156
+ {Fingerprint : series [ 0 ]. Hash () , UserID : "tenant" , From : mktime ("2024-04-20 01:00" ), Through : mktime ("2024-04-20 01:59" )},
157
+ {Fingerprint : series [ 1 ]. Hash () , UserID : "tenant" , From : mktime ("2024-04-20 00:00" ), Through : mktime ("2024-04-20 00:59" )},
158
+ {Fingerprint : series [ 1 ]. Hash () , UserID : "tenant" , From : mktime ("2024-04-20 01:00" ), Through : mktime ("2024-04-20 01:59" )},
159
+ {Fingerprint : series [ 2 ]. Hash () , UserID : "tenant" , From : mktime ("2024-04-20 00:00" ), Through : mktime ("2024-04-20 00:59" )},
160
+ {Fingerprint : series [ 2 ]. Hash () , UserID : "tenant" , From : mktime ("2024-04-20 01:00" ), Through : mktime ("2024-04-20 01:59" )},
153
161
}
154
162
155
- result := groupChunkRefs (chunkRefs , nil )
163
+ result := groupChunkRefs (series , chunkRefs , nil )
156
164
require .Equal (t , []* logproto.GroupedChunkRefs {
157
- {Fingerprint : 0x00 , Tenant : "tenant" , Refs : []* logproto.ShortRef {
165
+ {Fingerprint : series [ 0 ]. Hash () , Tenant : "tenant" , Refs : []* logproto.ShortRef {
158
166
{From : mktime ("2024-04-20 00:00" ), Through : mktime ("2024-04-20 00:59" )},
159
167
{From : mktime ("2024-04-20 01:00" ), Through : mktime ("2024-04-20 01:59" )},
168
+ }, Labels : & logproto.IndexSeries {
169
+ Labels : logproto .FromLabelsToLabelAdapters (series [0 ]),
160
170
}},
161
- {Fingerprint : 0x01 , Tenant : "tenant" , Refs : []* logproto.ShortRef {
171
+ {Fingerprint : series [ 1 ]. Hash () , Tenant : "tenant" , Refs : []* logproto.ShortRef {
162
172
{From : mktime ("2024-04-20 00:00" ), Through : mktime ("2024-04-20 00:59" )},
163
173
{From : mktime ("2024-04-20 01:00" ), Through : mktime ("2024-04-20 01:59" )},
174
+ }, Labels : & logproto.IndexSeries {
175
+ Labels : logproto .FromLabelsToLabelAdapters (series [1 ]),
164
176
}},
165
- {Fingerprint : 0x02 , Tenant : "tenant" , Refs : []* logproto.ShortRef {
177
+ {Fingerprint : series [ 2 ]. Hash () , Tenant : "tenant" , Refs : []* logproto.ShortRef {
166
178
{From : mktime ("2024-04-20 00:00" ), Through : mktime ("2024-04-20 00:59" )},
167
179
{From : mktime ("2024-04-20 01:00" ), Through : mktime ("2024-04-20 01:59" )},
180
+ }, Labels : & logproto.IndexSeries {
181
+ Labels : logproto .FromLabelsToLabelAdapters (series [2 ]),
168
182
}},
169
183
}, result )
170
184
}
@@ -175,11 +189,15 @@ func BenchmarkGroupChunkRefs(b *testing.B) {
175
189
n := 1000 // num series
176
190
m := 10000 // num chunks per series
177
191
chunkRefs := make ([]* logproto.ChunkRef , 0 , n * m )
192
+ series := make ([]labels.Labels , 0 , n )
178
193
179
194
for i := 0 ; i < n ; i ++ {
195
+ s := labels .FromStrings ("app" , fmt .Sprintf ("%d" , i ))
196
+ sFP := s .Hash ()
197
+ series = append (series , s )
180
198
for j := 0 ; j < m ; j ++ {
181
199
chunkRefs = append (chunkRefs , & logproto.ChunkRef {
182
- Fingerprint : uint64 ( n ) ,
200
+ Fingerprint : sFP ,
183
201
UserID : "tenant" ,
184
202
From : mktime ("2024-04-20 00:00" ),
185
203
Through : mktime ("2024-04-20 00:59" ),
@@ -196,5 +214,5 @@ func BenchmarkGroupChunkRefs(b *testing.B) {
196
214
b .StartTimer ()
197
215
198
216
groups := make ([]* logproto.GroupedChunkRefs , 0 , n )
199
- groupChunkRefs (chunkRefs , groups )
217
+ groupChunkRefs (series , chunkRefs , groups )
200
218
}
0 commit comments