func ExecuteForShard()

in pkg/query/logical/common.go [107:151]


func ExecuteForShard(l *logger.Logger, series tsdb.SeriesList, timeRange timestamp.TimeRange,
	builders ...SeekerBuilder,
) ([]tsdb.Iterator, []io.Closer, error) {
	var itersInShard []tsdb.Iterator
	var closers []io.Closer
	for _, seriesFound := range series {
		itersInSeries, err := func() ([]tsdb.Iterator, error) {
			ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
			defer cancel()
			sp, errInner := seriesFound.Span(context.WithValue(ctx, logger.ContextKey, l), timeRange)
			if errInner != nil {
				if errors.Is(errInner, tsdb.ErrEmptySeriesSpan) {
					return nil, nil
				}
				return nil, errInner
			}
			closers = append(closers, sp)
			b := sp.SeekerBuilder()
			for _, builder := range builders {
				builder(b)
			}
			seeker, errInner := b.Build()
			if errInner != nil {
				return nil, errInner
			}
			iters, errInner := seeker.Seek()
			if errInner != nil {
				return nil, errInner
			}
			return iters, nil
		}()
		if err != nil {
			if len(closers) > 0 {
				for _, closer := range closers {
					err = multierr.Append(err, closer.Close())
				}
			}
			return nil, nil, err
		}
		if len(itersInSeries) > 0 {
			itersInShard = append(itersInShard, itersInSeries...)
		}
	}
	return itersInShard, closers, nil
}