From 7567d1ae7a128d72e3e7655ee0e7081849b5c9c5 Mon Sep 17 00:00:00 2001 From: Amit Saha <76932416+asaha123@users.noreply.github.com> Date: Wed, 2 Aug 2023 01:19:12 +1000 Subject: [PATCH] fix(kork-sql): Use class variables for hikari pool metrics (#1081) The SQL pool gauge metrics are disappearing due to the adhoc gauge objects being garbage collected. This change fixes the pool metrics to be class variables instead and hence avoid being garbage collected. The micrometer docs also alludes to this issue: https://micrometer.io/docs/concepts#_why_is_my_gauge_reporting_nan_or_disappearing (cherry picked from commit 032fc2da46a7774a41fc8f98415f3db16b9336c3) --- .../telemetry/HikariSpectatorMetricsTracker.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kork-sql/src/main/kotlin/com/netflix/spinnaker/kork/sql/telemetry/HikariSpectatorMetricsTracker.kt b/kork-sql/src/main/kotlin/com/netflix/spinnaker/kork/sql/telemetry/HikariSpectatorMetricsTracker.kt index d1b3072cd..5fd2378f6 100644 --- a/kork-sql/src/main/kotlin/com/netflix/spinnaker/kork/sql/telemetry/HikariSpectatorMetricsTracker.kt +++ b/kork-sql/src/main/kotlin/com/netflix/spinnaker/kork/sql/telemetry/HikariSpectatorMetricsTracker.kt @@ -33,19 +33,19 @@ class HikariSpectatorMetricsTracker( private val connectionUsageId = registry.createId("sql.pool.$poolName.connectionUsageTiming") private val connectionTimeoutId = registry.createId("sql.pool.$poolName.connectionTimeout") - private val idleConnectionsId = registry.createId("sql.pool.$poolName.idle") - private val activeConnectionsId = registry.createId("sql.pool.$poolName.active") - private val totalConnectionsId = registry.createId("sql.pool.$poolName.total") - private val blockedThreadsId = registry.createId("sql.pool.$poolName.blocked") + private val idleConnectionsGauge = registry.gauge("sql.pool.$poolName.idle") + private val activeConnectionsGauge = registry.gauge("sql.pool.$poolName.active") + private val totalConnectionsGauge = registry.gauge("sql.pool.$poolName.total") + private val blockedThreadsGauge = registry.gauge("sql.pool.$poolName.blocked") /** * Record the individual pool's statistics. */ fun recordPoolStats() { - registry.gauge(idleConnectionsId).set(poolStats.idleConnections.toDouble()) - registry.gauge(activeConnectionsId).set(poolStats.activeConnections.toDouble()) - registry.gauge(totalConnectionsId).set(poolStats.totalConnections.toDouble()) - registry.gauge(blockedThreadsId).set(poolStats.pendingThreads.toDouble()) + idleConnectionsGauge.set(poolStats.idleConnections.toDouble()) + activeConnectionsGauge.set(poolStats.activeConnections.toDouble()) + totalConnectionsGauge.set(poolStats.totalConnections.toDouble()) + blockedThreadsGauge.set(poolStats.pendingThreads.toDouble()) } override fun recordConnectionAcquiredNanos(elapsedAcquiredNanos: Long) {