diff --git a/src/server/distrend.c b/src/server/distrend.c --- a/src/server/distrend.c +++ b/src/server/distrend.c @@ -254,7 +254,7 @@ int restoreJobState(struct distrenjob *j Passed strings must be free()d by the caller. */ -int prepare_distrenjob(struct general_info *geninfo, int type, char *name, char *submitter, char *email, int priority, int start_frame, int end_frame, int width, int height) +int prepare_distrenjob(struct general_info *geninfo, int type, char *name, char *submitter, int priority, int start_frame, int end_frame, int width, int height) { int counter; int counter2; @@ -272,7 +272,6 @@ int prepare_distrenjob(struct general_in distrenjob->type = 1; distrenjob->name = strdup(name); distrenjob->submitter = strdup(submitter); - distrenjob->email = strdup(email); distrenjob->priority = priority; distrenjob->width = width; distrenjob->height = height; @@ -784,71 +783,23 @@ int import_general_info(struct general_i return 0; } - -// extracts data from the xml created by above function and creates a job from it -// it returns a pointer to the created job -struct distrenjob *createJobFromXML(struct general_info *geninfo, unsigned int jobnum) +/** + determines path to the distenjob XML file and + calls distrenjob_unserialize() + */ +int restore_distrenjob(struct general_info *geninfo, struct distrenjob **distrenjob, jobnum_t jobnum) { - xmlDocPtr doc; - xmlNodePtr cur; + int tmp; char *file_name; - struct distrenjob *distrenjob; - int start_frame; - int counter; - int counter2; - - job_getserialfilename(&file_name, geninfo, jobnum, 0); - - doc = xmlParseFile(file_name); - if(!doc) - return NULL; - - distrenjob_new(&distrenjob); - - cur = xmlDocGetRootElement(doc); - - distrenjob->name = (char*)xmlGetProp(cur, (xmlChar*)"name"); - distrenjob->submitter = (char*)xmlGetProp(cur, (xmlChar*)"submitter"); - distrenjob->priority = atoi((char*)xmlGetProp(cur, (xmlChar*)"priority")); - - cur = cur->xmlChildrenNode; - distrenjob->width = atoi((char*)xmlGetProp(cur, (xmlChar*)"width")); - distrenjob->height = atoi((char*)xmlGetProp(cur, (xmlChar*)"number")); - cur = cur->next; - start_frame = atoi((char*)xmlGetProp(cur, (xmlChar*)"start_frame")); - distrenjob->total_frames = atoi((char*)xmlGetProp(cur, (xmlChar*)"end_frame")) - start_frame + 1; - distrenjob->output_format = (char*)xmlGetProp(cur, (xmlChar*)"output_format"); - - cur = cur->next; - distrenjob->watchdog_forgiveness = atoi((char*)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1)); - - xmlFreeDoc(doc); - - /** load up stats.xml file to retrieve data */ - _distren_asprintf(&file_name, "stor/job%d/stats.xml", jobnum); - - doc = xmlParseFile(file_name); - free(file_name); - cur = xmlDocGetRootElement(doc); + tmp = job_getserialfilename(&file_name, geninfo, jobnum, 0); + if(tmp) + return tmp; - distrenjob->total_render_time = (time_t)atol((char*)xmlGetProp(cur, (xmlChar*)"total_render_time")); - - xmlFreeDoc(doc); - - distrenjob->frameset = malloc(sizeof(struct frameset) * distrenjob->total_frames); - - // change the status of all frames to "unassigned" - counter2 = start_frame; - for(counter = 0; counter <= distrenjob->total_frames; counter++){ - distrenjob->frameset[counter].num = counter2; - distrenjob->frameset[counter].status = FRAMESETSTATUS_UNASSIGNED; - - counter2++; - } - - restoreJobState(distrenjob); - return distrenjob; + tmp = distrenjob_unserialize(distrenjob, file_name); + free(file_name); + + return tmp; } int updateJobStatsXML(struct distrenjob *job) @@ -1017,7 +968,7 @@ int reCreateQueueFromXML(struct general_ struct distrenjob *holder; // holds the job that "was" after head, so that the new struct can be inserted after head struct distrenjob *job; // job to be added xmlChar *tmp; - int job_num; + jobnum_t job_num; if(current == NULL) // base case, if element doesn't exist then don't do anything return 0; @@ -1040,8 +991,7 @@ int reCreateQueueFromXML(struct general_ job_num = atoi((char*)tmp); xmlFree(tmp); - job = createJobFromXML(geninfo, job_num); - if(job == NULL) + if(restore_distrenjob(geninfo, &job, job_num)) return 1; /** @@ -1096,9 +1046,8 @@ int printJob(struct distrenjob *job) int printJobInfo(struct distrenjob *job) { fprintf(stderr, "type: %d\n", job->type); - fprintf(stderr, "name: %s\n", job->email); + fprintf(stderr, "name: %s\n", job->name); fprintf(stderr, "submitter: %s\n", job->submitter); - fprintf(stderr, "e-mail: %s\n", job->email); fprintf(stderr, "priority: %d\n", job->priority); fprintf(stderr, "completed: %d\n", job->completed_frames); fprintf(stderr, "assigned: %d\n", job->assigned_frames); @@ -1198,8 +1147,8 @@ int main(int argc, char *argv[]) } /** pre-loaded jobs for testing */ - prepare_distrenjob(&general_info, 1, "awesome", "LordOfWar", "onlylordofwar@gmail.com", 8, 1, 100, 640, 480); - prepare_distrenjob(&general_info, 1, "hamburger", "ohnobinki", "ohnobinki@ohnopublishing.net", 3, 1, 50, 1280, 720); + prepare_distrenjob(&general_info, 1, "awesome", "LordOfWar", 8, 1, 100, 640, 480); + prepare_distrenjob(&general_info, 1, "hamburger", "ohnobinki", 3, 1, 50, 1280, 720); while(test == 1) { @@ -1251,7 +1200,7 @@ int main(int argc, char *argv[]) fprintf(stderr, "\nEnd frame: "); scanf("%d", &end_frame); fprintf(stderr, "\nWidth: "); scanf("%d", &width); fprintf(stderr, "\nHeight: "); scanf("%d", &height); - prepare_distrenjob(&general_info, type, name, submitter, email, priority, start_frame, end_frame, width, height); + prepare_distrenjob(&general_info, type, name, submitter, priority, start_frame, end_frame, width, height); break; case 5: fprintf(stderr, "\nJob number: ");