extern int sacctmgr_modify_res(int argc, char *argv[]) { int rc = SLURM_SUCCESS; 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_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))) { i++; cond_set += _set_res_cond(&i, argc, argv, res_cond, NULL); } else if (!strncasecmp(argv[i], "Set", MAX(command_len, 3))) { i++; rec_set += _set_res_rec(&i, argc, argv, NULL, NULL, res); } else { cond_set += _set_res_cond(&i, argc, argv, res_cond, NULL); } } if (exit_code) { 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_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_res_cond(res_cond); slurmdb_destroy_res_rec(res); return SLURM_SUCCESS; } } notice_thread_init(); 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; ListIterator itr = list_iterator_create(ret_list); printf(" Modified server resource ...\n"); while ((object = list_next(itr))) { printf(" %s\n", object); } list_iterator_destroy(itr); set = 1; } else if (ret_list) { printf(" Nothing modified\n"); rc = SLURM_ERROR; } else if (errno == ESLURM_OVER_ALLOCATE) { exit_code=1; rc = SLURM_ERROR; fprintf(stderr, " If change was accepted it would look like this...\n"); _print_overcommit(res, res_cond); } else { exit_code=1; fprintf(stderr, " Error with request: %s\n", slurm_strerror(errno)); rc = SLURM_ERROR; } if (set) { if (commit_check("Would you like to commit changes?")){ acct_storage_g_commit(db_conn, 1); } else { printf(" Changes Discarded\n"); acct_storage_g_commit(db_conn, 0); } } FREE_NULL_LIST(ret_list); slurmdb_destroy_res_cond(res_cond); slurmdb_destroy_res_rec(res); return rc; }
/* * 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_res_modify(void *db_conn, slurmdb_res_cond_t *res_cond, slurmdb_res_rec_t *res) { return acct_storage_g_modify_res(db_conn, getuid(), res_cond, res); }