From 5cff2e344033300f141e694ddfd0ba336c1c0997 Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Tue, 5 Jan 2016 15:33:58 +0100 Subject: [PATCH] mxq_job: store host_slots when we set status to ASSIGNED When a job transitions from ASSIGNED to LOADED, the sql trigger procedure needs host_slots to maintain the statistics in mxq_daemon --- mxq_job.c | 11 +++++++---- mxq_job.h | 4 ++-- mxqd.c | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/mxq_job.c b/mxq_job.c index 3ec96db6..eea849e9 100644 --- a/mxq_job.c +++ b/mxq_job.c @@ -291,7 +291,7 @@ int mxq_load_jobs_in_group_with_status(struct mx_mysql *mysql, struct mxq_job ** return res; } -int mxq_assign_job_from_group_to_daemon(struct mx_mysql *mysql, uint64_t group_id, struct mxq_daemon *daemon) +int mxq_assign_job_from_group_to_daemon(struct mx_mysql *mysql, uint64_t group_id, struct mxq_daemon *daemon, unsigned long slots_per_job) { struct mx_mysql_bind param = {0}; int res; @@ -311,6 +311,7 @@ int mxq_assign_job_from_group_to_daemon(struct mx_mysql *mysql, uint64_t group_i " SET" " daemon_id = ?," " host_hostname = ?," + " host_slots = ?, " " server_id = ?," " job_status = " status_str(MXQ_JOB_STATUS_ASSIGNED) " WHERE group_id = ?" @@ -324,13 +325,14 @@ int mxq_assign_job_from_group_to_daemon(struct mx_mysql *mysql, uint64_t group_i " job_id" " LIMIT 1"; - res = mx_mysql_bind_init_param(¶m, 4); + res = mx_mysql_bind_init_param(¶m, 5); assert(res == 0); idx = 0; res = 0; res += mx_mysql_bind_var(¶m, idx++, uint32, &daemon->daemon_id); res += mx_mysql_bind_var(¶m, idx++, string, &daemon->hostname); + res += mx_mysql_bind_var(¶m, idx++, uint64, &slots_per_job); res += mx_mysql_bind_var(¶m, idx++, string, &daemon->daemon_name); res += mx_mysql_bind_var(¶m, idx++, uint64, &group_id); assert(res == 0); @@ -678,7 +680,8 @@ int mxq_load_job_from_group_assigned_to_daemon(struct mx_mysql *mysql, struct mx return res; } -int mxq_load_job_from_group_for_daemon(struct mx_mysql *mysql, struct mxq_job *job, uint64_t group_id, struct mxq_daemon *daemon) +int mxq_load_job_from_group_for_daemon(struct mx_mysql *mysql, struct mxq_job *job, uint64_t group_id, struct mxq_daemon *daemon, + unsigned long slots_per_job) { int res; struct mxq_job *jobs_tmp = NULL; @@ -700,7 +703,7 @@ int mxq_load_job_from_group_for_daemon(struct mx_mysql *mysql, struct mxq_job *j break; } - res = mxq_assign_job_from_group_to_daemon(mysql, group_id, daemon); + res = mxq_assign_job_from_group_to_daemon(mysql, group_id, daemon, slots_per_job); if (res < 0) { mx_log_err(" group_id=%lu :: mxq_assign_job_from_group_to_daemon(): %m", group_id); return 0; diff --git a/mxq_job.h b/mxq_job.h index e50c3b86..cca5b561 100644 --- a/mxq_job.h +++ b/mxq_job.h @@ -101,7 +101,7 @@ void mxq_job_free_content(struct mxq_job *j); int mxq_load_job(struct mx_mysql *mysql, struct mxq_job **mxq_jobs, uint64_t job_id); int mxq_load_jobs_in_group(struct mx_mysql *mysql, struct mxq_job **mxq_jobs, struct mxq_group *grp); int mxq_load_jobs_in_group_with_status(struct mx_mysql *mysql, struct mxq_job **mxq_jobs, struct mxq_group *grp, uint64_t job_status); -int mxq_assign_job_from_group_to_daemon(struct mx_mysql *mysql, uint64_t group_id, struct mxq_daemon *daemon); +int mxq_assign_job_from_group_to_daemon(struct mx_mysql *mysql, uint64_t group_id, struct mxq_daemon *daemon, unsigned long slots_per_job); int mxq_unassign_jobs_of_server(struct mx_mysql *mysql, struct mxq_daemon *daemon); int mxq_set_job_status_loaded_on_server(struct mx_mysql *mysql, struct mxq_job *job); int mxq_set_job_status_running(struct mx_mysql *mysql, struct mxq_job *job); @@ -109,6 +109,6 @@ int mxq_set_job_status_exited(struct mx_mysql *mysql, struct mxq_job *job); int mxq_set_job_status_unknown(struct mx_mysql *mysql, struct mxq_job *job); int mxq_job_set_tmpfilenames(struct mxq_group *g, struct mxq_job *j); int mxq_load_job_from_group_assigned_to_daemon(struct mx_mysql *mysql, struct mxq_job **jobs_result, uint64_t group_id, struct mxq_daemon *daemon); -int mxq_load_job_from_group_for_daemon(struct mx_mysql *mysql, struct mxq_job *mxqjob, uint64_t group_id, struct mxq_daemon *daemon); +int mxq_load_job_from_group_for_daemon(struct mx_mysql *mysql, struct mxq_job *mxqjob, uint64_t group_id, struct mxq_daemon *daemon,unsigned long slots_per_job); int mxq_load_jobs_running_on_server(struct mx_mysql *mysql, struct mxq_job **jobs_result, struct mxq_daemon *daemon); #endif diff --git a/mxqd.c b/mxqd.c index 66d692de..5da75ae9 100644 --- a/mxqd.c +++ b/mxqd.c @@ -1131,7 +1131,7 @@ unsigned long start_job(struct mxq_group_list *glist) group = &glist->group; job = &_mxqjob; - res = mxq_load_job_from_group_for_daemon(server->mysql, job, group->group_id, daemon); + res = mxq_load_job_from_group_for_daemon(server->mysql, job, group->group_id, daemon, glist->slots_per_job); if (!res) { return 0; }