Skip to content

Commit

Permalink
mxqkill: Use cancel_group
Browse files Browse the repository at this point in the history
Use cancel_group() and remove old code.
  • Loading branch information
donald committed Aug 22, 2024
1 parent b803174 commit 4319485
Showing 1 changed file with 4 additions and 122 deletions.
126 changes: 4 additions & 122 deletions mxqkill.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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);
Expand All @@ -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;
Expand Down Expand Up @@ -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.");
Expand Down

0 comments on commit 4319485

Please sign in to comment.