From cfe448937bc46661b0edced003621b0d86d51f33 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Fri, 30 Aug 2019 21:30:24 +0200 Subject: [PATCH] Fix panic in Redis key metricset (#13426) (#13436) If a key is removed during a fetch, `FetchKeyInfo` returns a nil object, this nil object should be ignored, if passed to `eventMapping` it panics. (cherry picked from commit 99ded55e9abcc8045f841a58904db6b5ca04c9ab) --- CHANGELOG.next.asciidoc | 1 + metricbeat/module/redis/key/key.go | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 732a050b854..5579fa56036 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -45,6 +45,7 @@ https://github.com/elastic/beats/compare/v7.2.0...7.2[Check the HEAD diff] *Metricbeat* - Print errors that were being omitted in vSphere metricsets {pull}12816[12816] +- Fix panic in Redis Key metricset when collecting information from a removed key. {pull}13426[13426] *Packetbeat* diff --git a/metricbeat/module/redis/key/key.go b/metricbeat/module/redis/key/key.go index 62fffe34e01..2c2f6020d24 100644 --- a/metricbeat/module/redis/key/key.go +++ b/metricbeat/module/redis/key/key.go @@ -104,9 +104,14 @@ func (m *MetricSet) Fetch(r mb.ReporterV2) error { r.Error(err) continue } + if keyInfo == nil { + m.Logger().Debugf("Ignoring removed key %s from keyspace %d", key, p.Keyspace) + continue + } event := eventMapping(p.Keyspace, keyInfo) if !r.Event(event) { - return errors.New("metricset has closed") + m.Logger().Debug("Failed to report event, interrupting fetch") + return nil } } }