diff --git a/mxq_job.c b/mxq_job.c index a0789f8..0a129ce 100644 --- a/mxq_job.c +++ b/mxq_job.c @@ -395,19 +395,21 @@ int mxq_set_job_status_loaded_on_server(struct mx_mysql *mysql, struct mxq_job * char *query = "UPDATE mxq_job SET" " job_status = " status_str(MXQ_JOB_STATUS_LOADED) + ", host_id = ?" " WHERE job_id = ?" " AND job_status = " status_str(MXQ_JOB_STATUS_ASSIGNED) " AND host_hostname = ?" " AND server_id = ?" " AND host_pid = 0"; - res = mx_mysql_bind_init_param(¶m, 3); + res = mx_mysql_bind_init_param(¶m, 4); assert(res == 0); res = 0; - res += mx_mysql_bind_var(¶m, 0, uint64, &(job->job_id)); - res += mx_mysql_bind_var(¶m, 1, string, &(job->host_hostname)); - res += mx_mysql_bind_var(¶m, 2, string, &(job->server_id)); + res += mx_mysql_bind_var(¶m, 0, string, &(job->host_id)); + res += mx_mysql_bind_var(¶m, 1, uint64, &(job->job_id)); + res += mx_mysql_bind_var(¶m, 2, string, &(job->host_hostname)); + res += mx_mysql_bind_var(¶m, 3, string, &(job->server_id)); assert(res == 0); res = mx_mysql_do_statement_noresult_retry_on_fail(mysql, query, ¶m); @@ -666,7 +668,7 @@ int mxq_load_job_assigned_to_server(struct mx_mysql *mysql, struct mxq_job **mxq return res; } -int mxq_load_job_from_group_for_server(struct mx_mysql *mysql, struct mxq_job *mxqjob, uint64_t group_id, char *hostname, char *server_id) +int mxq_load_job_from_group_for_server(struct mx_mysql *mysql, struct mxq_job *mxqjob, uint64_t group_id, char *hostname, char *server_id, char *host_id) { int res; struct mxq_job *jobs = NULL; @@ -677,6 +679,8 @@ int mxq_load_job_from_group_for_server(struct mx_mysql *mysql, struct mxq_job *m assert(*hostname); assert(server_id); assert(*server_id); + assert(host_id); + assert(*host_id); do { res = mxq_load_job_assigned_to_server(mysql, &jobs, hostname, server_id); @@ -701,6 +705,9 @@ int mxq_load_job_from_group_for_server(struct mx_mysql *mysql, struct mxq_job *m } } while (1); + mx_free_null(mxqjob->host_id); + mxqjob->host_id = mx_strdup_forever(host_id); + res = mxq_set_job_status_loaded_on_server(mysql, mxqjob); if (res < 0) { mx_log_err(" group_id=%lu job_id=%lu :: mxq_set_job_status_loaded_on_server(): %m", group_id, mxqjob->job_id); diff --git a/mxq_job.h b/mxq_job.h index 872010e..4b09259 100644 --- a/mxq_job.h +++ b/mxq_job.h @@ -108,6 +108,6 @@ int mxq_set_job_status_exited(struct mx_mysql *mysql, struct mxq_job *job); int mxq_set_job_status_unknown_for_server(struct mx_mysql *mysql, char *hostname, char *server_id); int mxq_job_set_tmpfilenames(struct mxq_group *g, struct mxq_job *j); int mxq_load_job_assigned_to_server(struct mx_mysql *mysql, struct mxq_job **mxq_jobs, char *hostname, char *server_id); -int mxq_load_job_from_group_for_server(struct mx_mysql *mysql, struct mxq_job *mxqjob, uint64_t group_id, char *hostname, char *server_id); +int mxq_load_job_from_group_for_server(struct mx_mysql *mysql, struct mxq_job *mxqjob, uint64_t group_id, char *hostname, char *server_id, char *host_id); #endif diff --git a/mxqd.c b/mxqd.c index d69017b..54cca2a 100644 --- a/mxqd.c +++ b/mxqd.c @@ -1019,7 +1019,7 @@ unsigned long start_job(struct mxq_group_list *group) server = group->user->server; - res = mxq_load_job_from_group_for_server(server->mysql, &mxqjob, group->group.group_id, server->hostname, server->server_id); + res = mxq_load_job_from_group_for_server(server->mysql, &mxqjob, group->group.group_id, server->hostname, server->server_id, server->host_id); if (!res) { return 0;