From a40dce13844c0970246c4bb089ab0a22631cf5f0 Mon Sep 17 00:00:00 2001 From: matianjun1 Date: Tue, 10 Jan 2023 19:44:27 +0800 Subject: [PATCH 1/4] [receiver/redisreceiver] add scraper shutdown --- receiver/redisreceiver/client.go | 7 +++++++ receiver/redisreceiver/client_test.go | 4 ++++ receiver/redisreceiver/redis_scraper.go | 15 ++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/receiver/redisreceiver/client.go b/receiver/redisreceiver/client.go index c208c41ee33e..597ab94f1e70 100644 --- a/receiver/redisreceiver/client.go +++ b/receiver/redisreceiver/client.go @@ -25,6 +25,8 @@ type client interface { // line delimiter // redis lines are delimited by \r\n, files (for testing) by \n delimiter() string + // close + close() error } // Wraps a real Redis client, implements `client` interface. @@ -50,3 +52,8 @@ func (c *redisClient) delimiter() string { func (c *redisClient) retrieveInfo() (string, error) { return c.client.Info("all").Result() } + +// close. +func (c *redisClient) close() error { + return c.client.Close() +} diff --git a/receiver/redisreceiver/client_test.go b/receiver/redisreceiver/client_test.go index 1d360317da84..8975d4b97d7a 100644 --- a/receiver/redisreceiver/client_test.go +++ b/receiver/redisreceiver/client_test.go @@ -44,6 +44,10 @@ func (fakeClient) retrieveInfo() (string, error) { return readFile("info") } +func (fakeClient) close() error { + return nil +} + func readFile(fname string) (string, error) { file, err := os.ReadFile(filepath.Join("testdata", fname+".txt")) if err != nil { diff --git a/receiver/redisreceiver/redis_scraper.go b/receiver/redisreceiver/redis_scraper.go index 9bcdcbabfe8d..745695453228 100644 --- a/receiver/redisreceiver/redis_scraper.go +++ b/receiver/redisreceiver/redis_scraper.go @@ -34,6 +34,7 @@ import ( // Runs intermittently, fetching info from Redis, creating metrics/datapoints, // and feeding them to a metricsConsumer. type redisScraper struct { + client client redisSvc *redisSvc settings component.TelemetrySettings mb *metadata.MetricsBuilder @@ -58,11 +59,23 @@ func newRedisScraper(cfg *Config, settings receiver.CreateSettings) (scraperhelp func newRedisScraperWithClient(client client, settings receiver.CreateSettings, cfg *Config) (scraperhelper.Scraper, error) { rs := &redisScraper{ + client: client, redisSvc: newRedisSvc(client), settings: settings.TelemetrySettings, mb: metadata.NewMetricsBuilder(cfg.Metrics, settings), } - return scraperhelper.NewScraper(typeStr, rs.Scrape) + return scraperhelper.NewScraper( + typeStr, + rs.Scrape, + scraperhelper.WithShutdown(rs.shutdown), + ) +} + +func (rs *redisScraper) shutdown(context.Context) error { + if rs.client != nil { + return rs.client.close() + } + return nil } // Scrape is called periodically, querying Redis and building Metrics to send to From 678a3b2f00287571b83c4925b908cc27bb384719 Mon Sep 17 00:00:00 2001 From: matianjun1 Date: Thu, 12 Jan 2023 10:28:47 +0800 Subject: [PATCH 2/4] [receiver/redisreceiver] add changelog and comments --- ...receiver-redisreceiver-add-scraper-close.yaml | 16 ++++++++++++++++ receiver/redisreceiver/client.go | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 .chloggen/receiver-redisreceiver-add-scraper-close.yaml diff --git a/.chloggen/receiver-redisreceiver-add-scraper-close.yaml b/.chloggen/receiver-redisreceiver-add-scraper-close.yaml new file mode 100644 index 000000000000..4d524066b414 --- /dev/null +++ b/.chloggen/receiver-redisreceiver-add-scraper-close.yaml @@ -0,0 +1,16 @@ +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: enhancement + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: redisreceiver + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Add scraper shutdown with redis client close function to avoid redis client connection poll leaks + +# One or more tracking issues related to the change +issues: [] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: diff --git a/receiver/redisreceiver/client.go b/receiver/redisreceiver/client.go index 597ab94f1e70..2930f3810fc1 100644 --- a/receiver/redisreceiver/client.go +++ b/receiver/redisreceiver/client.go @@ -25,7 +25,7 @@ type client interface { // line delimiter // redis lines are delimited by \r\n, files (for testing) by \n delimiter() string - // close + // close release redis client connection pool close() error } @@ -53,7 +53,7 @@ func (c *redisClient) retrieveInfo() (string, error) { return c.client.Info("all").Result() } -// close. +// close client to release connention pool. func (c *redisClient) close() error { return c.client.Close() } From ff84028e1ddd970436487d8417801e1e0c6bb409 Mon Sep 17 00:00:00 2001 From: matianjun1 Date: Thu, 12 Jan 2023 10:30:45 +0800 Subject: [PATCH 3/4] [receiver/redisreceiver] fix typo --- .chloggen/receiver-redisreceiver-add-scraper-close.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.chloggen/receiver-redisreceiver-add-scraper-close.yaml b/.chloggen/receiver-redisreceiver-add-scraper-close.yaml index 4d524066b414..bdb5d9a245a5 100644 --- a/.chloggen/receiver-redisreceiver-add-scraper-close.yaml +++ b/.chloggen/receiver-redisreceiver-add-scraper-close.yaml @@ -5,7 +5,7 @@ change_type: enhancement component: redisreceiver # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: Add scraper shutdown with redis client close function to avoid redis client connection poll leaks +note: Add scraper shutdown with redis client close function to avoid redis client connection pool leaks # One or more tracking issues related to the change issues: [] From 1925f36a2f363882ac69c556c687b66b3d6df716 Mon Sep 17 00:00:00 2001 From: Dmitrii Anoshin Date: Wed, 11 Jan 2023 18:48:26 -0800 Subject: [PATCH 4/4] Update .chloggen/receiver-redisreceiver-add-scraper-close.yaml --- .chloggen/receiver-redisreceiver-add-scraper-close.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.chloggen/receiver-redisreceiver-add-scraper-close.yaml b/.chloggen/receiver-redisreceiver-add-scraper-close.yaml index bdb5d9a245a5..f291afeba8c8 100644 --- a/.chloggen/receiver-redisreceiver-add-scraper-close.yaml +++ b/.chloggen/receiver-redisreceiver-add-scraper-close.yaml @@ -8,7 +8,7 @@ component: redisreceiver note: Add scraper shutdown with redis client close function to avoid redis client connection pool leaks # One or more tracking issues related to the change -issues: [] +issues: [17491] # (Optional) One or more lines of additional information to render under the primary note. # These lines will be padded with 2 spaces and then inserted directly into the document.