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