diff --git a/src/common/slurm_accounting_storage.c b/src/common/slurm_accounting_storage.c index 79b139755aa43dbdc144619f05c3f94f65d063f6..16fea5d8917e312805a08ecc2fd9720e7b830ca9 100644 --- a/src/common/slurm_accounting_storage.c +++ b/src/common/slurm_accounting_storage.c @@ -98,9 +98,6 @@ typedef struct slurm_acct_storage_ops { List (*modify_accts) (void *db_conn, uint32_t uid, slurmdb_account_cond_t *acct_cond, slurmdb_account_rec_t *acct); - List (*modify_clus_res) (void *db_conn, uint32_t uid, - slurmdb_clus_res_cond_t *clus_res_cond, - slurmdb_clus_res_rec_t *clus_res); List (*modify_clusters) (void *db_conn, uint32_t uid, slurmdb_cluster_cond_t *cluster_cond, slurmdb_cluster_rec_t *cluster); @@ -113,9 +110,9 @@ typedef struct slurm_acct_storage_ops { List (*modify_qos) (void *db_conn, uint32_t uid, slurmdb_qos_cond_t *qos_cond, slurmdb_qos_rec_t *qos); - List (*modify_ser_res) (void *db_conn, uint32_t uid, - slurmdb_ser_res_cond_t *ser_res_cond, - slurmdb_ser_res_rec_t *ser_res); + List (*modify_res) (void *db_conn, uint32_t uid, + slurmdb_res_cond_t *res_cond, + slurmdb_res_rec_t *res); List (*modify_wckeys) (void *db_conn, uint32_t uid, slurmdb_wckey_cond_t *wckey_cond, slurmdb_wckey_rec_t *wckey); @@ -225,12 +222,11 @@ static const char *syms[] = { "acct_storage_p_add_reservation", "acct_storage_p_modify_users", "acct_storage_p_modify_accts", - "acct_storage_p_modify_clus_res", "acct_storage_p_modify_clusters", "acct_storage_p_modify_associations", "acct_storage_p_modify_job", "acct_storage_p_modify_qos", - "acct_storage_p_modify_ser_res", + "acct_storage_p_modify_res", "acct_storage_p_modify_wckeys", "acct_storage_p_modify_reservation", "acct_storage_p_remove_users", @@ -449,15 +445,6 @@ extern List acct_storage_g_modify_accounts(void *db_conn, uint32_t uid, return (*(ops.modify_accts))(db_conn, uid, acct_cond, acct); } -extern List acct_storage_g_modify_clus_res(void *db_conn, uint32_t uid, - slurmdb_clus_res_cond_t *clus_res_cond, - slurmdb_clus_res_rec_t *clus_res) -{ - if (slurm_acct_storage_init(NULL) < 0) - return NULL; - return (*(ops.modify_clus_res))(db_conn, uid, clus_res_cond, clus_res); -} - extern List acct_storage_g_modify_clusters(void *db_conn, uint32_t uid, slurmdb_cluster_cond_t *cluster_cond, slurmdb_cluster_rec_t *cluster) @@ -496,13 +483,13 @@ extern List acct_storage_g_modify_qos(void *db_conn, uint32_t uid, return (*(ops.modify_qos))(db_conn, uid, qos_cond, qos); } -extern List acct_storage_g_modify_ser_res(void *db_conn, uint32_t uid, - slurmdb_ser_res_cond_t *ser_res_cond, - slurmdb_ser_res_rec_t *ser_res) +extern List acct_storage_g_modify_res(void *db_conn, uint32_t uid, + slurmdb_res_cond_t *res_cond, + slurmdb_res_rec_t *res) { if (slurm_acct_storage_init(NULL) < 0) return NULL; - return (*(ops.modify_ser_res))(db_conn, uid, ser_res_cond, ser_res); + return (*(ops.modify_res))(db_conn, uid, res_cond, res); } extern List acct_storage_g_modify_wckeys(void *db_conn, uint32_t uid, diff --git a/src/common/slurm_accounting_storage.h b/src/common/slurm_accounting_storage.h index 35728656874e98b2bfc4aeb25599deda6f256621..1fd2efb6f297944561519a83bdd8cf9a662d75c9 100644 --- a/src/common/slurm_accounting_storage.h +++ b/src/common/slurm_accounting_storage.h @@ -198,17 +198,6 @@ extern List acct_storage_g_modify_associations( slurmdb_association_cond_t *assoc_cond, slurmdb_association_rec_t *assoc); -/* - * modify existing clus_res in the accounting system - * IN: slurmdb_clus_res_cond_t *clus_res_cond - * IN: slurmdb_clus_res_rec_t *clus_res - * RET: List containing (char *'s) else NULL on error - */ -extern List acct_storage_g_modify_clus_res(void *db_conn, uint32_t uid, - slurmdb_clus_res_cond_t *clus_res_cond, - slurmdb_clus_res_rec_t *clus_res); - - /* * modify existing job in the accounting system * IN: slurmdb_job_modify_cond_t *job_cond @@ -230,14 +219,14 @@ extern List acct_storage_g_modify_qos(void *db_conn, uint32_t uid, slurmdb_qos_rec_t *qos); /* - * modify existing ser_res in the accounting system - * IN: slurmdb_ser_res_cond_t *ser_res_cond - * IN: slurmdb_ser_res_rec_t *ser_res + * modify existing res in the accounting system + * IN: slurmdb_res_cond_t *res_cond + * IN: slurmdb_res_rec_t *res * RET: List containing (char *'s) else NULL on error */ -extern List acct_storage_g_modify_ser_res(void *db_conn, uint32_t uid, - slurmdb_ser_res_cond_t *ser_res_cond, - slurmdb_ser_res_rec_t *ser_res); +extern List acct_storage_g_modify_res(void *db_conn, uint32_t uid, + slurmdb_res_cond_t *res_cond, + slurmdb_res_rec_t *res); /* * modify existing wckey in the accounting system diff --git a/src/db_api/resource_functions.c b/src/db_api/resource_functions.c index e53412b087b694daccb21403d0411d3ce48a60a6..90545bfb7b351758b4b907d455dec9e08c5b3f71 100644 --- a/src/db_api/resource_functions.c +++ b/src/db_api/resource_functions.c @@ -69,18 +69,17 @@ extern List slurmdb_clus_res_get(void *db_conn, } /* - * modify existing clus_res in the accounting system - * IN: slurmdb_clus_res_cond_t *clus_res_cond - * IN: slurmdb_clus_res_rec_t *clus_res + * modify existing res in the accounting system + * IN: slurmdb_res_cond_t *res_cond + * IN: slurmdb_res_rec_t *res * RET: List containing (char *'s) else NULL on error * note List needs to be freed with slurm_list_destroy() when called */ -extern List slurmdb_clus_res_modify(void *db_conn, - slurmdb_clus_res_cond_t *clus_res_cond, - slurmdb_clus_res_rec_t *clus_res) +extern List slurmdb_res_modify(void *db_conn, + slurmdb_res_cond_t *res_cond, + slurmdb_res_rec_t *res) { - return acct_storage_g_modify_clus_res(db_conn, getuid(), - clus_res_cond, clus_res); + return acct_storage_g_modify_res(db_conn, getuid(), res_cond, res); } /* diff --git a/src/plugins/accounting_storage/filetxt/accounting_storage_filetxt.c b/src/plugins/accounting_storage/filetxt/accounting_storage_filetxt.c index ffbe11979b279f84d1afe8763d666ec7255d8b51..bb73a9b92fb77379b028a797f7efbf4b08882db2 100644 --- a/src/plugins/accounting_storage/filetxt/accounting_storage_filetxt.c +++ b/src/plugins/accounting_storage/filetxt/accounting_storage_filetxt.c @@ -376,6 +376,13 @@ extern List acct_storage_p_modify_qos(void *db_conn, uint32_t uid, return SLURM_SUCCESS; } +extern List acct_storage_p_modify_res(void *db_conn, uint32_t uid, + slurmdb_res_cond_t *ser_res_cond, + slurmdb_res_rec_t *ser_res) +{ + return SLURM_SUCCESS; +} + extern List acct_storage_p_modify_wckeys(void *db_conn, uint32_t uid, slurmdb_wckey_cond_t *wckey_cond, slurmdb_wckey_rec_t *wckey) diff --git a/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c b/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c index 9a600b34065ecab601e323b36da506836b35cd08..1fda9d8d7392f7889b0808effb04b4f0996077ce 100644 --- a/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c +++ b/src/plugins/accounting_storage/mysql/accounting_storage_mysql.c @@ -2360,15 +2360,6 @@ extern List acct_storage_p_modify_accts(mysql_conn_t *mysql_conn, uint32_t uid, return as_mysql_modify_accts(mysql_conn, uid, acct_cond, acct); } -extern List acct_storage_p_modify_clus_res( - mysql_conn_t *mysql_conn, uint32_t uid, - slurmdb_clus_res_cond_t *clus_res_cond, - slurmdb_clus_res_rec_t *clus_res) -{ - return as_mysql_modify_clus_res(mysql_conn, uid, clus_res_cond, - clus_res); -} - extern List acct_storage_p_modify_clusters(mysql_conn_t *mysql_conn, uint32_t uid, slurmdb_cluster_cond_t *cluster_cond, @@ -2399,12 +2390,12 @@ extern List acct_storage_p_modify_qos(mysql_conn_t *mysql_conn, uint32_t uid, return as_mysql_modify_qos(mysql_conn, uid, qos_cond, qos); } -extern List acct_storage_p_modify_ser_res(mysql_conn_t *mysql_conn, +extern List acct_storage_p_modify_res(mysql_conn_t *mysql_conn, uint32_t uid, - slurmdb_ser_res_cond_t *ser_res_cond, - slurmdb_ser_res_rec_t *ser_res) + slurmdb_res_cond_t *res_cond, + slurmdb_res_rec_t *res) { - return as_mysql_modify_ser_res(mysql_conn, uid, ser_res_cond, ser_res); + return as_mysql_modify_res(mysql_conn, uid, res_cond, res); } extern List acct_storage_p_modify_wckeys(mysql_conn_t *mysql_conn, diff --git a/src/plugins/accounting_storage/mysql/as_mysql_resource.c b/src/plugins/accounting_storage/mysql/as_mysql_resource.c index 3ff4109ce78544ffae1b9f999e8224bfb3fe3b59..7bdcbd6b872ec2467a33764fb109f50e6e7ef6a0 100644 --- a/src/plugins/accounting_storage/mysql/as_mysql_resource.c +++ b/src/plugins/accounting_storage/mysql/as_mysql_resource.c @@ -873,25 +873,27 @@ empty: return clus_res_list; } -extern List as_mysql_modify_clus_res(mysql_conn_t *mysql_conn, uint32_t uid, - slurmdb_clus_res_cond_t *clus_res_cond, - slurmdb_clus_res_rec_t *clus_res) +extern List as_mysql_modify_res(mysql_conn_t *mysql_conn, uint32_t uid, + slurmdb_res_cond_t *res_cond, + slurmdb_res_rec_t *res) { - List clus_res_list = NULL; List ret_list = NULL; - ListIterator itr = NULL; - ListIterator itr1 = NULL; - int rc = SLURM_SUCCESS; - slurmdb_clus_res_rec_t *object = NULL; - char *vals = NULL; + char *vals = NULL, *clus_vals = NULL; time_t now = time(NULL); - char *user_name = NULL; - char *cluster_name = NULL; - char *cond_char = NULL; - char *name = NULL; - int added = 0; + char *user_name = NULL, *tmp = NULL; + char *name_char = NULL, *clus_char = NULL; + char *query = NULL; + char *extra = NULL; + char *clus_extra = NULL; + MYSQL_RES *result = NULL; + MYSQL_ROW row; + int rc = SLURM_SUCCESS; + int query_clusters; + bool send_update = 0; + bool res_added = 0; + int last_res = -1; - if (!clus_res_cond || !clus_res) { + if (!res_cond || !res) { error("we need something to change"); return NULL; } @@ -900,161 +902,177 @@ extern List as_mysql_modify_clus_res(mysql_conn_t *mysql_conn, uint32_t uid, return NULL; } - /* force to only do non-deleted cluster resources */ - clus_res_cond->with_deleted = 0; - clus_res_list = as_mysql_get_clus_res(mysql_conn, uid, - clus_res_cond); - if (clus_res_list - && list_count(clus_res_list)) { - ret_list = list_create(slurm_destroy_char); - itr = list_iterator_create(clus_res_list); - while ((object = list_next(itr))) { - name= xstrdup(object->res_ptr->name); - list_append(ret_list, name); - if (object->res_ptr->id) { - xstrfmtcat(cond_char, " (id=%u)", - object->res_ptr->id); - } - if (clus_res->percent_allowed) { - xstrfmtcat(vals, ", percent_allowed=%u", - clus_res->percent_allowed); - object->percent_allowed = - clus_res->percent_allowed; - } - user_name = uid_to_string((uid_t) uid); - itr1 = list_iterator_create( - clus_res_cond->cluster_list); - while ((cluster_name = list_next(itr1))) { - object->cluster = xstrdup(cluster_name); - rc = modify_common(mysql_conn, - DBD_MODIFY_CLUS_RES, - now, user_name, clus_res_table, - cond_char, vals, cluster_name); - if (rc == SLURM_ERROR) { - error("Couldn't modify cluster " - "resource"); - list_destroy(clus_res_list); - clus_res_list = NULL; - list_destroy(ret_list); - ret_list = NULL; - goto end_it; - } else { - if (addto_update_list( - mysql_conn->update_list, - SLURMDB_MODIFY_CLUS_RES, - object) == SLURM_SUCCESS){ - list_remove(itr); - added++; - } - } - } - list_iterator_destroy(itr1); - } - list_iterator_destroy(itr); - if (!added) { - reset_mysql_conn(mysql_conn); - if (ret_list) { - list_destroy(ret_list); - ret_list = NULL; - } - } - list_destroy(clus_res_list); - clus_res_list = NULL; + _setup_res_limits(res, NULL, &tmp, &vals, 0, &send_update); - } else { + xfree(tmp); + + /* overloaded for easibility */ + if (res->percent_used != (uint16_t)NO_VAL) { + xstrfmtcat(clus_vals, ", percent_allowed=%u", + res->percent_used); + send_update = 1; + } + + if (!vals && !clus_vals) { errno = SLURM_NO_CHANGE_IN_DATA; error("Nothing to change"); return NULL; } -end_it: - xfree(vals); - xfree(cond_char); - xfree(user_name); - return ret_list; -} - -extern List as_mysql_remove_clus_res(mysql_conn_t *mysql_conn, uint32_t uid, - slurmdb_clus_res_cond_t *clus_res_cond) -{ - List clus_res_list = NULL; - List ret_list = NULL; - ListIterator itr = NULL; - int rc = SLURM_SUCCESS; - slurmdb_clus_res_rec_t *object = NULL; - time_t now = time(NULL); - char *user_name = NULL; - char *cond_char = NULL; - char *name = NULL; - int added = 0; + /* force to only do non-deleted resources */ + res_cond->with_deleted = 0; + _setup_res_cond(res_cond, &extra); + query_clusters = _setup_clus_res_cond(res_cond, &clus_extra); + if (query_clusters || send_update) + query = xstrdup_printf("select id, name, server, cluster " + "from %s as t1 left outer join " + "%s as t2 on (res_id = id) %s && %s;", + res_table, clus_res_table, + extra, clus_extra); + else + query = xstrdup_printf("select id, name, server " + "from %s as t1 %s;", + res_table, extra); + xfree(clus_extra); - if (!clus_res_cond || (!clus_res_cond->name_list)) { - error("we need something to change"); + debug3("%d(%s:%d) query\n%s", + mysql_conn->conn, THIS_FILE, __LINE__, query); + if (!(result = mysql_db_query_ret(mysql_conn, query, 0))) { + xfree(extra); + xfree(vals); + xfree(clus_extra); + xfree(clus_vals); + xfree(query); return NULL; } - if (check_connection(mysql_conn) != SLURM_SUCCESS) + if ((query_clusters || send_update) && !mysql_num_rows(result)) { + xfree(query); + mysql_free_result(result); + /* since no clusters are there no reason to send + updates */ + query_clusters = 0; + send_update = 0; + query = xstrdup_printf("select id, name, server " + "from %s as t1 %s;", + res_table, extra); + debug3("%d(%s:%d) query\n%s", + mysql_conn->conn, THIS_FILE, __LINE__, query); + if (!(result = mysql_db_query_ret(mysql_conn, query, 0))) { + xfree(extra); + xfree(vals); + xfree(clus_extra); + xfree(clus_vals); + xfree(query); + return NULL; + } + } + + if (!query_clusters && !vals) { + xfree(clus_vals); + errno = SLURM_NO_CHANGE_IN_DATA; + error("Nothing to change"); return NULL; + } - /* force to only do non-deleted cluster resources */ - clus_res_cond->with_deleted = 0; - clus_res_list = as_mysql_get_clus_res(mysql_conn, uid, - clus_res_cond); - if (clus_res_list - && list_count(clus_res_list)) { - ret_list = list_create(slurm_destroy_char); - itr = list_iterator_create(clus_res_list); - while ((object = list_next(itr))) { - name = xstrdup(object->res_ptr->name); - list_append(ret_list, name); - if (object->res_ptr->id) { - xstrfmtcat(cond_char, " (id=%u)", - object->res_ptr->id); - } - user_name = uid_to_string((uid_t) uid); - rc = remove_common(mysql_conn, - DBD_REMOVE_CLUS_RES, - now, user_name, clus_res_table, - cond_char, NULL, object->cluster, - NULL, NULL); - if (rc == SLURM_ERROR) { - error("Couldn't remove cluster " - "resource"); - list_destroy(clus_res_list); - clus_res_list = NULL; - list_destroy(ret_list); - ret_list = NULL; - goto end_it; - } else { - if (addto_update_list( - mysql_conn->update_list, - SLURMDB_REMOVE_CLUS_RES, - object) == SLURM_SUCCESS) { - list_remove(itr); - added++; - } - } - xfree(cond_char); + xfree(extra); + xfree(clus_extra); + + name_char = NULL; + ret_list = list_create(slurm_destroy_char); + while ((row = mysql_fetch_row(result))) { + char *name = NULL; + int curr_res = atoi(row[0]); + + if (last_res != curr_res) { + res_added = 0; + last_res = curr_res; } - list_iterator_destroy(itr); - if (!added) { - reset_mysql_conn(mysql_conn); - if (ret_list) { - list_destroy(ret_list); - ret_list = NULL; + + if (query_clusters) { + xstrfmtcat(clus_char, + "%s(res_id='%s' && cluster='%s')", + clus_char ? " || " : "", row[0], row[3]); + } else { + if (!res_added) { + name = xstrdup_printf("%s@%s", row[1], row[2]); + list_append(ret_list, name); + res_added = 1; + name = NULL; } + xstrfmtcat(name_char, "%sid='%s'", + name_char ? " || " : "", row[0]); + xstrfmtcat(clus_char, "%sres_id='%s'", + clus_char ? " || " : "", row[0]); } - list_destroy(clus_res_list); - clus_res_list = NULL; + if (row[3] && row[3][0]) { + slurmdb_res_rec_t *res_rec = + xmalloc(sizeof(slurmdb_res_rec_t)); + slurmdb_init_res_rec(res_rec, 0); + res_rec->count = res->count; + res_rec->flags = res->flags; + res_rec->id = curr_res; + res_rec->type = res->type; - } else { + res_rec->clus_res_rec = + xmalloc(sizeof(slurmdb_clus_res_rec_t)); + res_rec->clus_res_rec->cluster = xstrdup(row[3]); + res_rec->clus_res_rec->percent_allowed = + res->percent_used; + if (addto_update_list(mysql_conn->update_list, + SLURMDB_MODIFY_RES, res_rec) + != SLURM_SUCCESS) + slurmdb_destroy_res_rec(res_rec); + + name = xstrdup_printf("Cluster - %s\t- %s@%s", + row[3], row[1], row[2]); + } else if (!res_added) + name = xstrdup_printf("%s@%s", row[1], row[2]); + + if (name) + list_append(ret_list, name); + } + mysql_free_result(result); + + if (!list_count(ret_list)) { errno = SLURM_NO_CHANGE_IN_DATA; - error("Nothing to change"); - return NULL; + debug3("didn't effect anything\n%s", query); + xfree(query); + xfree(vals); + xfree(name_char); + xfree(clus_char); + + return ret_list; } + xfree(query); -end_it: - xfree(cond_char); + user_name = uid_to_string((uid_t) uid); + if (query_clusters) { + modify_common(mysql_conn, DBD_MODIFY_CLUS_RES, + now, user_name, clus_res_table, + clus_char, clus_vals, NULL); + } else { + if (clus_char && clus_vals) { + modify_common(mysql_conn, DBD_MODIFY_CLUS_RES, + now, user_name, clus_res_table, + clus_char, clus_vals, NULL); + } + modify_common(mysql_conn, DBD_MODIFY_RES, + now, user_name, res_table, + name_char, vals, NULL); + } + + xfree(vals); + xfree(clus_vals); + xfree(clus_char); + xfree(name_char); xfree(user_name); + + if (rc == SLURM_ERROR) { + error("Couldn't modify Server Resource"); + FREE_NULL_LIST(ret_list); + errno = SLURM_ERROR; + } + return ret_list; } diff --git a/src/plugins/accounting_storage/mysql/as_mysql_resource.h b/src/plugins/accounting_storage/mysql/as_mysql_resource.h index b54cd0aa0b6962be920174908c1c7bdae2f9daab..07d86309046108d95762aa477a7635a78ec3af87 100644 --- a/src/plugins/accounting_storage/mysql/as_mysql_resource.h +++ b/src/plugins/accounting_storage/mysql/as_mysql_resource.h @@ -44,9 +44,9 @@ extern int as_mysql_add_res(mysql_conn_t *mysql_conn, uint32_t uid, List res_list); -extern List as_mysql_modify_clus_res(mysql_conn_t *mysql_conn, uint32_t uid, - slurmdb_clus_res_cond_t *clus_res_cond, - slurmdb_clus_res_rec_t *clus_res); +extern List as_mysql_modify_res(mysql_conn_t *mysql_conn, uint32_t uid, + slurmdb_res_cond_t *res_cond, + slurmdb_res_rec_t *res); extern List as_mysql_remove_clus_res(mysql_conn_t *mysql_conn, uint32_t uid, slurmdb_clus_res_cond_t *clus_res_cond); @@ -54,10 +54,6 @@ extern List as_mysql_remove_clus_res(mysql_conn_t *mysql_conn, uint32_t uid, extern List as_mysql_get_clus_res(mysql_conn_t *mysql_conn, uid_t uid, slurmdb_clus_res_cond_t *clus_res_cond); -extern List as_mysql_modify_ser_res(mysql_conn_t *mysql_conn, uint32_t uid, - slurmdb_ser_res_cond_t *ser_res_cond, - slurmdb_ser_res_rec_t *ser_res); - extern List as_mysql_remove_ser_res(mysql_conn_t *mysql_conn, uint32_t uid, slurmdb_ser_res_cond_t *ser_res_cond); diff --git a/src/plugins/accounting_storage/none/accounting_storage_none.c b/src/plugins/accounting_storage/none/accounting_storage_none.c index 3ee03a38c3e101bb149fc108548e1f643ccc3416..b04afacdac8def1f328e19fd2ba0cccabd45650e 100644 --- a/src/plugins/accounting_storage/none/accounting_storage_none.c +++ b/src/plugins/accounting_storage/none/accounting_storage_none.c @@ -173,13 +173,6 @@ extern List acct_storage_p_modify_accts(void *db_conn, uint32_t uid, return SLURM_SUCCESS; } -extern List acct_storage_p_modify_clus_res(void *db_conn, uint32_t uid, - slurmdb_clus_res_cond_t *clus_res_cond, - slurmdb_clus_res_rec_t *clus_res) -{ - return SLURM_SUCCESS; -} - extern List acct_storage_p_modify_clusters(void *db_conn, uint32_t uid, slurmdb_cluster_cond_t *cluster_q, slurmdb_cluster_rec_t *cluster) @@ -208,9 +201,9 @@ extern List acct_storage_p_modify_qos(void *db_conn, uint32_t uid, return SLURM_SUCCESS; } -extern List acct_storage_p_modify_ser_res(void *db_conn, uint32_t uid, - slurmdb_ser_res_cond_t *ser_res_cond, - slurmdb_ser_res_rec_t *ser_res) +extern List acct_storage_p_modify_res(void *db_conn, uint32_t uid, + slurmdb_res_cond_t *res_cond, + slurmdb_res_rec_t *res) { return SLURM_SUCCESS; } diff --git a/src/plugins/accounting_storage/slurmdbd/accounting_storage_slurmdbd.c b/src/plugins/accounting_storage/slurmdbd/accounting_storage_slurmdbd.c index 85359f9d6762e0725c1f154261b82c2afe563b62..0b6b6d0305260ed4a18c85333ecdceaf0679b95d 100644 --- a/src/plugins/accounting_storage/slurmdbd/accounting_storage_slurmdbd.c +++ b/src/plugins/accounting_storage/slurmdbd/accounting_storage_slurmdbd.c @@ -773,49 +773,6 @@ extern List acct_storage_p_modify_accts(void *db_conn, uint32_t uid, return ret_list; } -extern List acct_storage_p_modify_clus_res(void *db_conn, uint32_t uid, - slurmdb_clus_res_cond_t *clus_res_cond, - slurmdb_clus_res_rec_t *clus_res) -{ - slurmdbd_msg_t req, resp; - dbd_modify_msg_t get_msg; - dbd_list_msg_t *got_msg; - List ret_list = NULL; - int rc; - - memset(&get_msg, 0, sizeof(dbd_modify_msg_t)); - get_msg.cond = clus_res_cond; - get_msg.rec = clus_res; - - req.msg_type = DBD_MODIFY_CLUS_RES; - req.data = &get_msg; - rc = slurm_send_recv_slurmdbd_msg(SLURM_PROTOCOL_VERSION, &req, &resp); - - if (rc != SLURM_SUCCESS) - error("slurmdbd: DBD_MODIFY_CLUS_RES failure: %m"); - else if (resp.msg_type == DBD_RC) { - dbd_rc_msg_t *msg = resp.data; - if (msg->return_code == SLURM_SUCCESS) { - info("%s", msg->comment); - ret_list = list_create(NULL); - } else { - slurm_seterrno(msg->return_code); - error("%s", msg->comment); - } - slurmdbd_free_rc_msg(msg); - } else if (resp.msg_type != DBD_GOT_LIST) { - error("slurmdbd: response type not DBD_GOT_LIST: %u", - resp.msg_type); - } else { - got_msg = (dbd_list_msg_t *) resp.data; - ret_list = got_msg->my_list; - got_msg->my_list = NULL; - slurmdbd_free_list_msg(got_msg); - } - - return ret_list; -} - extern List acct_storage_p_modify_clusters(void *db_conn, uint32_t uid, slurmdb_cluster_cond_t *cluster_cond, slurmdb_cluster_rec_t *cluster) @@ -993,9 +950,9 @@ extern List acct_storage_p_modify_qos(void *db_conn, uint32_t uid, return ret_list; } -extern List acct_storage_p_modify_ser_res(void *db_conn, uint32_t uid, - slurmdb_ser_res_cond_t *ser_res_cond, - slurmdb_ser_res_rec_t *ser_res) +extern List acct_storage_p_modify_res(void *db_conn, uint32_t uid, + slurmdb_res_cond_t *res_cond, + slurmdb_res_rec_t *res) { slurmdbd_msg_t req, resp; dbd_modify_msg_t get_msg; @@ -1004,15 +961,15 @@ extern List acct_storage_p_modify_ser_res(void *db_conn, uint32_t uid, int rc; memset(&get_msg, 0, sizeof(dbd_modify_msg_t)); - get_msg.cond = ser_res_cond; - get_msg.rec = ser_res; + get_msg.cond = res_cond; + get_msg.rec = res; - req.msg_type = DBD_MODIFY_SER_RES; + req.msg_type = DBD_MODIFY_RES; req.data = &get_msg; rc = slurm_send_recv_slurmdbd_msg(SLURM_PROTOCOL_VERSION, &req, &resp); if (rc != SLURM_SUCCESS) - error("slurmdbd: DBD_MODIFY_SER_RES failure: %m"); + error("slurmdbd: DBD_MODIFY_RES failure: %m"); else if (resp.msg_type == DBD_RC) { dbd_rc_msg_t *msg = resp.data; if (msg->return_code == SLURM_SUCCESS) { diff --git a/src/sacctmgr/resource_functions.c b/src/sacctmgr/resource_functions.c index 8b5a2eb4c2d446a84ce9057c697d69b3d4c54057..4c6be18a7dfdfa1d194eeb2306baac63f359c621 100644 --- a/src/sacctmgr/resource_functions.c +++ b/src/sacctmgr/resource_functions.c @@ -946,60 +946,61 @@ end_it: return rc; } -extern int sacctmgr_modify_ser_res(int argc, char *argv[]) +extern int sacctmgr_modify_res(int argc, char *argv[]) { int rc = SLURM_SUCCESS; - slurmdb_ser_res_cond_t *ser_res_cond = - xmalloc(sizeof(slurmdb_ser_res_cond_t)); - slurmdb_ser_res_rec_t *ser_res = - xmalloc(sizeof(slurmdb_ser_res_rec_t)); + slurmdb_res_cond_t *res_cond = + xmalloc(sizeof(slurmdb_res_cond_t)); + slurmdb_res_rec_t *res = + xmalloc(sizeof(slurmdb_res_rec_t)); int i=0; int cond_set = 0, rec_set = 0, set = 0; List ret_list = NULL; - slurmdb_init_ser_res_rec(ser_res, 0); + + slurmdb_init_res_cond(res_cond, 0); + slurmdb_init_res_rec(res, 0); for (i=0; i<argc; i++) { int command_len = strlen(argv[i]); - if (!strncasecmp (argv[i], "Where", MAX(command_len, 5))) { + if (!strncasecmp(argv[i], "Where", MAX(command_len, 5))) { i++; - cond_set += _set_ser_res_cond(&i, argc, argv, - ser_res_cond, NULL); + cond_set += _set_res_cond(&i, argc, argv, + res_cond, NULL); - } else if (!strncasecmp (argv[i], "Set", MAX(command_len, 3))) { + } else if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) { i++; - rec_set += _set_ser_res_rec(&i, argc, argv, NULL, - ser_res); + rec_set += _set_res_rec(&i, argc, argv, + NULL, NULL, res); } else { - cond_set += _set_ser_res_cond(&i, argc, argv, - ser_res_cond, NULL); + cond_set += _set_res_cond(&i, argc, argv, + res_cond, NULL); } } if (exit_code) { - slurmdb_destroy_ser_res_cond(ser_res_cond); - slurmdb_destroy_ser_res_rec(ser_res); + slurmdb_destroy_res_cond(res_cond); + slurmdb_destroy_res_rec(res); return SLURM_ERROR; } else if (!rec_set) { exit_code=1; fprintf(stderr, " You didn't give me anything to set\n"); - slurmdb_destroy_ser_res_cond(ser_res_cond); - slurmdb_destroy_ser_res_rec(ser_res); + slurmdb_destroy_res_cond(res_cond); + slurmdb_destroy_res_rec(res); return SLURM_ERROR; } else if (!cond_set) { if (!commit_check("You didn't set any conditions with " "'WHERE'.\n" "Are you sure you want to continue?")) { printf("Aborted\n"); - slurmdb_destroy_ser_res_cond(ser_res_cond); - slurmdb_destroy_ser_res_rec(ser_res); + slurmdb_destroy_res_cond(res_cond); + slurmdb_destroy_res_rec(res); return SLURM_SUCCESS; } } notice_thread_init(); - ret_list = acct_storage_g_modify_ser_res(db_conn, my_uid, - ser_res_cond, ser_res); + ret_list = acct_storage_g_modify_res(db_conn, my_uid, res_cond, res); notice_thread_fini(); if (ret_list && list_count(ret_list)) { char *object = NULL; @@ -1028,10 +1029,11 @@ extern int sacctmgr_modify_ser_res(int argc, char *argv[]) acct_storage_g_commit(db_conn, 0); } } - if (ret_list && list_count(ret_list)) - list_destroy(ret_list); - slurmdb_destroy_ser_res_cond(ser_res_cond); - slurmdb_destroy_ser_res_rec(ser_res); + + FREE_NULL_LIST(ret_list); + + slurmdb_destroy_res_cond(res_cond); + slurmdb_destroy_res_rec(res); return rc; } diff --git a/src/sacctmgr/sacctmgr.c b/src/sacctmgr/sacctmgr.c index bcc2660c47fb9d47de6096d00322611fe3cfd699..e94184f43320ee75e955e3dd60f11fbb32f23888 100644 --- a/src/sacctmgr/sacctmgr.c +++ b/src/sacctmgr/sacctmgr.c @@ -652,10 +652,10 @@ static void _show_it (int argc, char *argv[]) error_code = sacctmgr_list_problem((argc - 1), &argv[1]); } else if (strncasecmp (argv[0], "QOS", MAX(command_len, 1)) == 0) { error_code = sacctmgr_list_qos((argc - 1), &argv[1]); - } else if (strncasecmp (argv[0], "Ser_Res", MAX(command_len, 1)) == 0) { - error_code = sacctmgr_list_ser_res((argc - 1), &argv[1]); - } else if (!strncasecmp (argv[0], "Transactions", MAX(command_len, 1)) - || !strncasecmp (argv[0], "Txn", MAX(command_len, 1))) { + } else if (!strncasecmp(argv[0], "Resource", MAX(command_len, 1))) { + error_code = sacctmgr_list_res((argc - 1), &argv[1]); + } else if (!strncasecmp(argv[0], "Transactions", MAX(command_len, 1)) + || !strncasecmp(argv[0], "Txn", MAX(command_len, 1))) { error_code = sacctmgr_list_txn((argc - 1), &argv[1]); } else if (strncasecmp (argv[0], "Users", MAX(command_len, 1)) == 0) { error_code = sacctmgr_list_user((argc - 1), &argv[1]); @@ -705,27 +705,23 @@ static void _modify_it (int argc, char *argv[]) if (strncasecmp (argv[0], "Accounts", MAX(command_len, 1)) == 0 || !strncasecmp (argv[0], "Acct", MAX(command_len, 4))) { error_code = sacctmgr_modify_account((argc - 1), &argv[1]); - } else if (strncasecmp (argv[0], "Clus_Res", MAX(command_len, 5)) == - 0) { - error_code = sacctmgr_modify_clus_res((argc - 1), &argv[1]); - } else if (strncasecmp (argv[0], "Clusters", MAX(command_len, 5)) == 0) { error_code = sacctmgr_modify_cluster((argc - 1), &argv[1]); } else if (strncasecmp (argv[0], "Job", MAX(command_len, 1)) == 0) { error_code = sacctmgr_modify_job((argc - 1), &argv[1]); } else if (strncasecmp (argv[0], "QOSs", MAX(command_len, 1)) == 0) { error_code = sacctmgr_modify_qos((argc - 1), &argv[1]); - } else if (strncasecmp (argv[0], "Ser_Res", MAX(command_len, 1)) == 0) { - error_code = sacctmgr_modify_ser_res((argc - 1), &argv[1]); - } else if (strncasecmp (argv[0], "Users", MAX(command_len, 1)) == 0) { + } else if (strncasecmp(argv[0], "Resource", MAX(command_len, 1)) == 0) { + error_code = sacctmgr_modify_res((argc - 1), &argv[1]); + } else if (strncasecmp(argv[0], "Users", MAX(command_len, 1)) == 0) { error_code = sacctmgr_modify_user((argc - 1), &argv[1]); } else { helpme: exit_code = 1; fprintf(stderr, "No valid entity in modify command\n"); fprintf(stderr, "Input line must include "); - fprintf(stderr, "\"Account\", \"Clus_Res\", \"Cluster\", " - "\"Job\", \"QOS\", \"Ser_Res\" or \"User\"\n"); + fprintf(stderr, "\"Account\", \"Cluster\", " + "\"Job\", \"QOS\", \"Resource\" or \"User\"\n"); } if (error_code != SLURM_SUCCESS) { diff --git a/src/sacctmgr/sacctmgr.h b/src/sacctmgr/sacctmgr.h index d569605e8aef7b935977f9c16bbb7d0e7f2d7f4c..dfcd32a43bb57dbdc6de4bc97370e3f878e3d4ad 100644 --- a/src/sacctmgr/sacctmgr.h +++ b/src/sacctmgr/sacctmgr.h @@ -243,11 +243,10 @@ extern int sacctmgr_list_wckey(int argc, char *argv[]); extern int sacctmgr_modify_association(int argc, char *argv[]); extern int sacctmgr_modify_user(int argc, char *argv[]); extern int sacctmgr_modify_account(int argc, char *argv[]); -extern int sacctmgr_modify_clus_res(int argc, char *argv[]); extern int sacctmgr_modify_cluster(int argc, char *argv[]); extern int sacctmgr_modify_job(int argc, char *argv[]); extern int sacctmgr_modify_qos(int argc, char *argv[]); -extern int sacctmgr_modify_ser_res(int argc, char *argv[]); +extern int sacctmgr_modify_res(int argc, char *argv[]); extern int sacctmgr_delete_association(int argc, char *argv[]); extern int sacctmgr_delete_user(int argc, char *argv[]); diff --git a/src/slurmdbd/proc_req.c b/src/slurmdbd/proc_req.c index e73e7d93f690c221c83b7f48c856612558276ae0..36c01c375fe345624866aa3437d1c29d889162fc 100644 --- a/src/slurmdbd/proc_req.c +++ b/src/slurmdbd/proc_req.c @@ -124,15 +124,13 @@ static int _modify_accounts(slurmdbd_conn_t *slurmdbd_conn, Buf in_buffer, Buf *out_buffer, uint32_t *uid); static int _modify_assocs(slurmdbd_conn_t *slurmdbd_conn, Buf in_buffer, Buf *out_buffer, uint32_t *uid); -static int _modify_clus_res(slurmdbd_conn_t *slurmdbd_conn, - Buf in_buffer, Buf *out_buffer, uint32_t *uid); static int _modify_clusters(slurmdbd_conn_t *slurmdbd_conn, Buf in_buffer, Buf *out_buffer, uint32_t *uid); static int _modify_job(slurmdbd_conn_t *slurmdbd_conn, Buf in_buffer, Buf *out_buffer, uint32_t *uid); static int _modify_qos(slurmdbd_conn_t *slurmdbd_conn, Buf in_buffer, Buf *out_buffer, uint32_t *uid); -static int _modify_ser_res(slurmdbd_conn_t *slurmdbd_conn, +static int _modify_res(slurmdbd_conn_t *slurmdbd_conn, Buf in_buffer, Buf *out_buffer, uint32_t *uid); static int _modify_users(slurmdbd_conn_t *slurmdbd_conn, Buf in_buffer, Buf *out_buffer, uint32_t *uid); @@ -368,10 +366,6 @@ proc_req(slurmdbd_conn_t *slurmdbd_conn, rc = _modify_assocs(slurmdbd_conn, in_buffer, out_buffer, uid); break; - case DBD_MODIFY_CLUS_RES: - rc = _modify_clus_res(slurmdbd_conn, - in_buffer, out_buffer, uid); - break; case DBD_MODIFY_CLUSTERS: rc = _modify_clusters(slurmdbd_conn, in_buffer, out_buffer, uid); @@ -384,8 +378,8 @@ proc_req(slurmdbd_conn_t *slurmdbd_conn, rc = _modify_qos(slurmdbd_conn, in_buffer, out_buffer, uid); break; - case DBD_MODIFY_SER_RES: - rc = _modify_ser_res(slurmdbd_conn, + case DBD_MODIFY_RES: + rc = _modify_res(slurmdbd_conn, in_buffer, out_buffer, uid); break; case DBD_MODIFY_USERS: @@ -2298,76 +2292,6 @@ static int _modify_assocs(slurmdbd_conn_t *slurmdbd_conn, return rc; } -static int _modify_clus_res(slurmdbd_conn_t *slurmdbd_conn, - Buf in_buffer, Buf *out_buffer, uint32_t *uid) -{ - dbd_list_msg_t list_msg; - int rc = SLURM_SUCCESS; - dbd_modify_msg_t *get_msg = NULL; - char *comment = NULL; - - debug2("DBD_MODIFY_CLUS_RES: called"); - - if ((*uid != slurmdbd_conf->slurm_user_id && *uid != 0) - && assoc_mgr_get_admin_level(slurmdbd_conn->db_conn, *uid) - < SLURMDB_ADMIN_SUPER_USER) { - comment = "Your user doesn't have privilege to preform this " - "action"; - error("CONN:%u %s", slurmdbd_conn->newsockfd, comment); - *out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, - ESLURM_ACCESS_DENIED, - comment, DBD_MODIFY_CLUS_RES); - - return ESLURM_ACCESS_DENIED; - } - if (slurmdbd_unpack_modify_msg(&get_msg, slurmdbd_conn->rpc_version, - DBD_MODIFY_CLUS_RES, - in_buffer) != SLURM_SUCCESS) { - comment = "Failed to unpack DBD_MODIFY_CLUS_RES message"; - error("CONN:%u %s", slurmdbd_conn->newsockfd, comment); - *out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, - SLURM_ERROR, - comment, DBD_MODIFY_CLUS_RES); - return SLURM_ERROR; - } - if (!(list_msg.my_list = acct_storage_g_modify_clus_res( - slurmdbd_conn->db_conn, *uid, get_msg->cond, - get_msg->rec))) { - if (errno == ESLURM_ACCESS_DENIED) { - comment = "Your user doesn't have privilege to preform " - "this action"; - rc = ESLURM_ACCESS_DENIED; - } else if (errno == SLURM_ERROR) { - comment = "Something was wrong with your query"; - rc = SLURM_ERROR; - } else if (errno == SLURM_NO_CHANGE_IN_DATA) { - comment = "Request didn't affect anything"; - rc = SLURM_SUCCESS; - } else if (errno == ESLURM_DB_CONNECTION) { - comment = slurm_strerror(errno); - rc = errno; - } else { - rc = errno; - if (!(comment = slurm_strerror(errno))) - comment = "Unknown issue"; - } - error("CONN:%u %s", slurmdbd_conn->newsockfd, comment); - slurmdbd_free_modify_msg(get_msg, DBD_MODIFY_CLUS_RES); - *out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, - rc, comment, DBD_MODIFY_CLUS_RES); - return rc; - } - - slurmdbd_free_modify_msg(get_msg, DBD_MODIFY_CLUS_RES); - *out_buffer = init_buf(1024); - pack16((uint16_t) DBD_GOT_LIST, *out_buffer); - slurmdbd_pack_list_msg(&list_msg, slurmdbd_conn->rpc_version, - DBD_GOT_LIST, *out_buffer); - if (list_msg.my_list) - list_destroy(list_msg.my_list); - return rc; -} - static int _modify_clusters(slurmdbd_conn_t *slurmdbd_conn, Buf in_buffer, Buf *out_buffer, uint32_t *uid) { @@ -2572,7 +2496,7 @@ static int _modify_qos(slurmdbd_conn_t *slurmdbd_conn, return rc; } -static int _modify_ser_res(slurmdbd_conn_t *slurmdbd_conn, +static int _modify_res(slurmdbd_conn_t *slurmdbd_conn, Buf in_buffer, Buf *out_buffer, uint32_t *uid) { dbd_list_msg_t list_msg; @@ -2580,7 +2504,7 @@ static int _modify_ser_res(slurmdbd_conn_t *slurmdbd_conn, dbd_modify_msg_t *get_msg = NULL; char *comment = NULL; - debug2("DBD_MODIFY_SER_RES: called"); + debug2("DBD_MODIFY_RES: called"); if ((*uid != slurmdbd_conf->slurm_user_id && *uid != 0) && assoc_mgr_get_admin_level(slurmdbd_conn->db_conn, *uid) @@ -2590,21 +2514,21 @@ static int _modify_ser_res(slurmdbd_conn_t *slurmdbd_conn, error("CONN:%u %s", slurmdbd_conn->newsockfd, comment); *out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, ESLURM_ACCESS_DENIED, - comment, DBD_MODIFY_SER_RES); + comment, DBD_MODIFY_RES); return ESLURM_ACCESS_DENIED; } if (slurmdbd_unpack_modify_msg(&get_msg, slurmdbd_conn->rpc_version, - DBD_MODIFY_SER_RES, + DBD_MODIFY_RES, in_buffer) != SLURM_SUCCESS) { - comment = "Failed to unpack DBD_MODIFY_SER_RES message"; + comment = "Failed to unpack DBD_MODIFY_RES message"; error("CONN:%u %s", slurmdbd_conn->newsockfd, comment); *out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, SLURM_ERROR, - comment, DBD_MODIFY_SER_RES); + comment, DBD_MODIFY_RES); return SLURM_ERROR; } - if (!(list_msg.my_list = acct_storage_g_modify_ser_res( + if (!(list_msg.my_list = acct_storage_g_modify_res( slurmdbd_conn->db_conn, *uid, get_msg->cond, get_msg->rec))) { if (errno == ESLURM_ACCESS_DENIED) { @@ -2626,13 +2550,13 @@ static int _modify_ser_res(slurmdbd_conn_t *slurmdbd_conn, comment = "Unknown issue"; } error("CONN:%u %s", slurmdbd_conn->newsockfd, comment); - slurmdbd_free_modify_msg(get_msg, DBD_MODIFY_SER_RES); + slurmdbd_free_modify_msg(get_msg, DBD_MODIFY_RES); *out_buffer = make_dbd_rc_msg(slurmdbd_conn->rpc_version, - rc, comment, DBD_MODIFY_SER_RES); + rc, comment, DBD_MODIFY_RES); return rc; } - slurmdbd_free_modify_msg(get_msg, DBD_MODIFY_SER_RES); + slurmdbd_free_modify_msg(get_msg, DBD_MODIFY_RES); *out_buffer = init_buf(1024); pack16((uint16_t) DBD_GOT_LIST, *out_buffer); slurmdbd_pack_list_msg(&list_msg, slurmdbd_conn->rpc_version,