(ctx context.Context, req *tempopb.SearchTagValuesBlockRequest)
| 793 | } |
| 794 | |
| 795 | func (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()) |
no test coverage detected