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; }
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; }