You've already forked mysqld_exporter
mirror of
https://github.com/prometheus/mysqld_exporter.git
synced 2025-07-30 06:43:05 +03:00
Fix race condition in ReloadConfig (#760)
Calling ReloadConfig was not thread safe in spite of mutex. One thread could overwrite the package level cfg pointer after it was mutated by another thread. Signed-off-by: Alexander J. Maidak <ajmaidak@gmail.com>
This commit is contained in:
committed by
GitHub
parent
3a996a47d2
commit
263b96d5c0
@ -45,8 +45,6 @@ var (
|
||||
Help: "Timestamp of the last successful configuration reload.",
|
||||
})
|
||||
|
||||
cfg *ini.File
|
||||
|
||||
opts = ini.LoadOptions{
|
||||
// Do not error on nonexistent file to allow empty string as filename input
|
||||
Loose: true,
|
||||
@ -97,12 +95,13 @@ func (ch *MySqlConfigHandler) ReloadConfig(filename string, mysqldAddress string
|
||||
}
|
||||
}()
|
||||
|
||||
if cfg, err = ini.LoadSources(
|
||||
cfg, err := ini.LoadSources(
|
||||
opts,
|
||||
[]byte("[client]\npassword = ${MYSQLD_EXPORTER_PASSWORD}\n"),
|
||||
filename,
|
||||
); err != nil {
|
||||
return fmt.Errorf("failed to load %s: %w", filename, err)
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to load config from %s: %w", filename, err)
|
||||
}
|
||||
|
||||
if host, port, err = net.SplitHostPort(mysqldAddress); err != nil {
|
||||
@ -135,12 +134,6 @@ func (ch *MySqlConfigHandler) ReloadConfig(filename string, mysqldAddress string
|
||||
TlsInsecureSkipVerify: tlsInsecureSkipVerify,
|
||||
}
|
||||
|
||||
// FIXME: this error check seems orphaned
|
||||
if err != nil {
|
||||
level.Error(logger).Log("msg", "failed to load config", "section", sectionName, "err", err)
|
||||
continue
|
||||
}
|
||||
|
||||
err = sec.StrictMapTo(mysqlcfg)
|
||||
if err != nil {
|
||||
level.Error(logger).Log("msg", "failed to parse config", "section", sectionName, "err", err)
|
||||
|
Reference in New Issue
Block a user