From 45e31da10b21e0840f0e90ac06057ed619fb11b8 Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Sun, 18 Aug 2024 16:54:53 +0200 Subject: [PATCH] mxqkill: Factor put some common code --- mxqkill.c | 83 +++++++++++++++++++++---------------------------------- 1 file changed, 32 insertions(+), 51 deletions(-) diff --git a/mxqkill.c b/mxqkill.c index 87225f4..2615866 100644 --- a/mxqkill.c +++ b/mxqkill.c @@ -81,14 +81,31 @@ static void print_usage(void) ); } +static struct mx_mysql_stmt *mysql_prepare_or_die(struct mx_mysql *mysql, char *sql) { + struct mx_mysql_stmt *stmt = mx_mysql_statement_prepare(mysql, sql); + if (stmt == NULL) + mx_die("mx_mysql_statement_prepare(): %s\n", mx_mysql_error()); + return stmt; +} + +static unsigned long long int mysql_execute_or_die(struct mx_mysql_stmt *stmt) { + unsigned long long num_rows; + if (mx_mysql_statement_execute(stmt, &num_rows) < 0) + mx_die("mx_mysql_statement_execute(): %s\n", mx_mysql_error()); + mx_mysql_statement_close(&stmt); + return num_rows; +} + +static unsigned long long int mysql_prepare_and_execute_or_die(struct mx_mysql *mysql, char *sql) { + return mysql_execute_or_die(mysql_prepare_or_die(mysql, sql)); +} + 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, + struct mx_mysql_stmt *stmt = mysql_prepare_or_die(mysql, "SELECT user_uid FROM mxq_job, mxq_group" " WHERE mxq_job.group_id = mxq_group.group_id" " AND job_id = ?" ); - if (!stmt) - mx_die("mx_mysql_statement_prepare(): %s\n", mx_mysql_error()); mx_mysql_statement_param_bind(stmt, 0, uint64, &job_id); @@ -114,23 +131,16 @@ static void verify_job_owner(struct mx_mysql *mysql, uint64_t job_id, uint64_t u } static void set_job_cancelled(struct mx_mysql *mysql, uint64_t job_id) { - struct mx_mysql_stmt *stmt = mx_mysql_statement_prepare(mysql, + struct mx_mysql_stmt *stmt = mysql_prepare_or_die(mysql, "UPDATE mxq_job SET job_cancelled = TRUE" " WHERE job_id = ?" ); - if (!stmt) - mx_die("mx_mysql_statement_prepare(): %s\n", mx_mysql_error()); mx_mysql_statement_param_bind(stmt, 0, uint64, &job_id); - unsigned long long num_rows; - int res = mx_mysql_statement_execute(stmt, &num_rows); - if (res < 0) - mx_die("mx_mysql_statement_execute(): %s\n", mx_mysql_error()); + unsigned long long num_rows = mysql_execute_or_die(stmt); if (num_rows == 0) mx_die("no such job_id %lu\n", job_id); - - mx_mysql_statement_close(&stmt); } static void cancel_job(struct mx_mysql *mysql, uint64_t job_id, uint64_t user_uid) { @@ -140,12 +150,10 @@ static void cancel_job(struct mx_mysql *mysql, uint64_t job_id, uint64_t user_ui } static void verify_group_owner(struct mx_mysql *mysql, uint64_t group_id, uint64_t user_uid) { - struct mx_mysql_stmt *stmt = mx_mysql_statement_prepare(mysql, + struct mx_mysql_stmt *stmt = mysql_prepare_or_die(mysql, "SELECT user_uid FROM mxq_group" " WHERE group_id = ?" ); - if (!stmt) - mx_die("mx_mysql_statement_prepare(): %s\n", mx_mysql_error()); mx_mysql_statement_param_bind(stmt, 0, uint64, &group_id); @@ -171,43 +179,30 @@ static void verify_group_owner(struct mx_mysql *mysql, uint64_t group_id, uint64 } static void set_group_cancelled(struct mx_mysql *mysql, uint64_t group_id) { - struct mx_mysql_stmt *stmt = mx_mysql_statement_prepare(mysql, + struct mx_mysql_stmt *stmt = mysql_prepare_or_die(mysql, "UPDATE mxq_group SET group_status = " status_str(MXQ_GROUP_STATUS_CANCELLED) " WHERE group_id = ?" ); - if (!stmt) - mx_die("mx_mysql_statement_prepare(): %s\n", mx_mysql_error()); mx_mysql_statement_param_bind(stmt, 0, uint64, &group_id); - unsigned long long num_rows; - int res = mx_mysql_statement_execute(stmt, &num_rows); - if (res < 0) - mx_die("mx_mysql_statement_execute(): %s\n", mx_mysql_error()); + unsigned long long num_rows = mysql_execute_or_die(stmt); if (num_rows == 0) mx_die("no such group_id %lu\n", group_id); - - mx_mysql_statement_close(&stmt); } static void cancel_pending_jobs(struct mx_mysql *mysql, uint64_t group_id) { - struct mx_mysql_stmt *stmt = mx_mysql_statement_prepare(mysql, + struct mx_mysql_stmt *stmt = mysql_prepare_or_die(mysql, "UPDATE mxq_job SET job_cancelled = TRUE" " WHERE group_id = ?" " AND job_status = " status_str(MXQ_JOB_STATUS_INQ) ); - if (!stmt) - mx_die("mx_mysql_statement_prepare(): %s\n", mx_mysql_error()); mx_mysql_statement_param_bind(stmt, 0, uint64, &group_id); - unsigned long long num_rows; - int res = mx_mysql_statement_execute(stmt, &num_rows); - if (res < 0) - mx_die("mx_mysql_statement_execute(): %s\n", mx_mysql_error()); + unsigned long long num_rows = mysql_execute_or_die(stmt); if (num_rows) mx_log_notice("cancelled %llu jobs in group with group_id=%lu", num_rows, group_id); - mx_mysql_statement_close(&stmt); } static void cancel_group(struct mx_mysql *mysql, uint64_t group_id, uint64_t user_uid) { @@ -229,16 +224,11 @@ static void cancel_all_jobs(struct mx_mysql *mysql, uint64_t user_uid) { * statement. mxq_group is implicitly updated by the triggers when we * update mxq_job. */ - stmt = mx_mysql_statement_prepare(mysql, + mysql_prepare_and_execute_or_die(mysql, "CREATE TEMPORARY TABLE j (job_id INT8 UNSIGNED NOT NULL PRIMARY KEY)" ); - if (!stmt) - mx_die("mx_mysql_statement_prepare(): %s\n", mx_mysql_error()); - if (mx_mysql_statement_execute(stmt, NULL) < 0) - mx_die("mx_mysql_statement_execute(): %s\n", mx_mysql_error()); - mx_mysql_statement_close(&stmt); - stmt = mx_mysql_statement_prepare(mysql, + stmt = mysql_prepare_or_die(mysql, "INSERT INTO j(job_id)" " SELECT mxq_job.job_id FROM mxq_job,mxq_group" " WHERE mxq_job.group_id = mxq_group.group_id" @@ -250,17 +240,14 @@ static void cancel_all_jobs(struct mx_mysql *mysql, uint64_t user_uid) { status_str(MXQ_JOB_STATUS_RUNNING) " )" ); - if (!stmt) - mx_die("mx_mysql_statement_prepare(): %s\n", mx_mysql_error()); mx_mysql_statement_param_bind(stmt, 0, uint64, &user_uid); - if (mx_mysql_statement_execute(stmt, &num_rows) < 0) - mx_die("mx_mysql_statement_execute(): %s\n", mx_mysql_error()); - mx_mysql_statement_close(&stmt); + num_rows = mysql_execute_or_die(stmt); if (num_rows == 0) { mx_log_notice("no running or pending jobs"); return; } - stmt = mx_mysql_statement_prepare(mysql, + + num_rows = mysql_prepare_and_execute_or_die(mysql, "UPDATE mxq_job" " SET job_cancelled=TRUE" " WHERE job_id in (SELECT * from j)" @@ -271,12 +258,6 @@ static void cancel_all_jobs(struct mx_mysql *mysql, uint64_t user_uid) { status_str(MXQ_JOB_STATUS_RUNNING) " )" ); - if (!stmt) - mx_die("mx_mysql_statement_prepare(): %s\n", mx_mysql_error()); - if (mx_mysql_statement_execute(stmt, &num_rows) < 0) - mx_die("mx_mysql_statement_execute(): %s\n", mx_mysql_error()); - mx_mysql_statement_close(&stmt); - if (num_rows == 0) mx_log_notice("no running or pending jobs"); else