diff --git a/0032-Correcting-archive-SQL-statements-in-tables.patch b/0032-Correcting-archive-SQL-statements-in-tables.patch new file mode 100644 index 0000000000000000000000000000000000000000..d24a05ac5255fca57fa804bbf9e5d3d88d86c233 --- /dev/null +++ b/0032-Correcting-archive-SQL-statements-in-tables.patch @@ -0,0 +1,110 @@ +From e60aaece9648aadb3957627671702b121103d6fd Mon Sep 17 00:00:00 2001 +From: motodiary +Date: Tue, 28 May 2024 14:05:50 +0800 +Subject: [PATCH] Correcting archive SQL statements in tables + +--- + .../pgsql/as_pgsql_archive.c | 77 ++++++++++++++++--- + 1 file changed, 65 insertions(+), 12 deletions(-) + +diff --git a/src/plugins/accounting_storage/pgsql/as_pgsql_archive.c b/src/plugins/accounting_storage/pgsql/as_pgsql_archive.c +index 668a6aa..c8738f3 100755 +--- a/src/plugins/accounting_storage/pgsql/as_pgsql_archive.c ++++ b/src/plugins/accounting_storage/pgsql/as_pgsql_archive.c +@@ -4355,28 +4355,81 @@ static int _archive_purge_table(purge_type_t purge_type, uint32_t usage_info, + * archiving is enabled). + */ + switch (purge_type) { ++ case PURGE_EVENT: ++ query = xstrdup_printf( ++ "DELETE FROM \"%s_%s\" " ++ "WHERE (node_name, time_start) IN " ++ "( SELECT node_name, time_start FROM \"%s_%s\" " ++ "WHERE %s <= %ld AND time_end != 0 ORDER BY %s asc LIMIT %d", ++ cluster_name, sql_table, cluster_name, sql_table, col_name, ++ tmp_end, col_name, MAX_PURGE_LIMIT); ++ break; ++ case PURGE_SUSPEND: ++ query = xstrdup_printf( ++ "DELETE FROM \"%s_%s\" " ++ "WHERE (job_db_inx, time_start) IN " ++ "( SELECT job_db_inx, time_start FROM \"%s_%s\" " ++ "WHERE %s <= %ld AND time_end != 0 ORDER BY %s asc LIMIT %d", ++ cluster_name, sql_table, cluster_name, sql_table, col_name, ++ tmp_end, col_name, MAX_PURGE_LIMIT); ++ break; ++ case PURGE_RESV: ++ query = xstrdup_printf( ++ "DELETE FROM \"%s_%s\" " ++ "WHERE (id_resv, time_start) IN " ++ "( SELECT id_resv, time_start FROM \"%s_%s\" " ++ "WHERE %s <= %ld AND time_end != 0 ORDER BY %s asc LIMIT %d", ++ cluster_name, sql_table, cluster_name, sql_table, col_name, ++ tmp_end, col_name, MAX_PURGE_LIMIT); ++ break; ++ case PURGE_JOB: ++ query = xstrdup_printf( ++ "DELETE FROM \"%s_%s\" " ++ "WHERE (job_db_inx) IN " ++ "( SELECT job_db_inx FROM \"%s_%s\" " ++ "WHERE %s <= %ld AND time_end != 0 ORDER BY %s asc LIMIT %d", ++ cluster_name, sql_table, cluster_name, sql_table, col_name, ++ tmp_end, col_name, MAX_PURGE_LIMIT); ++ break; ++ case PURGE_STEP: ++ query = xstrdup_printf( ++ "DELETE FROM \"%s_%s\" " ++ "WHERE (job_db_inx, id_step, step_het_comp) IN " ++ "( SELECT job_db_inx, id_step, step_het_comp FROM \"%s_%s\" " ++ "WHERE %s <= %ld AND time_end != 0 ORDER BY %s asc LIMIT %d", ++ cluster_name, sql_table, cluster_name, sql_table, col_name, ++ tmp_end, col_name, MAX_PURGE_LIMIT); ++ break; + case PURGE_TXN: + query = xstrdup_printf( +- "DELETE FROM \"%s\" WHERE " +- "%s <= %ld AND cluster='%s' ORDER BY %s asc LIMIT %d", +- sql_table, col_name, tmp_end, cluster_name, +- col_name, MAX_PURGE_LIMIT); ++ "DELETE FROM \"%s\" " ++ "WHERE (id) IN " ++ "( SELECT id FROM \"%s\" " ++ "WHERE %s <= %ld AND cluster='%s' ORDER BY %s asc LIMIT %d", ++ sql_table, sql_table, col_name, ++ tmp_end, cluster_name, col_name, MAX_PURGE_LIMIT); + break; + case PURGE_USAGE: +- case PURGE_CLUSTER_USAGE: + query = xstrdup_printf( +- "DELETE FROM \"%s_%s\" WHERE " +- "%s <= %ld ORDER BY %s asc LIMIT %d", +- cluster_name, sql_table, col_name, ++ "DELETE FROM \"%s_%s\" " ++ "WHERE (id, id_tres, time_start) IN " ++ "( SELECT id, id_tres, time_start FROM \"%s_%s\" " ++ "WHERE %s <= %ld ORDER BY %s asc LIMIT %d", ++ cluster_name, sql_table, cluster_name, sql_table, col_name, + tmp_end, col_name, MAX_PURGE_LIMIT); + break; +- default: ++ case PURGE_CLUSTER_USAGE: + query = xstrdup_printf( +- "DELETE FROM \"%s_%s\" WHERE " +- "%s <= %ld AND time_end != 0 ORDER BY %s asc LIMIT %d", +- cluster_name, sql_table, col_name, ++ "DELETE FROM \"%s_%s\" " ++ "WHERE (id_tres, time_start) IN " ++ "( SELECT id_tres, time_start FROM \"%s_%s\" " ++ "WHERE %s <= %ld ORDER BY %s asc LIMIT %d", ++ cluster_name, sql_table, cluster_name, sql_table, col_name, + tmp_end, col_name, MAX_PURGE_LIMIT); + break; ++ default: ++ error("%s unknown purge_type %d", __func__, purge_type); ++ break; + } + DB_DEBUG(DB_ARCHIVE, pgsql_conn->conn, "query\n%s", query); + +-- +2.33.0 + diff --git a/slurm.spec b/slurm.spec index b6dab7ca9fc423e3ff295a0cdb089fc66e907652..4680c2964a0a2bc3015f1772388f0a7d44fe839a 100644 --- a/slurm.spec +++ b/slurm.spec @@ -1,6 +1,6 @@ Name: slurm Version: 21.08.8 -%define rel 34 +%define rel 35 Release: %{rel}%{?dist} Summary: Slurm Workload Manager @@ -47,6 +47,7 @@ Patch28: 0028-modify-the-field-type-of-info-in-txn_table.patch Patch29: 0029-add-partition-default-value-in-job_table.patch Patch30: 0030-Modify-the-alias-after-EXCLUDED-in-SQL-to-field-name.patch Patch31: 0031-fix-some-error-add-pgsql_escape_str-function.patch +Patch32: 0032-Correcting-archive-SQL-statements-in-tables.patch # build options .rpmmacros options change to default action # ==================== ==================== ======================== @@ -739,6 +740,9 @@ rm -rf %{buildroot} %systemd_postun_with_restart slurmdbd.service %changelog +* Tue May 28 2024 Xing Liu - 21.08.8-35 +- Correcting archive SQL statements in tables + * Tue May 28 2024 Xing Liu - 21.08.8-34 - fix some error,add pgsql_escape_str function