Esempio n. 1
0
/*
 * Update the state of a specific task ID in a specific task_state structure
 */
extern void task_state_update(task_state_t ts, int task_id, task_state_type_t t)
{
	xassert(ts != NULL);
	xassert(task_id >= 0);
	xassert(task_id < ts->n_tasks);

	if (ts->pack_group == NO_VAL) {
		debug3("%s: step=%u.%u task_id=%d, %s", __func__,
		       ts->job_id, ts->step_id, task_id,
		       _task_state_type_str(t));
	} else {
		debug3("%s: step=%u.%u pack_group=%u task_id=%d, %s", __func__,
		       ts->job_id, ts->step_id, ts->pack_group, task_id,
		       _task_state_type_str(t));
	}

	switch (t) {
	case TS_START_SUCCESS:
		bit_set (ts->running, task_id);
		ts->n_started++;
		break;
	case TS_START_FAILURE:
		bit_set (ts->start_failed, task_id);
		break;
	case TS_NORMAL_EXIT:
		bit_clear(ts->running, task_id);
		if (bit_test(ts->normal_exit, task_id) ||
		    bit_test(ts->abnormal_exit, task_id)) {
			error("Task %d reported exit for a second time.",
			      task_id);
		} else {
			bit_set (ts->normal_exit, task_id);
			ts->n_exited++;
		}
		break;
	case TS_ABNORMAL_EXIT:
		bit_clear(ts->running, task_id);
		if (bit_test(ts->normal_exit, task_id) ||
		    bit_test(ts->abnormal_exit, task_id)) {
			error("Task %d reported exit for a second time.",
			      task_id);
		} else {
			bit_set (ts->abnormal_exit, task_id);
			ts->n_exited++;
			ts->n_abnormal++;
		}
		break;
	}

	xassert((bit_set_count(ts->abnormal_exit) +
		 bit_set_count(ts->normal_exit)) == ts->n_exited);
}
Esempio n. 2
0
void task_state_update (task_state_t ts, int taskid, task_state_type_t t)
{
    xassert (ts != NULL);
    xassert (taskid >= 0);
    xassert (taskid < ts->n_tasks);

    debug3("task_state_update(taskid=%d, %s)",
           taskid, _task_state_type_str (t));

    switch (t) {
    case TS_START_SUCCESS:
        bit_set (ts->running, taskid);
        ts->n_started++;
        break;
    case TS_START_FAILURE:
        bit_set (ts->start_failed, taskid);
        break;
    case TS_NORMAL_EXIT:
        bit_clear (ts->running, taskid);
        if (bit_test(ts->normal_exit, taskid)) {
            error("Task %d reported exit for a second time.",
                  taskid);
        } else {
            bit_set (ts->normal_exit, taskid);
            ts->n_exited++;
        }
        break;
    case TS_ABNORMAL_EXIT:
        bit_clear (ts->running, taskid);
        if (bit_test(ts->abnormal_exit, taskid)) {
            error("Task %d reported exit for a second time.",
                  taskid);
        } else {
            bit_set (ts->abnormal_exit, taskid);
            ts->n_exited++;
            ts->n_abnormal++;
        }
        break;
    }

    xassert ((bit_set_count(ts->abnormal_exit) +
              bit_set_count(ts->normal_exit)) == ts->n_exited);
}