MCPcopy
hub / github.com/grafana/tempo / internalTagValuesSearchBlockV2

Method internalTagValuesSearchBlockV2

modules/querier/querier.go:795–862  ·  view source on GitHub ↗
(ctx context.Context, req *tempopb.SearchTagValuesBlockRequest)

Source from the content-addressed store, hash-verified

793}
794
795func (q *Querier) internalTagValuesSearchBlockV2(ctx context.Context, req *tempopb.SearchTagValuesBlockRequest) (*tempopb.SearchTagValuesV2Response, error) {
796 tenantID, err := validation.ExtractValidTenantID(ctx)
797 if err != nil {
798 return &tempopb.SearchTagValuesV2Response{}, fmt.Errorf("error extracting org id in Querier.BackendSearch: %w", err)
799 }
800
801 blockID, err := backend.ParseUUID(req.BlockID)
802 if err != nil {
803 return &tempopb.SearchTagValuesV2Response{}, err
804 }
805
806 dc, err := backend.DedicatedColumnsFromTempopb(req.DedicatedColumns)
807 if err != nil {
808 return &tempopb.SearchTagValuesV2Response{}, err
809 }
810
811 meta := &backend.BlockMeta{
812 Version: req.Version,
813 TenantID: tenantID,
814 Size_: req.Size_,
815 IndexPageSize: req.IndexPageSize,
816 TotalRecords: req.TotalRecords,
817 BlockID: blockID,
818 FooterSize: req.FooterSize,
819 DedicatedColumns: dc,
820 }
821
822 opts := common.DefaultSearchOptions()
823 opts.StartPage = int(req.StartPage)
824 opts.TotalPages = int(req.PagesToSearch)
825
826 conditionGroups, err := traceql.ExtractConditionGroups(req.SearchReq.Query, q.limits.MaxConditionGroupsPerTagQuery())
827 if err != nil {
828 if errors.Is(err, traceql.ErrMaxConditionGroupsPerTagQueryReached) {
829 return nil, status.Errorf(codes.InvalidArgument, "%s", err)
830 }
831 return nil, err
832 }
833 if len(conditionGroups) == 0 {
834 return q.store.SearchTagValuesV2(ctx, meta, req.SearchReq, opts)
835 }
836
837 tag, err := traceql.ParseIdentifier(req.SearchReq.TagName)
838 if err != nil {
839 return nil, err
840 }
841
842 valueCollector := collector.NewDistinctValue(q.limits.MaxBytesPerTagValuesQuery(tenantID),
843 req.SearchReq.MaxTagValues, req.SearchReq.StaleValueThreshold,
844 func(v tempopb.TagValue) int { return len(v.Type) + len(v.Value) })
845
846 var inspectedBytes uint64
847
848 fetcher := traceql.NewTagValuesFetcherWrapper(func(ctx context.Context, req traceql.FetchTagValuesRequest, cb traceql.FetchTagValuesCallback) error {
849 return q.store.FetchTagValues(ctx, meta, req, cb, func(bytesRead uint64) { inspectedBytes += bytesRead }, opts)
850 })
851
852 err = q.engine.ExecuteTagValues(ctx, tag, conditionGroups, traceql.MakeCollectTagValueFunc(valueCollector.Collect), fetcher, q.limits.MaxConditionGroupsPerTagQuery())

Callers 1

Calls 15

ExtractValidTenantIDFunction · 0.92
ParseUUIDFunction · 0.92
DefaultSearchOptionsFunction · 0.92
ExtractConditionGroupsFunction · 0.92
ParseIdentifierFunction · 0.92
NewDistinctValueFunction · 0.92
MakeCollectTagValueFuncFunction · 0.92
valuesToV2ResponseFunction · 0.85
ExecuteTagValuesMethod · 0.80

Tested by

no test coverage detected