mirror of
https://github.com/prometheus/prometheus.git
synced 2025-02-21 03:16:00 -08:00
Merge pull request #519 from grafana/compactor-stringlabels
compactor: avoid memory blow-up with stringlabels
This commit is contained in:
commit
77db38b483
10
tsdb/addsymbol.go
Normal file
10
tsdb/addsymbol.go
Normal file
|
@ -0,0 +1,10 @@
|
|||
//go:build !stringlabels
|
||||
|
||||
// Split out function which needs to be coded differently for stringlabels case.
|
||||
|
||||
package tsdb
|
||||
|
||||
func (sw *symbolsBatcher) addSymbol(sym string) error {
|
||||
sw.buffer[sym] = struct{}{}
|
||||
return sw.flushSymbols(false)
|
||||
}
|
15
tsdb/addsymbol_stringlabels.go
Normal file
15
tsdb/addsymbol_stringlabels.go
Normal file
|
@ -0,0 +1,15 @@
|
|||
//go:build stringlabels
|
||||
|
||||
// Split out function which needs to be coded differently for stringlabels case.
|
||||
|
||||
package tsdb
|
||||
|
||||
import "strings"
|
||||
|
||||
func (sw *symbolsBatcher) addSymbol(sym string) error {
|
||||
if _, found := sw.buffer[sym]; !found {
|
||||
sym = strings.Clone(sym) // So we don't retain reference to the entire labels block.
|
||||
sw.buffer[sym] = struct{}{}
|
||||
}
|
||||
return sw.flushSymbols(false)
|
||||
}
|
|
@ -145,11 +145,6 @@ func newSymbolsBatcher(limit int, dir string, flushers *symbolFlushers) *symbols
|
|||
}
|
||||
}
|
||||
|
||||
func (sw *symbolsBatcher) addSymbol(sym string) error {
|
||||
sw.buffer[sym] = struct{}{}
|
||||
return sw.flushSymbols(false)
|
||||
}
|
||||
|
||||
func (sw *symbolsBatcher) flushSymbols(force bool) error {
|
||||
if !force && len(sw.buffer) < sw.limit {
|
||||
return nil
|
||||
|
|
Loading…
Reference in a new issue