@@ -892,6 +892,56 @@ func TestBlocksStoreQuerier_Select(t *testing.T) {
892892 }
893893}
894894
895+ func BenchmarkBlocksStoreQuerier_Labels (b * testing.B ) {
896+ const (
897+ minT = int64 (10 )
898+ maxT = int64 (20 )
899+ )
900+ ctx := user .InjectOrgID (context .Background (), "user-1" )
901+ reg := prometheus .NewPedanticRegistry ()
902+ blocks := bucketindex.Blocks {}
903+ resps := map [BlocksStoreClient ][]ulid.ULID {}
904+ for i := 0 ; i < 500 ; i ++ {
905+ b := & bucketindex.Block {ID : ulid .MustNew (uint64 (i ), nil )}
906+ blocks = append (blocks , b )
907+ values := []string {}
908+ for j := i ; j < i + 300 ; j ++ {
909+ values = append (values , fmt .Sprintf ("Value_%v" , j ))
910+ }
911+ resps [& storeGatewayClientMock {
912+ remoteAddr : "1.1.1.1" ,
913+ mockedLabelValuesResponse : & storepb.LabelValuesResponse {
914+ Values : values ,
915+ Warnings : []string {},
916+ Hints : mockValuesHints (b .ID ),
917+ },
918+ }] = []ulid.ULID {b .ID }
919+ }
920+
921+ stores := & blocksStoreSetMock {mockedResponses : []interface {}{resps }, rotateMockResults : true }
922+ finder := & blocksFinderMock {}
923+
924+ finder .On ("GetBlocks" , mock .Anything , "user-1" , minT , maxT ).Return (blocks , map [ulid.ULID ]* bucketindex.BlockDeletionMark (nil ), nil )
925+
926+ q := & blocksStoreQuerier {
927+ minT : minT ,
928+ maxT : maxT ,
929+ finder : finder ,
930+ stores : stores ,
931+ consistency : NewBlocksConsistencyChecker (0 , 0 , log .NewNopLogger (), nil ),
932+ logger : log .NewNopLogger (),
933+ metrics : newBlocksStoreQueryableMetrics (reg ),
934+ limits : & blocksStoreLimitsMock {},
935+ }
936+
937+ b .ResetTimer ()
938+ b .ReportAllocs ()
939+ for i := 0 ; i < b .N ; i ++ {
940+ _ , _ , err := q .LabelValues (ctx , labels .MetricName )
941+ require .NoError (b , err )
942+ }
943+ }
944+
895945func TestBlocksStoreQuerier_Labels (t * testing.T ) {
896946 t .Parallel ()
897947
@@ -1619,6 +1669,8 @@ type blocksStoreSetMock struct {
16191669
16201670 mockedResponses []interface {}
16211671 nextResult int
1672+
1673+ rotateMockResults bool
16221674}
16231675
16241676func (m * blocksStoreSetMock ) GetClientsFor (_ string , _ []ulid.ULID , _ map [ulid.ULID ][]string , _ map [ulid.ULID ]map [string ]int ) (map [BlocksStoreClient ][]ulid.ULID , error ) {
@@ -1629,6 +1681,10 @@ func (m *blocksStoreSetMock) GetClientsFor(_ string, _ []ulid.ULID, _ map[ulid.U
16291681 res := m .mockedResponses [m .nextResult ]
16301682 m .nextResult ++
16311683
1684+ if m .rotateMockResults {
1685+ m .nextResult = m .nextResult % len (m .mockedResponses )
1686+ }
1687+
16321688 if err , ok := res .(error ); ok {
16331689 return nil , err
16341690 }
0 commit comments