Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

query/store: memoize PromLabels() call #7767

Merged
merged 1 commit into from
Sep 20, 2024
Merged

query/store: memoize PromLabels() call #7767

merged 1 commit into from
Sep 20, 2024

Commits on Sep 20, 2024

  1. query/store: memoize PromLabels() call

    We use the stringlabels call so some allocations are inevitable but we
    can be much smarter about it:
    
    ```
    func (s *storeSeriesSet) At() (labels.Labels, []*storepb.AggrChunk) {
    	return s.series[s.i].PromLabels(), s.series[s.i].Chunks <--- not memoized, new alloc on every At() call; need to memoize because of stringlabel. One alloc is inevitable.
    }
    ```
    
    ```
    lset, chks := s.SeriesSet.At()
    if s.peek == nil {
    	s.peek = &Series{Labels: labelpb.PromLabelsToLabelpbLabels(lset), Chunks: chks} <-- converting back to labelpb ?
    	continue
    }
    ```
    
    ```
    if labels.Compare(lset, s.peek.PromLabels()) != 0 { <--- PromLabels() called; we can avoid this call
    	s.lset, s.chunks = s.peek.PromLabels(), s.peek.Chunks <- PromLabels() called; we can avoid this
    	s.peek = &Series{Labels: labelpb.PromLabelsToLabelpbLabels(lset), Chunks: chks} <--- converting back to labelpb; we can avoid this
    	return true
    }
    ```
    
    Signed-off-by: Giedrius Statkevičius <[email protected]>
    GiedriusS committed Sep 20, 2024
    Configuration menu
    Copy the full SHA
    4e2f47e View commit details
    Browse the repository at this point in the history