示例#1
0
int
sched_recov_db(void)
{
	pbs_db_conn_t *conn = (pbs_db_conn_t *) svr_db_conn;
	pbs_db_sched_info_t dbsched;
	pbs_db_attr_info_t attr_info;
	pbs_db_obj_info_t obj;
	int rc;
	int index;

	/* load server_qs */
	strcpy(dbsched.sched_name, pbs_server_id);

	if (pbs_db_begin_trx(conn, 0, 0) !=0)
		goto db_err;

	obj.pbs_db_obj_type = PBS_DB_SCHED;
	obj.pbs_db_un.pbs_db_sched = &dbsched;

	/* read in job fixed sub-structure */
	if ((rc = pbs_db_load_obj(conn, &obj)) == -1) /* error */
		goto db_err;

	if (rc == 0) {
		db_to_svr_sched(&scheduler, &dbsched);

		attr_info.parent_id = pbs_server_id;
		attr_info.parent_obj_type = PARENT_TYPE_SCHED; /* svr attr */

		/* read in server attributes */
		if (recov_attr_db(conn, &scheduler, &attr_info, sched_attr_def, scheduler.sch_attr,
			(int)SCHED_ATR_LAST, 0) != 0)
			goto db_err;
	}
	if (pbs_db_end_trx(conn, PBS_DB_COMMIT) != 0)
		goto db_err;

	if (pbs_conf.pbs_use_tcp == 0) {
		/* check if throughput mode is visible in non-TPP mode, if so make it invisible */
		index = find_attr(sched_attr_def, ATTR_throughput_mode, SCHED_ATR_LAST);
		scheduler.sch_attr[index].at_flags = 0;
	}

	return (0);

db_err:
	log_err(-1, "sched_recov", "read of scheduler db failed");
	(void) pbs_db_end_trx(conn, PBS_DB_ROLLBACK);
	return -1;
}
示例#2
0
pbs_sched *
sched_recov_db(char *sname)
{
	pbs_sched		*ps;
	pbs_db_sched_info_t	dbsched;
	pbs_db_obj_info_t	obj;
	pbs_db_conn_t		*conn = (pbs_db_conn_t *) svr_db_conn;

	obj.pbs_db_obj_type = PBS_DB_SCHED;
	obj.pbs_db_un.pbs_db_sched = &dbsched;

	ps = sched_alloc(sname);  /* allocate & init sched structure space */
	if (ps == NULL) {
		log_err(-1, "sched_recov", "sched_alloc failed");
		return NULL;
	}

	/* load sched */
	dbsched.sched_name[sizeof(dbsched.sched_name) - 1] = '\0';
	strncpy(dbsched.sched_name, sname, sizeof(dbsched.sched_name));

	/* read in job fixed sub-structure */
	if (pbs_db_load_obj(conn, &obj) != 0)
		goto db_err;

	if (db_to_svr_sched(ps, &dbsched) != 0)
		goto db_err;

	pbs_db_reset_obj(&obj);

	/* all done recovering the sched */
	return (ps);

db_err:
	log_err(-1, "sched_recov", "read of scheddb failed");
	if (ps)
		free(ps);
	return NULL;
}