Skip to content

Commit 06a553c

Browse files
Ensure database connections are always closed (#1177)
Signed-off-by: Sam DeHaan <sam.dehaan@grafana.com> Signed-off-by: Sam DeHaan <dehaansa@gmail.com> Co-authored-by: Sam DeHaan <sam.dehaan@grafana.com> Co-authored-by: Sam DeHaan <dehaansa@gmail.com>
1 parent aa98bb3 commit 06a553c

File tree

3 files changed

+7
-2
lines changed

3 files changed

+7
-2
lines changed

cmd/postgres_exporter/server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ func (s *Servers) GetServer(dsn string) (*Server, error) {
173173
s.servers[dsn] = server
174174
}
175175
if err = server.Ping(); err != nil {
176+
server.Close()
176177
delete(s.servers, dsn)
177178
time.Sleep(time.Duration(errCount) * time.Second)
178179
continue

collector/collector.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,11 @@ func (p PostgresCollector) Collect(ch chan<- prometheus.Metric) {
173173

174174
// Set up the database connection for the collector.
175175
err := inst.setup()
176+
defer inst.Close()
176177
if err != nil {
177178
p.logger.Error("Error opening connection to database", "err", err)
178179
return
179180
}
180-
defer inst.Close()
181181

182182
wg := sync.WaitGroup{}
183183
wg.Add(len(p.Collectors))
@@ -190,6 +190,10 @@ func (p PostgresCollector) Collect(ch chan<- prometheus.Metric) {
190190
wg.Wait()
191191
}
192192

193+
func (p *PostgresCollector) Close() error {
194+
return p.instance.Close()
195+
}
196+
193197
func execute(ctx context.Context, name string, c Collector, instance *instance, ch chan<- prometheus.Metric, logger *slog.Logger) {
194198
begin := time.Now()
195199
err := c.Update(ctx, instance, ch)

collector/probe.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ func (pc *ProbeCollector) Describe(ch chan<- *prometheus.Desc) {
7676
func (pc *ProbeCollector) Collect(ch chan<- prometheus.Metric) {
7777
// Set up the database connection for the collector.
7878
err := pc.instance.setup()
79+
defer pc.instance.Close()
7980
if err != nil {
8081
pc.logger.Error("Error opening connection to database", "err", err)
8182
return
8283
}
83-
defer pc.instance.Close()
8484

8585
wg := sync.WaitGroup{}
8686
wg.Add(len(pc.collectors))

0 commit comments

Comments
 (0)