Esempio n. 1
0
/**
 * @brief
 *		Recover server information and attributes from server database
 *
 * @par FunctionalitY:
 *		This function is only called on Server initialization at start up.
 *
 * @par	Note:
 *		server structure, extern struct server server, must be preallocated and
 *		all default values should already be set.
 *
 * @see	pbsd_init.c
 *
 * @return	Error code
 * @retval	0	: On successful recovery and creation of server structure
 * @retval	-1	: On failutre to open or read file.
 *
 */
int
svr_recov_db(void)
{
	pbs_db_conn_t *conn = (pbs_db_conn_t *) svr_db_conn;
	pbs_db_svr_info_t dbsvr;
	pbs_db_obj_info_t obj;

	/* load server_qs */
	dbsvr.attr_list.attr_count = 0;
	dbsvr.attr_list.attributes = NULL;

	obj.pbs_db_obj_type = PBS_DB_SVR;
	obj.pbs_db_un.pbs_db_svr = &dbsvr;

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

	if (db_to_svr_svr(&server, &dbsvr) != 0)
		goto db_err;

	pbs_db_reset_obj(&obj);

	return (0);

db_err:
	return -1;
}
Esempio n. 2
0
/**
 * @brief
 *		Recover a queue from the database
 *
 * @param[in]	qname	- Name of the queue to recover
 *
 * @return	The recovered queue structure
 * @retval	NULL	- Failure
 * @retval	!NULL	- Success - address of recovered queue returned
 *
 */
pbs_queue *
que_recov_db(char *qname)
{
	pbs_queue		*pq;
	pbs_db_que_info_t	dbque;
	pbs_db_attr_info_t	attr_info;
	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_QUEUE;
	obj.pbs_db_un.pbs_db_que = &dbque;

	pq = que_alloc(qname);  /* allocate & init queue structure space */
	if (pq == (pbs_queue *)0) {
		log_err(-1, "que_recov", "que_alloc failed");
		return ((pbs_queue *)0);
	}

	/* load server_qs */
	strcpy(dbque.qu_name, qname);

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

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

	db_to_svr_que(pq, &dbque);

	attr_info.parent_id = pq->qu_qs.qu_name;
	attr_info.parent_obj_type = PARENT_TYPE_QUE_ALL; /* que attr */

	/* read in que attributes */
	if (recov_attr_db(conn, pq, &attr_info, que_attr_def, pq->qu_attr,
		(int)QA_ATR_LAST, 0) != 0)
		goto db_err;

	if (pbs_db_end_trx(conn, PBS_DB_COMMIT) != 0)
		goto db_err;

	/* all done recovering the queue */
	return (pq);
db_err:
	log_err(-1, "que_recov", "read of queuedb failed");
	(void) pbs_db_end_trx(conn, PBS_DB_ROLLBACK);
	if (pq)
		que_free(pq);
	return 0;
}
Esempio n. 3
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;
}
Esempio n. 4
0
/**
 * @brief
 *		Recover server information and attributes from server database
 *
 * @par FunctionalitY:
 *		This function is only called on Server initialization at start up.
 *
 * @par	Note:
 *		server structure, extern struct server server, must be preallocated and
 *		all default values should already be set.
 *
 * @see	pbsd_init.c
 *
 * @return	Error code
 * @retval	0	: On successful recovery and creation of server structure
 * @retval	-1	: On failutre to open or read file.
 *
 */
int
svr_recov_db(void)
{
	pbs_db_conn_t *conn = (pbs_db_conn_t *) svr_db_conn;
	pbs_db_svr_info_t dbsvr;
	pbs_db_attr_info_t attr_info;
	pbs_db_obj_info_t obj;

	/* load server_qs */
	strcpy(dbsvr.sv_name, pbs_server_id);

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

	obj.pbs_db_obj_type = PBS_DB_SVR;
	obj.pbs_db_un.pbs_db_svr = &dbsvr;

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

	db_to_svr_svr(&server, &dbsvr);

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

	/* read in server attributes */
	if (recov_attr_db(conn, &server, &attr_info, svr_attr_def, server.sv_attr,
		(int)SRV_ATR_LAST, 0) != 0)
		goto db_err;

	if (pbs_db_end_trx(conn, PBS_DB_COMMIT) != 0)
		goto db_err;

	return (0);
db_err:
	log_err(-1, "svr_recov", "error on recovering server attr");
	(void) pbs_db_end_trx(conn, PBS_DB_ROLLBACK);
	return -1;
}
Esempio n. 5
0
/**
 * @brief
 *		Recover a queue from the database
 *
 * @param[in]	qname	- Name of the queue to recover
 *
 * @return	The recovered queue structure
 * @retval	NULL	- Failure
 * @retval	!NULL	- Success - address of recovered queue returned
 *
 */
pbs_queue *
que_recov_db(char *qname)
{
	pbs_queue		*pq;
	pbs_db_que_info_t	dbque;
	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_QUEUE;
	obj.pbs_db_un.pbs_db_que = &dbque;

	pq = que_alloc(qname);  /* allocate & init queue structure space */
	if (pq == NULL) {
		log_err(-1, "que_recov", "que_alloc failed");
		return NULL;
	}

	/* load server_qs */
	dbque.qu_name[sizeof(dbque.qu_name) - 1] = '\0';
	strncpy(dbque.qu_name, qname, sizeof(dbque.qu_name));

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

	if (db_to_svr_que(pq, &dbque) != 0)
		goto db_err;

	pbs_db_reset_obj(&obj);

	/* all done recovering the queue */
	return (pq);

db_err:
	log_err(-1, "que_recov", "read of queuedb failed");
	if (pq)
		que_free(pq);
	return 0;
}
Esempio n. 6
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;
}
Esempio n. 7
0
/**
 * @brief
 * 		enable db lookup only for server version of printjob
 *
 * @param[in]	id	-	Job Id.
 * @param[in]	no_attributes	-	if set means no need to set attr_info
 *
 * @return	int
 */
