vendor: update github.com/VictoriaMetrics/metrics from v1.34.1 to v1.35.0

Fix potential memory leaks across VictoriaMetrics codebase after metrics.UnregisterSet(s) call
because of missing s.UnregisterAllMetrics() call.

This is a follow-up for 6a6e34ab8e . It is OK if some vmauth metrics
aren't visible for a few microseconds when the previous metrics are unregistered and new metrics
weren't registered yet.

Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6247
Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4690
Updates https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6252
Updates https://github.com/VictoriaMetrics/VictoriaMetrics/pull/5805
This commit is contained in:
Aliaksandr Valialkin 2024-07-15 10:39:05 +02:00
parent c995ccad93
commit 202e5704e6
No known key found for this signature in database
GPG key ID: 52C003EE2BCDB9EB
9 changed files with 19 additions and 21 deletions

View file

@ -80,7 +80,7 @@ func Init() {
// Stop stops vlstorage. // Stop stops vlstorage.
func Stop() { func Stop() {
metrics.UnregisterSet(storageMetrics) metrics.UnregisterSet(storageMetrics, true)
storageMetrics = nil storageMetrics = nil
strg.MustClose() strg.MustClose()

View file

@ -696,22 +696,15 @@ func loadAuthConfig() (bool, error) {
} }
logger.Infof("loaded information about %d users from -auth.config=%q", len(m), *authConfigPath) logger.Infof("loaded information about %d users from -auth.config=%q", len(m), *authConfigPath)
prevAc := authConfig.Load() acPrev := authConfig.Load()
if prevAc != nil { if acPrev != nil {
metrics.UnregisterSet(prevAc.ms) metrics.UnregisterSet(acPrev.ms, true)
} }
metrics.RegisterSet(ac.ms) metrics.RegisterSet(ac.ms)
authConfig.Store(ac) authConfig.Store(ac)
authConfigData.Store(&data) authConfigData.Store(&data)
authUsers.Store(&m) authUsers.Store(&m)
if prevAc != nil {
// explicilty unregister metrics, since all summary type metrics
// are registered at global state of metrics package
// and must be removed from it to release memory.
// Metrics must be unregistered only after atomic.Value.Store calls above
// Otherwise it may lead to metric gaps, since UnregisterAllMetrics is slow operation
prevAc.ms.UnregisterAllMetrics()
}
return true, nil return true, nil
} }

View file

