From 0bd2de354d60ede2625bd7348c9c5052f05f8057 Mon Sep 17 00:00:00 2001 From: Sergey Konovalov Date: Mon, 21 Jul 2025 19:23:13 +0300 Subject: [PATCH] [bug] Add autocommit options to mysql; Fix bug 76048 --- Common/config/default.json | 3 ++- .../sources/databaseConnectors/mysqlConnector.js | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Common/config/default.json b/Common/config/default.json index 41df46fb..b809d820 100644 --- a/Common/config/default.json +++ b/Common/config/default.json @@ -398,7 +398,8 @@ }, "mysqlExtraOptions": { "connectTimeout": 60000, - "queryTimeout": 60000 + "queryTimeout": 60000, + "autoCommit": false } }, "redis": { diff --git a/DocService/sources/databaseConnectors/mysqlConnector.js b/DocService/sources/databaseConnectors/mysqlConnector.js index d22a0b27..232cc0cf 100644 --- a/DocService/sources/databaseConnectors/mysqlConnector.js +++ b/DocService/sources/databaseConnectors/mysqlConnector.js @@ -34,6 +34,7 @@ const mysql = require('mysql2/promise'); const connectorUtilities = require('./connectorUtilities'); +const operationContext = require('../../../Common/sources/operationContext'); const config = require('config'); const configSql = config.get('services.CoAuthoring.sql'); @@ -58,9 +59,24 @@ if (configuration.queryTimeout) { queryTimeout = configuration.queryTimeout; delete configuration.queryTimeout; } +let autoCommit = false; +if (configuration.autoCommit !== undefined) { + //delete to fix issue with invalid configuration option + autoCommit = configuration.autoCommit; + delete configuration.autoCommit +} const pool = mysql.createPool(configuration); +// Set autocommit once per connection +if (autoCommit === true) { + pool.on('connection', async (conn) => { + conn.promise().query('SET autocommit=1').catch(err => + operationContext.global.logger.error('Failed to set autocommit=1:', err.message) + ); + }); +} + function sqlQuery(ctx, sqlCommand, callbackFunction, opt_noModifyRes = false, opt_noLog = false, opt_values = []) { return executeQuery(ctx, sqlCommand, opt_values, opt_noModifyRes, opt_noLog).then( result => callbackFunction?.(null, result),