From 77df050160d6a5343aab97571bf891e51b4b1201 Mon Sep 17 00:00:00 2001 From: mrog <4752942+mrog@users.noreply.github.com> Date: Tue, 13 Sep 2022 02:42:53 -0600 Subject: [PATCH] Reset unusable db connections (#6725) When the management service detects a broken database connection, it didn't do anything about it. It already has code to reset the connection, but that doesn't get used. This change causes the connection to be reset after it's found to be unusable. Fixes #6724 (see issue for repro steps) --- .../main/java/com/cloud/utils/db/ConnectionConcierge.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/framework/db/src/main/java/com/cloud/utils/db/ConnectionConcierge.java b/framework/db/src/main/java/com/cloud/utils/db/ConnectionConcierge.java index a1c473d5ffd..2ae0de90f26 100644 --- a/framework/db/src/main/java/com/cloud/utils/db/ConnectionConcierge.java +++ b/framework/db/src/main/java/com/cloud/utils/db/ConnectionConcierge.java @@ -174,7 +174,7 @@ public class ConnectionConcierge { Connection conn = TransactionLegacy.getStandaloneConnection(); if (conn == null) { - return "Unable to get anotehr db connection"; + return "Unable to get another db connection"; } concierge.reset(conn); @@ -198,9 +198,13 @@ public class ConnectionConcierge { protected void runInContext() { s_logger.trace("connection concierge keep alive task"); for (Map.Entry entry : _conns.entrySet()) { + String name = entry.getKey(); ConnectionConcierge concierge = entry.getValue(); if (concierge.keepAlive()) { - testValidity(entry.getKey(), entry.getValue().conn()); + if (testValidity(name, concierge.conn()) != null) { + s_logger.info("Resetting DB connection " + name); + resetConnection(name); + } } } }