View | Details | Raw Unified | Return to ticket 187
Collapse All | Expand All

(-)a/src/slurmctld/job_mgr.c (-13 lines)
Lines 3709-3715 static int _job_create(job_desc_msg_t * job_desc, int allocate, int will_run, Link Here
3709
{
3709
{
3710
	static int launch_type_poe = -1;
3710
	static int launch_type_poe = -1;
3711
	int error_code = SLURM_SUCCESS, i, qos_error;
3711
	int error_code = SLURM_SUCCESS, i, qos_error;
3712
	enum job_state_reason fail_reason;
3713
	struct part_record *part_ptr = NULL;
3712
	struct part_record *part_ptr = NULL;
3714
	List part_ptr_list = NULL;
3713
	List part_ptr_list = NULL;
3715
	bitstr_t *req_bitmap = NULL, *exc_bitmap = NULL;
3714
	bitstr_t *req_bitmap = NULL, *exc_bitmap = NULL;
Lines 4100-4117 static int _job_create(job_desc_msg_t * job_desc, int allocate, int will_run, Link Here
4100
	}
4099
	}
4101
	job_ptr->best_switch = true;
4100
	job_ptr->best_switch = true;
4102
4101
4103
	/* Insure that requested partition is valid right now,
4104
	 * otherwise leave job queued and provide warning code */
4105
	fail_reason = job_limits_check(&job_ptr);
4106
	if (fail_reason != WAIT_NO_REASON) {
4107
		if (fail_reason == WAIT_QOS_THRES)
4108
			error_code = ESLURM_QOS_THRES;
4109
		else
4110
			error_code = ESLURM_REQUESTED_PART_CONFIG_UNAVAILABLE;
4111
		job_ptr->state_reason = fail_reason;
4112
		xfree(job_ptr->state_desc);
4113
	}
4114
4115
	FREE_NULL_LIST(license_list);
4102
	FREE_NULL_LIST(license_list);
4116
	FREE_NULL_BITMAP(req_bitmap);
4103
	FREE_NULL_BITMAP(req_bitmap);
4117
	FREE_NULL_BITMAP(exc_bitmap);
4104
	FREE_NULL_BITMAP(exc_bitmap);
(-)a/src/slurmctld/node_scheduler.c (-8 / +13 lines)
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",

Return to ticket 187