diff --git a/0006-add-return-value-SQL_NO_DATA-in-sql-api.patch b/0006-add-return-value-SQL_NO_DATA-in-sql-api.patch new file mode 100644 index 0000000000000000000000000000000000000000..d0f7ffef2ca9075873d3beff57e72fdfd163aea8 --- /dev/null +++ b/0006-add-return-value-SQL_NO_DATA-in-sql-api.patch @@ -0,0 +1,111 @@ +From 4068638a3f7ab7ac9869dbbd3e1984cd4dee0130 Mon Sep 17 00:00:00 2001 +From: motodiary +Date: Mon, 6 May 2024 09:26:45 +0800 +Subject: [PATCH] add return value SQL_NO_DATA in sql api + +--- + src/database/pgsql_common.c | 10 ++++++---- + src/database/pgsql_common.h | 2 ++ + .../pgsql/accounting_storage_pgsql.c | 8 ++++---- + 3 files changed, 12 insertions(+), 8 deletions(-) + +diff --git a/src/database/pgsql_common.c b/src/database/pgsql_common.c +index b979f3d..ccda9db 100755 +--- a/src/database/pgsql_common.c ++++ b/src/database/pgsql_common.c +@@ -57,8 +57,9 @@ typedef struct { + char *columns; + } db_key_t; + +-static char *_pgsql_handle_quotes(char *str) ++extern char *pgsql_handle_quotes(char *str) + { ++ debug4("%s org str %s", __func__, str); + char *dup, *copy = NULL; + int len = 0; + if (!str || !(len = strlen(str))) { +@@ -75,6 +76,7 @@ static char *_pgsql_handle_quotes(char *str) + *dup++ = '\''; + } + } while ((*dup++ = *str++)); ++ debug4("%s result str %s", __func__, copy); + + return copy; + } +@@ -174,7 +176,7 @@ try_again: + fatal("You haven't inited this storage yet."); + + rc = SQLExecDirect(stmt, (SQLCHAR*)query, SQL_NTS); +- if ((rc != SQL_SUCCESS) && (rc != SQL_SUCCESS_WITH_INFO)) { ++ if ((rc != SQL_SUCCESS) && (rc != SQL_SUCCESS_WITH_INFO) && rc != SQL_NO_DATA) { + + PGSQL_HANDLE_ERROR("SQLExecDirect", rc, SQL_HANDLE_STMT, stmt, state); + +@@ -719,7 +721,7 @@ static int _pgsql_make_table_current(pgsql_conn_t *pgsql_conn, char *table_name, + + /* see if we have already done this definition */ + if (!adding) { +- char *quoted = _pgsql_handle_quotes(query); ++ char *quoted = pgsql_handle_quotes(query); + char *query2 = xstrdup_printf("select table_name from " + "%s where definition='%s';", + table_defs_table, quoted); +@@ -770,7 +772,7 @@ static int _pgsql_make_table_current(pgsql_conn_t *pgsql_conn, char *table_name, + xfree(query); + return SLURM_ERROR; + } +- quoted = _pgsql_handle_quotes(correct_query); ++ quoted = pgsql_handle_quotes(correct_query); + query2 = xstrdup_printf("INSERT INTO %s (creation_time, " + "mod_time, table_name, definition) " + "VALUES (%ld, %ld, '%s', '%s') " +diff --git a/src/database/pgsql_common.h b/src/database/pgsql_common.h +index ab9e7ce..b613a74 100755 +--- a/src/database/pgsql_common.h ++++ b/src/database/pgsql_common.h +@@ -141,6 +141,8 @@ typedef struct { + } \ + } while (0) + ++extern char *pgsql_handle_quotes(char *str); ++ + extern pgsql_conn_t *create_pgsql_conn(int conn_num, bool rollback, + char *cluster_name); + extern int destroy_pgsql_conn(pgsql_conn_t *pgsql_conn); +diff --git a/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c b/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c +index 4b1e87e..79147c1 100755 +--- a/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c ++++ b/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c +@@ -1985,7 +1985,7 @@ extern int modify_common(pgsql_conn_t *pgsql_conn, + { + char *query = NULL; + int rc = SLURM_SUCCESS; +- char *tmp_cond_char = slurm_add_slash_to_quotes(cond_char); ++ char *tmp_cond_char = pgsql_handle_quotes(cond_char); + char *tmp_vals = NULL; + bool cluster_centric = true; + +@@ -1998,7 +1998,7 @@ extern int modify_common(pgsql_conn_t *pgsql_conn, + cluster_centric = false; + + if (vals && vals[1]) +- tmp_vals = slurm_add_slash_to_quotes(vals+2); ++ tmp_vals = pgsql_handle_quotes(vals+2); + + if (cluster_centric) { + xassert(cluster_name); +@@ -2180,9 +2180,9 @@ extern int remove_common(pgsql_conn_t *pgsql_conn, + which never change. + */ + if (type == DBD_REMOVE_ASSOCS && assoc_char) +- tmp_name_char = slurm_add_slash_to_quotes(assoc_char); ++ tmp_name_char = pgsql_handle_quotes(assoc_char); + else +- tmp_name_char = slurm_add_slash_to_quotes(name_char); ++ tmp_name_char = pgsql_handle_quotes(name_char); + + if (cluster_centric) + xstrfmtcat(query, +-- +2.33.0 + diff --git a/slurm.spec b/slurm.spec index fca9a4b8bc589a05435324e1fcc1eabf4d96036e..038af58065f153eaaed22833d364caff0bd6df9e 100644 --- a/slurm.spec +++ b/slurm.spec @@ -1,6 +1,6 @@ Name: slurm Version: 21.08.8 -%define rel 8 +%define rel 9 Release: %{rel}%{?dist} Summary: Slurm Workload Manager @@ -21,6 +21,7 @@ Patch2: 0002-add-pgsql-plugin.patch Patch3: 0003-replace-with-AND-in-as_pgsql_resource.patch Patch4: 0004-fix-some-sql-bug.patch Patch5: 0005-replace-in-as_pgsql_jobacct_process.patch +Patch6: 0006-add-return-value-SQL_NO_DATA-in-sql-api.patch # build options .rpmmacros options change to default action # ==================== ==================== ======================== @@ -713,6 +714,9 @@ rm -rf %{buildroot} %systemd_postun_with_restart slurmdbd.service %changelog +* Mon May 06 2024 Xing Liu - 21.08.8-9 +- add return value SQL_NO_DATA in sql api + * Tue Apr 30 2024 Xing Liu - 21.08.8-8 - replace && and || in sql in as_pgsql_jobacct_process.c