From df2d95f57593f036a8ae6f2cfce6cba5a6307a7c Mon Sep 17 00:00:00 2001 From: Amit Saha Date: Tue, 25 Jul 2023 17:06:03 +1000 Subject: [PATCH] fix(kork-sql): Use class variables for hikari pool metrics 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 --- .../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) {