diff --git a/src/server/s-task-helpers.c b/src/server/s-task-helpers.c
index 41d08f5..c89fdaa 100644
--- a/src/server/s-task-helpers.c
+++ b/src/server/s-task-helpers.c
@@ -156,7 +156,7 @@ sais_set_task_state(struct vhd *vhd, const char *task_uuid,
sai_event_state_t state, uint64_t started, uint64_t duration)
{
char update[512], esc1[96], esc2[96], esc3[32], esc4[32], event_uuid[33];
- sai_event_state_t oes, sta, task_ostate, ostate = state;
+ sai_event_state_t oes, sta, task_ostate;
unsigned int count = 0, count_good = 0, count_bad = 0;
uint64_t started_orig = started;
struct lwsac *ac = NULL;
@@ -274,7 +274,8 @@ sais_set_task_state(struct vhd *vhd, const char *task_uuid,
lws_sul_schedule(vhd->context, 0, &vhd->sul_central,
sais_central_cb, 1);
- sais_platforms_with_tasks_pending(vhd);
+ if (state != SAIES_STEP_SUCCESS)
+ sais_platforms_with_tasks_pending(vhd);
/*
* So, how many tasks for this event?
@@ -357,10 +358,7 @@ sais_set_task_state(struct vhd *vhd, const char *task_uuid,
sai_event_db_close(&vhd->sqlite3_cache, (sqlite3 **)&e->pdb);
lwsac_free(&ac);
- if (ostate == SAIES_STEP_SUCCESS) {
- lwsl_notice("%s: sais_set_task_state() is calling sais_create_and_offer_task_step()\n", __func__);
- sais_create_and_offer_task_step(vhd, task_uuid);
- }
+
return 0;
diff --git a/src/server/s-task.c b/src/server/s-task.c
index 25c12ce..a1108a3 100644
--- a/src/server/s-task.c
+++ b/src/server/s-task.c
@@ -581,7 +581,7 @@ sais_platforms_with_tasks_pending(struct vhd *vhd)
vhd->sqlite3_path_lhs, e->uuid, 0, &pdb)) {
if (sqlite3_prepare_v2(pdb, "select platform, count(*), "
- "sum(case when state = 0 or state = 9 then 1 else 0 end) "
+ "sum(case when (state = 0 or state = 9) and (builder_name IS NULL or builder_name = '') then 1 else 0 end) "
"from tasks t1 where "
"run = (select max(run) from tasks t2 where t1.uuid = t2.uuid) and "
"(state = 0 or state = 1 or state = 2 or state = 9) group by platform", -1, &sm,
@@ -845,10 +845,13 @@ sais_create_and_offer_task_step(struct vhd *vhd, const char *task_uuid)
inflight = sais_is_task_inflight(vhd, NULL, task_uuid, &ul);
- if (inflight /* && ul->started */) {
- lwsl_notice("%s: ~~~ not continuing %s as listed on inflight\n",
- __func__, task_uuid);
- return 1;
+ if (inflight) {
+ if (!ul->started) {
+ lwsl_notice("%s: ~~~ not continuing %s as listed on inflight\n",
+ __func__, task_uuid);
+ return 1;
+ }
+ ul->started = 0;
}
event_uuid[0] = '\0';
@@ -924,15 +927,12 @@ sais_create_and_offer_task_step(struct vhd *vhd, const char *task_uuid)
goto bail;
}
- if (sais_is_task_inflight(vhd, NULL, task_uuid, &ul)) {
- lwsl_warn("%s: bailing as inflight %s\n", __func__, task_uuid);
- goto bail;
- }
-
- if (sais_add_to_inflight_list_if_absent(vhd, sp, task_uuid)) {
- lwsl_warn("%s: bailing as can't add to inflight %s\n", __func__, task_uuid);
- sais_task_clear_build_and_logs(vhd, task_uuid, 0);
- goto bail;
+ if (!inflight) {
+ if (sais_add_to_inflight_list_if_absent(vhd, sp, task_uuid)) {
+ lwsl_warn("%s: bailing as can't add to inflight %s\n", __func__, task_uuid);
+ sais_task_clear_build_and_logs(vhd, task_uuid, 0);
+ goto bail;
+ }
}
lws_strncpy(url, temp_task->one_event->repo_fetchurl, sizeof(url));
@@ -1015,10 +1015,12 @@ sais_create_and_offer_task_step(struct vhd *vhd, const char *task_uuid)
temp_task->server_name = pss->server_name;
- if (sais_add_to_inflight_list_if_absent(vhd, sp, temp_task->uuid)) {
- lwsl_warn("%s: bailing as can't add to inflight %s\n", __func__, task_uuid);
- sais_task_clear_build_and_logs(vhd, temp_task->uuid, 0);
- goto bail;
+ if (!inflight) {
+ if (sais_add_to_inflight_list_if_absent(vhd, sp, temp_task->uuid)) {
+ lwsl_warn("%s: bailing as can't add to inflight %s\n", __func__, task_uuid);
+ sais_task_clear_build_and_logs(vhd, temp_task->uuid, 0);
+ goto bail;
+ }
}
/*
diff --git a/src/server/s-ws-builder.c b/src/server/s-ws-builder.c
index 68700e8..d7e0f11 100644
--- a/src/server/s-ws-builder.c
+++ b/src/server/s-ws-builder.c
@@ -466,7 +466,7 @@ sais_builder_disconnected(struct vhd *vhd, struct lws *wsi)
lws_snprintf(q, sizeof(q),
"SELECT uuid FROM tasks WHERE "
- "builder_name=? AND (state = %d OR state = %d) "
+ "builder_name=? AND (state = 0 OR state = %d OR state = %d) "
"AND run=(SELECT max(run) FROM tasks t2 WHERE t2.uuid = tasks.uuid)",
SAIES_PASSED_TO_BUILDER,
SAIES_BEING_BUILT);
@@ -623,6 +623,7 @@ sais_process_rej(struct vhd *vhd, struct pss *pss,
lwsl_notice("%s: SAI_TASK_REASON_BUSY: Set busy: %s\n",
__func__, rej->task_uuid);
do_remove_uuid = 1;
+ sais_bind_task_to_builder(vhd, NULL, NULL, rej->task_uuid);
sais_set_task_state(vhd, rej->task_uuid, SAIES_WAITING, 0, 0);
sais_plat_busy(sp, 1);
break;
@@ -658,7 +659,10 @@ sais_process_rej(struct vhd *vhd, struct pss *pss,
lws_now_secs() - pss->first_log_timestamp))
lwsl_notice("%s: task state update failed, possibly event deleted\n", __func__);
- sais_plat_busy(sp, 0);
+ if (n == SAIES_STEP_SUCCESS)
+ do_remove_uuid = 0;
+ else
+ sais_plat_busy(sp, 0);
break;
}