From 2f5715594cdcb89e88422cbd6570f0286921d3ea Mon Sep 17 00:00:00 2001
From: Danny Auble <da@schedmd.com>
Date: Wed, 27 Apr 2016 15:40:29 -0700
Subject: [PATCH] When doing a rollup commit a little more often to release
 locks in a more timely manner.

---
 .../accounting_storage/mysql/as_mysql_archive.c   | 13 +++++++++++++
 .../accounting_storage/mysql/as_mysql_rollup.c    | 15 ++++++++++++---
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/src/plugins/accounting_storage/mysql/as_mysql_archive.c b/src/plugins/accounting_storage/mysql/as_mysql_archive.c
index b1dd1961843..1f6d4adaba5 100644
--- a/src/plugins/accounting_storage/mysql/as_mysql_archive.c
+++ b/src/plugins/accounting_storage/mysql/as_mysql_archive.c
@@ -2483,11 +2483,24 @@ static int _archive_purge_table(purge_type_t purge_type,
 
 		while ((rc = mysql_db_delete_affected_rows(
 				mysql_conn, query)) > 0) {
+			/* Commit here every time since this could create a huge
+			 * transaction.
+			 */
+			if (mysql_db_commit(mysql_conn)) {
+				error("Couldn't commit cluster (%s) purge",
+				      cluster_name);
+				break;
+			}
+		}
 
 		xfree(query);
 		if (rc != SLURM_SUCCESS) {
 			error("Couldn't remove old event data");
 			return SLURM_ERROR;
+		} else if (mysql_db_commit(mysql_conn)) {
+			error("Couldn't commit cluster (%s) purge",
+			      cluster_name);
+			break;
 		}
 	} while (tmp_end < curr_end);
 
diff --git a/src/plugins/accounting_storage/mysql/as_mysql_rollup.c b/src/plugins/accounting_storage/mysql/as_mysql_rollup.c
index 6cd08bbd9c2..a783477ec05 100644
--- a/src/plugins/accounting_storage/mysql/as_mysql_rollup.c
+++ b/src/plugins/accounting_storage/mysql/as_mysql_rollup.c
@@ -1600,9 +1600,18 @@ end_it:
 
 	/* go check to see if we archive and purge */
 
-	if (rc == SLURM_SUCCESS)
-		rc = _process_purge(mysql_conn, cluster_name, archive_data,
-				    SLURMDB_PURGE_HOURS);
+	if (rc == SLURM_SUCCESS) {
+		if (mysql_db_commit(mysql_conn)) {
+			char start[25], end[25];
+			error("Couldn't commit cluster (%s) "
+			      "hour rollup for %s - %s",
+			      cluster_name, slurm_ctime2_r(&curr_start, start),
+			      slurm_ctime2_r(&curr_end, end));
+			rc = SLURM_ERROR;
+		} else
+			rc = _process_purge(mysql_conn, cluster_name,
+					    archive_data, SLURMDB_PURGE_HOURS);
+	}
 
 	return rc;
 }
-- 
GitLab