int
print_db_job(char *id, int no_attributes)
{
	pbs_db_obj_info_t obj;
	pbs_db_job_info_t dbjob;
	pbs_db_jobscr_info_t jobscr;
	job xjob;
	int db_conn_error;
	pbs_db_attr_info_t *attrs;
	char *db_errmsg = NULL;
	char errmsg[PBS_MAX_DB_CONN_INIT_ERR + 1];


	if (conn == NULL) {

		/* connect to database */
#ifdef NAS /* localmod 111 */
		if (pbs_conf.pbs_data_service_host) {
			conn = pbs_db_init_connection(pbs_conf.pbs_data_service_host, PBS_DB_CNT_TIMEOUT_NORMAL, 0, &db_conn_error, errmsg, PBS_MAX_DB_CONN_INIT_ERR);
		}
		else
#endif /* localmod 111 */
		conn = pbs_db_init_connection(pbs_conf.pbs_server_name, PBS_DB_CNT_TIMEOUT_NORMAL, 0, &db_conn_error, errmsg, PBS_MAX_DB_CONN_INIT_ERR);
		if (!conn) {
			get_db_errmsg(db_conn_error, &db_errmsg);
			fprintf(stderr, "%s\n", db_errmsg);
			if (strlen(errmsg) > 0)
				fprintf(stderr, "%s\n", errmsg);
			return -1;
		}
		db_conn_error = pbs_db_connect(conn);
		if (db_conn_error != PBS_DB_SUCCESS && pbs_conf.pbs_secondary != NULL) {
			conn = pbs_db_init_connection(pbs_conf.pbs_secondary, PBS_DB_CNT_TIMEOUT_NORMAL, 0, &db_conn_error, errmsg, PBS_MAX_DB_CONN_INIT_ERR);
			if (!conn) {
				get_db_errmsg(db_conn_error, &db_errmsg);
				fprintf(stderr, "%s\n", db_errmsg);
				if (strlen(errmsg) > 0)
					fprintf(stderr, "%s\n", errmsg);
				return -1;
			}
			db_conn_error = pbs_db_connect(conn);
		}
		if (db_conn_error != PBS_DB_SUCCESS) {
			get_db_errmsg(db_conn_error, &db_errmsg);
			fprintf(stderr,
				"Could not connect to PBS dataservice:[%s]\n",
				(db_errmsg)?db_errmsg:"None");
			exit(1);
		}
		if (pg_db_prepare_job_sqls(conn) != 0) {
			get_db_errmsg(db_conn_error, &db_errmsg);
			fprintf(stderr,
				"Could not initialize PBS dataservice:[%s]\n",
				(conn->conn_db_err)?(char *)conn->conn_db_err:"None");
			exit(1);
		}
	}

	/*
	 * On a server machine, if display_script is set,
	 * retrieve the job-script from database.
	 */
	if (display_script) {
		obj.pbs_db_obj_type = PBS_DB_JOBSCR;
		obj.pbs_db_un.pbs_db_jobscr = &jobscr;
		strcpy(jobscr.ji_jobid, id);
		if (strchr(id, '.') == 0) {
			strcat(jobscr.ji_jobid, ".");
			strcat(jobscr.ji_jobid, pbs_conf.pbs_server_name);
		}

		if (pbs_db_load_obj(conn, &obj) != 0) {
			fprintf(stderr, "Job %s not found\n", jobscr.ji_jobid);
			return (1);
		}
		else {
			printf("---------------------------------------------------\n");
			printf("Jobscript for jobid:%s\n", jobscr.ji_jobid);
			printf("---------------------------------------------------\n");

			printf("%s \n", jobscr.script);
		}
	}

	/*
	 * On a server machine, if display_script is not set,
	 * retrieve the job info from database.
	 */
	else {
		obj.pbs_db_obj_type = PBS_DB_JOB;
		obj.pbs_db_un.pbs_db_job = &dbjob;
		strcpy(dbjob.ji_jobid, id);
		if (strchr(id, '.') == 0) {
			strcat(dbjob.ji_jobid, ".");
			strcat(dbjob.ji_jobid, pbs_conf.pbs_server_name);
		}

		if (pbs_db_load_obj(conn, &obj) !=0) {
			fprintf(stderr, "Job %s not found\n", dbjob.ji_jobid);
			return (1);
		}
		db_to_svr_job(&xjob, &dbjob);
		prt_job_struct(&xjob);

		attrs = dbjob.attr_list.attributes;
		if (no_attributes == 0) {
			int i;
			printf("--attributes--\n");
			for (i=0; i< dbjob.attr_list.attr_count; i++) {
				printf("%s", attrs[i].attr_name);
				if (attrs[i].attr_resc && attrs[i].attr_resc[0] != 0)
					printf(".%s", attrs[i].attr_resc);
				printf(" = ");
				if (attrs[i].attr_value)
					printf("%s", show_nonprint_chars(attrs[i].attr_value));
				printf("\n");
			}

		}
		printf("\n");
	}

	return 0;
}