|
Lines 1455-1468
extern int select_nodes(struct job_record *job_ptr, bool test_only,
Link Here
|
| 1455 |
return ESLURM_JOB_HELD; |
1455 |
return ESLURM_JOB_HELD; |
| 1456 |
} |
1456 |
} |
| 1457 |
|
1457 |
|
| 1458 |
/* Confirm that partition is up and has compatible nodes limits */ |
1458 |
/* Confirm that partition is up and has compatible nodes limits. |
|
|
1459 |
* If not, we still continue to determine if the job can ever run. |
| 1460 |
* For example, the geometry might be incompatible with BlueGene. */ |
| 1459 |
fail_reason = job_limits_check(&job_ptr); |
1461 |
fail_reason = job_limits_check(&job_ptr); |
| 1460 |
if (fail_reason != WAIT_NO_REASON) { |
1462 |
if (fail_reason != WAIT_NO_REASON) |
| 1461 |
last_job_update = now; |
1463 |
test_only = true; |
| 1462 |
xfree(job_ptr->state_desc); |
|
|
| 1463 |
job_ptr->state_reason = fail_reason; |
| 1464 |
return ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE; |
| 1465 |
} |
| 1466 |
|
1464 |
|
| 1467 |
/* build sets of usable nodes based upon their configuration */ |
1465 |
/* build sets of usable nodes based upon their configuration */ |
| 1468 |
error_code = _build_node_list(job_ptr, &node_set_ptr, &node_set_size); |
1466 |
error_code = _build_node_list(job_ptr, &node_set_ptr, &node_set_size); |
|
Lines 1551-1557
extern int select_nodes(struct job_record *job_ptr, bool test_only,
Link Here
|
| 1551 |
} |
1549 |
} |
| 1552 |
} |
1550 |
} |
| 1553 |
} |
1551 |
} |
| 1554 |
if (error_code) { |
1552 |
if (error_code || fail_reason) { |
|
|
1553 |
/* Fatal errors for job here */ |
| 1555 |
if (error_code == ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE) { |
1554 |
if (error_code == ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE) { |
| 1556 |
/* Too many nodes requested */ |
1555 |
/* Too many nodes requested */ |
| 1557 |
debug3("JobId=%u not runnable with present config", |
1556 |
debug3("JobId=%u not runnable with present config", |
|
Lines 1559-1564
extern int select_nodes(struct job_record *job_ptr, bool test_only,
Link Here
|
| 1559 |
job_ptr->state_reason = WAIT_PART_NODE_LIMIT; |
1558 |
job_ptr->state_reason = WAIT_PART_NODE_LIMIT; |
| 1560 |
xfree(job_ptr->state_desc); |
1559 |
xfree(job_ptr->state_desc); |
| 1561 |
last_job_update = now; |
1560 |
last_job_update = now; |
|
|
1561 |
} else if (fail_reason) { |
| 1562 |
job_ptr->state_reason = fail_reason; |
| 1563 |
xfree(job_ptr->state_desc); |
| 1564 |
last_job_update = now; |
| 1565 |
|
| 1566 |
/* Non-fatal errors for job below */ |
| 1562 |
} else if (error_code == ESLURM_NODE_NOT_AVAIL) { |
1567 |
} else if (error_code == ESLURM_NODE_NOT_AVAIL) { |
| 1563 |
/* Required nodes are down or drained */ |
1568 |
/* Required nodes are down or drained */ |
| 1564 |
debug3("JobId=%u required nodes not avail", |
1569 |
debug3("JobId=%u required nodes not avail", |