diff --git a/0019-Adjusting-some-SQL-statements.patch b/0019-Adjusting-some-SQL-statements.patch new file mode 100644 index 0000000000000000000000000000000000000000..cc782f5463b588707e65855c4b2b8e717545b6dc --- /dev/null +++ b/0019-Adjusting-some-SQL-statements.patch @@ -0,0 +1,246 @@ +From b801252e49bca5c213e1fa67f1bbe83e8db1f73d Mon Sep 17 00:00:00 2001 +From: motodiary +Date: Mon, 20 May 2024 09:20:31 +0800 +Subject: [PATCH] Adjusting some SQL statements + +--- + src/database/pgsql_common.c | 27 +++-- + src/database/pgsql_common.h | 1 + + .../pgsql/accounting_storage_pgsql.c | 101 ++---------------- + 3 files changed, 27 insertions(+), 102 deletions(-) + +diff --git a/src/database/pgsql_common.c b/src/database/pgsql_common.c +index d301c00..49d4191 100755 +--- a/src/database/pgsql_common.c ++++ b/src/database/pgsql_common.c +@@ -430,9 +430,9 @@ static int _pgsql_make_table_current(pgsql_conn_t *pgsql_conn, char *table_name, + xstrfmtcat(correct_query, "CREATE SEQUENCE IF NOT EXISTS %s_%s_seq OWNED BY %s.%s;", + table_prefix, fields[i].name, table_prefix, fields[i].name); + +- xstrfmtcat(query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq');", ++ xstrfmtcat(query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq'::regclass);", + table_name, fields[i].name, table_prefix, fields[i].name); +- xstrfmtcat(correct_query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq');", ++ xstrfmtcat(correct_query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq'::regclass);", + table_name, fields[i].name, table_prefix, fields[i].name); + } else if (!strncmp(fields[i].type, "bigserial", 9)) { + xstrfmtcat(query, "ALTER TABLE %s ALTER COLUMN \"%s\" TYPE bigint;", +@@ -445,9 +445,9 @@ static int _pgsql_make_table_current(pgsql_conn_t *pgsql_conn, char *table_name, + xstrfmtcat(correct_query, "CREATE SEQUENCE IF NOT EXISTS %s_%s_seq OWNED BY %s.%s;", + table_prefix, fields[i].name, table_prefix, fields[i].name); + +- xstrfmtcat(query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq');", ++ xstrfmtcat(query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq'::regclass);", + table_name, fields[i].name, table_prefix, fields[i].name); +- xstrfmtcat(correct_query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq');", ++ xstrfmtcat(correct_query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq'::regclass);", + table_name, fields[i].name, table_prefix, fields[i].name); + } else { + xstrfmtcat(query, "ALTER TABLE %s ALTER COLUMN \"%s\" TYPE %s;", +@@ -490,9 +490,9 @@ static int _pgsql_make_table_current(pgsql_conn_t *pgsql_conn, char *table_name, + xstrfmtcat(correct_query, "CREATE SEQUENCE IF NOT EXISTS %s_%s_seq OWNED BY %s.%s;", + table_prefix, fields[i].name, table_prefix, fields[i].name); + +- xstrfmtcat(query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq');", ++ xstrfmtcat(query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq'::regclass);", + table_name, fields[i].name, table_prefix, fields[i].name); +- xstrfmtcat(correct_query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq');", ++ xstrfmtcat(correct_query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq'::regclass);", + table_name, fields[i].name, table_prefix, fields[i].name); + } else if (!strncmp(fields[i].type, "bigserial", 9)) { + xstrfmtcat(query, "ALTER TABLE %s ALTER COLUMN \"%s\" TYPE bigint;", +@@ -505,9 +505,9 @@ static int _pgsql_make_table_current(pgsql_conn_t *pgsql_conn, char *table_name, + xstrfmtcat(correct_query, "CREATE SEQUENCE IF NOT EXISTS %s_%s_seq OWNED BY %s.%s;", + table_prefix, fields[i].name, table_prefix, fields[i].name); + +- xstrfmtcat(query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq');", ++ xstrfmtcat(query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq'::regclass);", + table_name, fields[i].name, table_prefix, fields[i].name); +- xstrfmtcat(correct_query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq');", ++ xstrfmtcat(correct_query, "ALTER TABLE %s ALTER COLUMN \"%s\" SET DEFAULT nextval('%s_%s_seq'::regclass);", + table_name, fields[i].name, table_prefix, fields[i].name); + } else { + // define column type +@@ -950,6 +950,14 @@ extern int destroy_pgsql_db_info(pgsql_db_info_t *db_info) + return SLURM_SUCCESS; + } + ++extern void set_autocommit_off(pgsql_conn_t *pgsql_conn) ++{ ++ if (pgsql_conn->rollback) { ++ SQLSetConnectAttr(pgsql_conn->db_conn, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, 0); ++ } ++ ++} ++ + extern int pgsql_db_get_db_connection(pgsql_conn_t *pgsql_conn, char *db_name, + pgsql_db_info_t *db_info) + { +@@ -973,9 +981,6 @@ extern int pgsql_db_get_db_connection(pgsql_conn_t *pgsql_conn, char *db_name, + } + SQLSetConnectAttr(pgsql_conn->db_conn, SQL_LOGIN_TIMEOUT, (SQLPOINTER*)5, 0); + SQLSetConnectAttr(pgsql_conn->db_conn, SQL_ATTR_CONNECTION_TIMEOUT, (SQLPOINTER)&my_timeout, 0); +- if (pgsql_conn->rollback) { +- SQLSetConnectAttr(pgsql_conn->db_conn, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, 0); +- } + + while (!storage_init) { + debug2("Attempting to connect to %s:%d", db_host, db_info->port); +diff --git a/src/database/pgsql_common.h b/src/database/pgsql_common.h +index b613a74..82f8261 100755 +--- a/src/database/pgsql_common.h ++++ b/src/database/pgsql_common.h +@@ -149,6 +149,7 @@ extern int destroy_pgsql_conn(pgsql_conn_t *pgsql_conn); + extern pgsql_db_info_t *create_pgsql_db_info(slurm_pgsql_plugin_type_t type); + extern int destroy_pgsql_db_info(pgsql_db_info_t *db_info); + ++extern void set_autocommit_off(pgsql_conn_t *pgsql_conn); + extern int pgsql_db_get_db_connection(pgsql_conn_t *pgsql_conn, char *db_name, + pgsql_db_info_t *db_info); + extern int pgsql_db_close_db_connection(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 20f65f0..34a5159 100755 +--- a/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c ++++ b/src/plugins/accounting_storage/pgsql/accounting_storage_pgsql.c +@@ -685,97 +685,16 @@ static int _as_pgsql_acct_check_tables(pgsql_conn_t *pgsql_conn) + END IF; \n\ + \n\ + s := s || \n\ +- 'CONCAT(max_tres_pj), ' || \n\ +- 'CONCAT(max_tres_pn), ' || \n\ +- 'CONCAT(max_tres_mins_pj), ' || \n\ +- 'CONCAT(max_tres_run_mins), ' || \n\ ++ 'max_tres_pj, ' || \n\ ++ 'max_tres_pn, ' || \n\ ++ 'max_tres_mins_pj, ' || \n\ ++ 'max_tres_run_mins, ' || \n\ + 'parent_acct' || \n\ + ' FROM ' || \n\ + cluster || '_' || my_table || \n\ + ' WHERE acct = ''' || my_acct || ''' AND \"user\" = ''' || ''''; \n\ + \n\ +- EXECUTE s INTO par_id, mj, mja, mpt, msj, mwpj, mtpj, mtpn, mtmpj, mtrm, my_acct_new; \n\ +- \n\ +- EXIT WHEN without_limits = 0 OR my_acct = ''; \n\ +- END LOOP; \n\ +- \n\ +- IF without_limits = 1 THEN \n\ +- mj := 0; \n\ +- msj := 0; \n\ +- mwpj := 0; \n\ +- prio := 0; \n\ +- def_qos_id := 0; \n\ +- qos := '1'; \n\ +- END IF; \n\ +- \n\ +- LOOP \n\ +- s := 'SELECT '; \n\ +- \n\ +- IF par_id IS NULL THEN \n\ +- s := s || 'id_assoc, '; \n\ +- ELSE \n\ +- s := s || par_id || ', '; \n\ +- END IF; \n\ +- \n\ +- IF mj IS NULL THEN \n\ +- s := s || 'max_jobs, '; \n\ +- ELSE \n\ +- s := s || mj || ', '; \n\ +- END IF; \n\ +- \n\ +- IF mja IS NULL THEN \n\ +- s := s || 'max_jobs_accrue, '; \n\ +- ELSE \n\ +- s := s || mja || ', '; \n\ +- END IF; \n\ +- \n\ +- IF mpt IS NULL THEN \n\ +- s := s || 'min_prio_thresh, '; \n\ +- ELSE \n\ +- s := s || mpt || ', '; \n\ +- END IF; \n\ +- \n\ +- IF msj IS NULL THEN \n\ +- s := s || 'max_submit_jobs, '; \n\ +- ELSE \n\ +- s := s || msj || ', '; \n\ +- END IF; \n\ +- \n\ +- IF mwpj IS NULL THEN \n\ +- s := s || 'max_wall_pj, '; \n\ +- ELSE \n\ +- s := s || mwpj || ', '; \n\ +- END IF; \n\ +- \n\ +- IF prio IS NULL THEN \n\ +- s := s || 'priority, '; \n\ +- ELSE \n\ +- s := s || prio || ', '; \n\ +- END IF; \n\ +- \n\ +- IF def_qos_id IS NULL THEN \n\ +- s := s || 'def_qos_id, '; \n\ +- ELSE \n\ +- s := s || def_qos_id || ', '; \n\ +- END IF; \n\ +- \n\ +- IF qos = '' THEN \n\ +- s := s || 'qos, delta_qos, '; \n\ +- ELSE \n\ +- s := s || qos || ', ' || delta_qos || ', '; \n\ +- END IF; \n\ +- \n\ +- s := s || \n\ +- 'CONCAT(max_tres_pj), ' || \n\ +- 'CONCAT(max_tres_pn), ' || \n\ +- 'CONCAT(max_tres_mins_pj), ' || \n\ +- 'CONCAT(max_tres_run_mins), ' || \n\ +- 'parent_acct' || \n\ +- ' FROM ' || \n\ +- cluster || '_' || my_table || \n\ +- ' WHERE acct = ''' || my_acct || ''' AND \"user\" = ''' || ''''; \n\ +- \n\ +- EXECUTE s INTO par_id, mj, mja, mpt, msj, mwpj, mtpj, mtpn, mtmpj, mtrm, def_qos_id, qos, delta_qos, prio; \n\ ++ EXECUTE s INTO par_id, mj, mja, mpt, msj, mwpj, prio, def_qos_id, qos, delta_qos, mtpj, mtpn, mtmpj, mtrm; \n\ + \n\ + EXIT WHEN without_limits = 0 OR my_acct = ''; \n\ + END LOOP; \n\ +@@ -860,7 +779,7 @@ static int _as_pgsql_acct_check_tables(pgsql_conn_t *pgsql_conn) + return SLURM_ERROR; + + ending = xstrdup_printf(", primary key (id)); CREATE UNIQUE INDEX IF NOT EXISTS %s_udx ON %s " +- "\"type\", \"name\");", tres_table, tres_table); ++ "(\"type\", \"name\");", tres_table, tres_table); + xstrfmtcat(ending, "CREATE SEQUENCE IF NOT EXISTS %s_id_seq MINVALUE 1001 START WITH 1001;" + "ALTER TABLE %s ALTER COLUMN id SET DEFAULT nextval('%s_id_seq'::regclass);", + tres_table, tres_table, tres_table); +@@ -1122,15 +1041,13 @@ static int _as_pgsql_acct_check_tables(pgsql_conn_t *pgsql_conn) + query = xstrdup_printf( + "INSERT INTO %s (creation_time, mod_time, name, admin_level) " + "VALUES (%ld, %ld, 'root', %d) " +- "ON CONFLICT (name) DO UPDATE " +- "SET name = 'root';", ++ "ON CONFLICT (name) DO NOTHING;", + user_table, (long)now, (long)now, SLURMDB_ADMIN_SUPER_USER); + + xstrfmtcat(query, + "INSERT INTO %s (creation_time, mod_time, name, description, organization) " + "VALUES (%ld, %ld, 'root', 'default root account', 'root') " +- "ON CONFLICT (name) DO UPDATE " +- "SET name = 'root';", ++ "ON CONFLICT (name) DO NOTHING;", + acct_table, (long)now, (long)now); + + +@@ -2628,6 +2545,8 @@ extern int init(void) + + rc = _as_pgsql_acct_check_tables(pgsql_conn); + ++ set_autocommit_off(pgsql_conn); ++ + if (rc == SLURM_SUCCESS) { + if (pgsql_db_commit(pgsql_conn)) { + error("commit failed, meaning %s failed", plugin_name); +-- +2.33.0 + diff --git a/slurm.spec b/slurm.spec index 677e98128e2399e0df4ed46c17f3b9753e2e472c..0e7370df15b1faca78b29c5795096e5ac95b7011 100644 --- a/slurm.spec +++ b/slurm.spec @@ -1,6 +1,6 @@ Name: slurm Version: 21.08.8 -%define rel 21 +%define rel 22 Release: %{rel}%{?dist} Summary: Slurm Workload Manager @@ -34,6 +34,7 @@ Patch15: 0015-fix-partition-conflict-in-tables.patch Patch16: 0016-resume-autocommit-off-option.patch Patch17: 0017-update-jobcomp_table-field.patch Patch18: 0018-update-get_parent_limits-stored-procedure.patch +Patch19: 0019-Adjusting-some-SQL-statements.patch # build options .rpmmacros options change to default action # ==================== ==================== ======================== @@ -726,6 +727,9 @@ rm -rf %{buildroot} %systemd_postun_with_restart slurmdbd.service %changelog +* Mon May 20 2024 Xing Liu - 21.08.8-22 +- Adjusting some SQL statements + * Fri May 17 2024 Xing Liu - 21.08.8-21 - update 'get_parent_limits' stored procedure