diff --git a/mx_mysql.c b/mx_mysql.c index 79922d0d..42e7d2fc 100644 --- a/mx_mysql.c +++ b/mx_mysql.c @@ -1398,8 +1398,6 @@ int mx_mysql_do_statement_retry_on_fail(struct mx_mysql *mysql, char *query, str { int res; - mx_log_debug("entered"); - while (1) { res = mx_mysql_do_statement_no_bind_cleanup(mysql, query, param, result, from, to, size); diff --git a/mxq_job.c b/mxq_job.c index 8de434bf..00acfa24 100644 --- a/mxq_job.c +++ b/mxq_job.c @@ -362,11 +362,7 @@ int mxq_assign_job_from_group_to_daemon(struct mx_mysql *mysql, uint64_t group_i " server_id = ?," " job_status = " status_str(MXQ_JOB_STATUS_ASSIGNED) " WHERE job_id = ?" - " AND job_status = " status_str(MXQ_JOB_STATUS_INQ) - " AND daemon_id = 0" - " AND host_hostname = ''" - " AND server_id = ''" - " AND host_pid = 0"; + " AND job_status = " status_str(MXQ_JOB_STATUS_INQ); job_id=mxq_select_job_from_group(mysql,group_id); if (!job_id) { @@ -410,7 +406,10 @@ int mxq_unassign_jobs_of_server(struct mx_mysql *mysql, struct mxq_daemon *daemo "UPDATE" " mxq_job" " SET" - " daemon_id = 0," + " daemon_id = 0," + " host_hostname = ''," + " host_slots = 0," + " server_id = ''," " job_status = " status_str(MXQ_JOB_STATUS_INQ) " WHERE job_status = " status_str(MXQ_JOB_STATUS_ASSIGNED) " AND host_pid = 0" @@ -435,7 +434,7 @@ int mxq_unassign_jobs_of_server(struct mx_mysql *mysql, struct mxq_daemon *daemo return res; } -int mxq_set_job_status_loaded(struct mx_mysql *mysql, struct mxq_job *job) +int mxq_set_job_status_loaded_on_server(struct mx_mysql *mysql, struct mxq_job *job) { struct mx_mysql_bind param = {0}; char *host_id; @@ -762,7 +761,7 @@ int mxq_load_job_from_group_for_daemon(struct mx_mysql *mysql, struct mxq_job *j } } while (1); - res = mxq_set_job_status_loaded(mysql, job); + res = mxq_set_job_status_loaded_on_server(mysql, job); if (res < 0) { mx_log_err(" group_id=%lu job_id=%lu :: mxq_set_job_status_loaded_on_server(): %m", group_id, job->job_id); return 0; diff --git a/mxqd.c b/mxqd.c index 315df8db..1a723c7b 100644 --- a/mxqd.c +++ b/mxqd.c @@ -1192,6 +1192,7 @@ unsigned long start_job(struct mxq_group_list *glist) pid = fork(); if (pid < 0) { mx_log_err("fork: %m"); + cpuset_clear_running(&job->host_cpu_set,&server->cpu_set_available); return 0; } else if (pid == 0) { job->host_pid = getpid(); @@ -2454,8 +2455,10 @@ int main(int argc, char *argv[]) slots_started = start_user_with_least_running_global_slot_count(server); if (slots_started == -1) { mxq_daemon_set_status(server->mysql, daemon, MXQ_DAEMON_STATUS_WAITING); - mx_log_debug("no slots_started => we have users waiting for free slots."); + mx_log_info("no slots_started => we have users waiting for free slots. Sleeping (3 seconds)."); + sleep(3); slots_started = 0; + continue; } else if (slots_started) { mx_log_info("slots_started=%lu :: Main Loop started %lu slots.", slots_started, slots_started); } diff --git a/mysql/create_trigger.sql b/mysql/create_trigger.sql index 86d41fc8..5eecee40 100644 --- a/mysql/create_trigger.sql +++ b/mysql/create_trigger.sql @@ -15,7 +15,7 @@ CREATE TRIGGER mxq_add_group BEFORE INSERT ON mxq_group DROP TRIGGER IF EXISTS mxq_update_group| CREATE TRIGGER mxq_update_group BEFORE UPDATE ON mxq_group FOR EACH ROW BEGIN - SET NEW.group_mtime = NOW(); + SET NEW.group_mtime = GREATEST(OLD.group_mtime, NOW()); IF OLD.group_jobs_inq > 0 AND OLD.group_jobs_running = 0 THEN SET NEW.stats_wait_sec = OLD.stats_wait_sec + (UNIX_TIMESTAMP(NEW.group_mtime) - UNIX_TIMESTAMP(OLD.group_mtime));