@ -240,7 +240,7 @@ func GetSeriesCount(deadline uint64) (uint64, error) {
// Stop stops the vmstorage // Stop stops the vmstorage
func Stop() { func Stop() {
// deregister storage metrics // deregister storage metrics
metrics.UnregisterSet(storageMetrics) metrics.UnregisterSet(storageMetrics, true)
storageMetrics = nil storageMetrics = nil
logger.Infof("gracefully closing the storage at %s", *DataPath) logger.Infof("gracefully closing the storage at %s", *DataPath)

2
go.mod
View file

@ -9,7 +9,7 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2
github.com/VictoriaMetrics/easyproto v0.1.4 github.com/VictoriaMetrics/easyproto v0.1.4
github.com/VictoriaMetrics/fastcache v1.12.2 github.com/VictoriaMetrics/fastcache v1.12.2
github.com/VictoriaMetrics/metrics v1.34.1 github.com/VictoriaMetrics/metrics v1.35.0
github.com/VictoriaMetrics/metricsql v0.76.0 github.com/VictoriaMetrics/metricsql v0.76.0
github.com/aws/aws-sdk-go-v2 v1.30.1 github.com/aws/aws-sdk-go-v2 v1.30.1
github.com/aws/aws-sdk-go-v2/config v1.27.24 github.com/aws/aws-sdk-go-v2/config v1.27.24

4
go.sum
View file

@ -72,8 +72,8 @@ github.com/VictoriaMetrics/easyproto v0.1.4/go.mod h1:QlGlzaJnDfFd8Lk6Ci/fuLxfTo
github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI=
github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI=
github.com/VictoriaMetrics/metrics v1.34.0/go.mod h1:r7hveu6xMdUACXvB8TYdAj8WEsKzWB0EkpJN+RDtOf8= github.com/VictoriaMetrics/metrics v1.34.0/go.mod h1:r7hveu6xMdUACXvB8TYdAj8WEsKzWB0EkpJN+RDtOf8=
github.com/VictoriaMetrics/metrics v1.34.1 h1:7EUEObv45ekfyY6PWat0K/ytluZ4q6aujzXN3g41g/A= github.com/VictoriaMetrics/metrics v1.35.0 h1:xWImz8UTwyhGZAzueTHFgYe4bnKbXCaLWBq2JBj7EzI=
github.com/VictoriaMetrics/metrics v1.34.1/go.mod h1:r7hveu6xMdUACXvB8TYdAj8WEsKzWB0EkpJN+RDtOf8= github.com/VictoriaMetrics/metrics v1.35.0/go.mod h1:r7hveu6xMdUACXvB8TYdAj8WEsKzWB0EkpJN+RDtOf8=
github.com/VictoriaMetrics/metricsql v0.76.0 h1:hl7vqJqyH2d8zKImzalkFrkFiD5q4ACF8gl3s86DqKA= github.com/VictoriaMetrics/metricsql v0.76.0 h1:hl7vqJqyH2d8zKImzalkFrkFiD5q4ACF8gl3s86DqKA=
github.com/VictoriaMetrics/metricsql v0.76.0/go.mod h1:1g4hdCwlbJZ851PU9VN65xy9Rdlzupo6fx3SNZ8Z64U= github.com/VictoriaMetrics/metricsql v0.76.0/go.mod h1:1g4hdCwlbJZ851PU9VN65xy9Rdlzupo6fx3SNZ8Z64U=
github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow=

View file

@ -71,7 +71,7 @@ func NewDeduplicator(pushFunc PushFunc, dedupInterval time.Duration, dropLabels
// MustStop stops d. // MustStop stops d.
func (d *Deduplicator) MustStop() { func (d *Deduplicator) MustStop() {
metrics.UnregisterSet(d.ms) metrics.UnregisterSet(d.ms, true)
d.ms = nil d.ms = nil
close(d.stopCh) close(d.stopCh)

View file

@ -323,7 +323,7 @@ func (a *Aggregators) MustStop() {
return return
} }
metrics.UnregisterSet(a.ms) metrics.UnregisterSet(a.ms, true)
a.ms = nil a.ms = nil
for _, aggr := range a.as { for _, aggr := range a.as {

View file

@ -55,11 +55,16 @@ func RegisterSet(s *Set) {
// UnregisterSet stops exporting metrics for the given s via global WritePrometheus() call. // UnregisterSet stops exporting metrics for the given s via global WritePrometheus() call.
// //
// Call s.UnregisterAllMetrics() after unregistering s if it is no longer used. // If destroySet is set to true, then s.UnregisterAllMetrics() is called on s after unregistering it,
func UnregisterSet(s *Set) { // so s becomes destroyed. Otherwise the s can be registered again in the set by passing it to RegisterSet().
func UnregisterSet(s *Set, destroySet bool) {
registeredSetsLock.Lock() registeredSetsLock.Lock()
delete(registeredSets, s) delete(registeredSets, s)
registeredSetsLock.Unlock() registeredSetsLock.Unlock()
if destroySet {
s.UnregisterAllMetrics()
}
} }
// RegisterMetricsWriter registers writeMetrics callback for including metrics in the output generated by WritePrometheus. // RegisterMetricsWriter registers writeMetrics callback for including metrics in the output generated by WritePrometheus.

2
vendor/modules.txt vendored
View file

@ -115,7 +115,7 @@ github.com/VictoriaMetrics/easyproto
# github.com/VictoriaMetrics/fastcache v1.12.2 # github.com/VictoriaMetrics/fastcache v1.12.2
## explicit; go 1.13 ## explicit; go 1.13
github.com/VictoriaMetrics/fastcache github.com/VictoriaMetrics/fastcache
# github.com/VictoriaMetrics/metrics v1.34.1 # github.com/VictoriaMetrics/metrics v1.35.0
## explicit; go 1.17 ## explicit; go 1.17
github.com/VictoriaMetrics/metrics github.com/VictoriaMetrics/metrics
# github.com/VictoriaMetrics/metricsql v0.76.0 # github.com/VictoriaMetrics/metricsql v0.76.0