From 7557461a362d3caad00a18d90b2052768e85aec6 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Fri, 20 Jun 2014 16:31:13 +0200 Subject: [PATCH] SONAR-5394 open SQL write connection only on first statement --- .../sonar/server/db/migrations/MassUpdater.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/db/migrations/MassUpdater.java b/sonar-server/src/main/java/org/sonar/server/db/migrations/MassUpdater.java index 49230376878..bff09fd3f9d 100644 --- a/sonar-server/src/main/java/org/sonar/server/db/migrations/MassUpdater.java +++ b/sonar-server/src/main/java/org/sonar/server/db/migrations/MassUpdater.java @@ -88,10 +88,6 @@ public class MassUpdater { Connection writeConnection = null; PreparedStatement writeStatement = null; try { - writeConnection = db.getDataSource().getConnection(); - writeConnection.setAutoCommit(false); - writeStatement = writeConnection.prepareStatement(converter.updateSql()); - readConnection = db.getDataSource().getConnection(); readConnection.setAutoCommit(false); @@ -104,6 +100,17 @@ public class MassUpdater { if (row == null) { continue; } + + if (writeConnection==null) { + // do not open the write connection too early + // else if the select on read connection is long, then mysql + // write connection fails with communication failure error because + // no activity during a long period + writeConnection = db.getDataSource().getConnection(); + writeConnection.setAutoCommit(false); + writeStatement = writeConnection.prepareStatement(converter.updateSql()); + } + if (converter.convert(row, writeStatement)) { writeStatement.addBatch(); writeStatement.clearParameters(); -- 2.39.5