diff --git a/mxqkill.c b/mxqkill.c index 1dc48d5..910afcb 100644 --- a/mxqkill.c +++ b/mxqkill.c @@ -78,77 +78,6 @@ static void print_usage(void) ); } -static int update_group_status_cancelled(struct mx_mysql *mysql, struct mxq_group *g) -{ - struct mx_mysql_stmt *stmt = NULL; - unsigned long long num_rows = 0; - int res; - - assert(g->group_id); - - stmt = mx_mysql_statement_prepare(mysql, - "UPDATE mxq_group SET" - " group_status = " status_str(MXQ_GROUP_STATUS_CANCELLED) - " WHERE group_id = ?" - " AND group_status = " status_str(MXQ_GROUP_STATUS_OK) - " AND user_uid = ?" - " AND group_jobs-group_jobs_finished-group_jobs_failed-group_jobs_cancelled-group_jobs_unknown > 0" - ); - if (!stmt) { - mx_log_err("mx_mysql_statement_prepare(): %s", mx_mysql_error()); - return -(errno=EIO); - } - - mx_mysql_statement_param_bind(stmt, 0, uint64, &(g->group_id)); - mx_mysql_statement_param_bind(stmt, 1, uint32, &(g->user_uid)); - - res = mx_mysql_statement_execute(stmt, &num_rows); - - if (res < 0) - mx_log_err("mx_mysql_statement_execute(): %s", mx_mysql_error()); - - mx_mysql_statement_close(&stmt); - - if (res < 0) - return -(errno=-res); - - assert(num_rows <= 1); - return (int)num_rows; -} - -static int update_job_status_cancelled_by_group(struct mx_mysql *mysql, struct mxq_group *g) -{ - struct mx_mysql_stmt *stmt = NULL; - unsigned long long num_rows = 0; - int res; - - assert(g->group_id); - - stmt = mx_mysql_statement_prepare(mysql, - "UPDATE mxq_job SET job_cancelled = TRUE" - " WHERE group_id = ?" - " AND job_status = " status_str(MXQ_JOB_STATUS_INQ) - ); - if (!stmt) { - mx_log_err("mx_mysql_statement_prepare(): %s", mx_mysql_error()); - return -(errno=EIO); - } - - mx_mysql_statement_param_bind(stmt, 0, uint64, &(g->group_id)); - - res = mx_mysql_statement_execute(stmt, &num_rows); - - if (res < 0) - mx_log_err("mx_mysql_statement_execute(): %s", mx_mysql_error()); - - mx_mysql_statement_close(&stmt); - - if (res < 0) - return -(errno=-res); - - return (int)num_rows; -} - static void verify_job_owner(struct mx_mysql *mysql, uint64_t job_id, uint64_t user_uid) { struct mx_mysql_stmt *stmt = mx_mysql_statement_prepare(mysql, "SELECT user_uid FROM mxq_job, mxq_group" @@ -278,7 +207,7 @@ static void cancel_pending_jobs(struct mx_mysql *mysql, uint64_t group_id) { mx_mysql_statement_close(&stmt); } -void cancel_group(struct mx_mysql *mysql, uint64_t group_id, uint64_t user_uid) { +static void cancel_group(struct mx_mysql *mysql, uint64_t group_id, uint64_t user_uid) { verify_group_owner(mysql, group_id, user_uid); set_group_cancelled(mysql, group_id); @@ -290,7 +219,6 @@ void cancel_group(struct mx_mysql *mysql, uint64_t group_id, uint64_t user_uid) int main(int argc, char *argv[]) { struct mx_mysql *mysql = NULL; - struct mxq_group group; uid_t ruid, euid, suid; struct passwd *passwd = NULL; @@ -468,57 +396,11 @@ int main(int argc, char *argv[]) mx_log_info("MySQL: Connection to database established."); - if (arg_job_id) { + if (arg_job_id) cancel_job(mysql, arg_job_id, passwd->pw_uid); - mx_mysql_finish(&mysql); - return 0; - } - - if (arg_group_id) { - memset(&group, 0, sizeof(group)); - group.group_id = arg_group_id; - group.user_uid = passwd->pw_uid; - group.user_name = passwd->pw_name; - - res = update_group_status_cancelled(mysql, &group); - - if (res <= 0) { - mx_mysql_finish(&mysql); - mx_log_info("MySQL: Connection to database closed."); - - if (res == 0) - mx_log_warning("no active group with group_id=%lu found for user=%s(%d)", - group.group_id, group.user_name, group.user_uid); - else - mx_log_err("cancelling group failed"); - return 1; - } - - assert(res == 1); - - res = update_job_status_cancelled_by_group(mysql, &group); - - mx_mysql_finish(&mysql); - mx_log_info("MySQL: Connection to database closed."); - - if (res == -1 && errno == ENOENT) - res=0; - - if (res >= 0) { - if (res) - mx_log_notice("cancelled %d jobs in group with group_id=%lu", - res, group.group_id); - mx_log_notice("marked all running jobs in group with group_id=%lu to be killed by executing servers.", - group.group_id); - mx_log_notice("deactivated group with group_id=%lu", - group.group_id); - return 0; - } else { - mx_log_err("cancelling jobs failed"); - return 1; - } - } + if (arg_group_id) + cancel_group(mysql, arg_group_id, passwd->pw_uid); mx_mysql_finish(&mysql); mx_log_info("MySQL: Connection to database closed.");