diff --git a/src/server/distrend.c b/src/server/distrend.c --- a/src/server/distrend.c +++ b/src/server/distrend.c @@ -52,7 +52,7 @@ #include "execio.h" #include "options.h" -#include "blendjob.h" +#include "distrenjob.h" #include "protocol.h" #include "slavefuncs.h" @@ -105,10 +105,10 @@ struct general_info { /* internally defined funcs's prototypes */ -void status_report_generator(struct blendjob **blendjobs_head); -void blendjob_remove(struct blendjob **head, struct blendjob *bj); +void status_report_generator(struct distrenjob **distrenjobs_head); +void distrenjob_remove(struct distrenjob **head, struct distrenjob *bj); -struct blendjob *blendjob_get(struct blendjob *head, jobnum_t jobnum); +struct distrenjob *distrenjob_get(struct distrenjob *head, jobnum_t jobnum); /* Global Vars, try to cut down on these */ jobnum_t jobnum = 0; // The next job number to create in the queue @@ -174,24 +174,24 @@ void start_data(){ } /** Finish-Setter: Sets a frame to the "completed" status.*/ -void finish_frame(struct blendjob *blendjob, int frame){ - blendjob->frameset[frame].status = 2; - blendjob->frameset[frame].time_to_render = (clock() - blendjob[jobnum].frameset[frame].start_time); // Consider changing time-to-render to time-for-frame or something? +void finish_frame(struct distrenjob *distrenjob, int frame){ + distrenjob->frameset[frame].status = 2; + distrenjob->frameset[frame].time_to_render = (clock() - distrenjob[jobnum].frameset[frame].start_time); // Consider changing time-to-render to time-for-frame or something? general_info.total_frames_rendered++; // Increase total frames var for stats } /** Queuer: Adds files to the queue */ -void queue(struct blendjob *blendjob, int type, char *name, char *submitter, char *email, int priority, int mode, int spp, struct frameset *frameset) { +void queue(struct distrenjob *distrenjob, int type, char *name, char *submitter, char *email, int priority, int mode, int spp, struct frameset *frameset) { // Type: 1 = blender, add more types later // jobnum is the next available job number if(type == 1){ - blendjob->name = name; - blendjob->submitter = submitter; - blendjob->email = email; - blendjob->priority = priority; - blendjob->frameset = frameset; + distrenjob->name = name; + distrenjob->submitter = submitter; + distrenjob->email = email; + distrenjob->priority = priority; + distrenjob->frameset = frameset; } else{ // Throw error. @@ -205,27 +205,27 @@ jobnum++; // Advance the jobnumber for t -figures out how much of the job is done, where jobnum corresponds to the job number -removes finished jobs - @param blendjobs_head a pointer to a pointer because the head of the blendjobs linked list may need to be changed by blendjob_remove + @param distrenjobs_head a pointer to a pointer because the head of the distrenjobs linked list may need to be changed by distrenjob_remove */ -void status_report_generator(struct blendjob **blendjobs_head) +void status_report_generator(struct distrenjob **distrenjobs_head) { - struct blendjob *blendjob_ptr; + struct distrenjob *distrenjob_ptr; unsigned short workers_working; /*< used to count the total number of workers working */ unsigned int numjobs; /*< used to track number of jobs */ - blendjob_ptr = *blendjobs_head; + distrenjob_ptr = *distrenjobs_head; workers_working = 0; numjobs = 0; - while(blendjob_ptr) + while(distrenjob_ptr) { - if(blendjob_ptr->priority != 0) + if(distrenjob_ptr->priority != 0) /* If the job is not done, scan it */ { unsigned int framecounter; /*< to scan through frames */ unsigned long finished_frames; /*< variable that counts the completed frames */ unsigned int pending_frames; /*< variable that counts the assigned frames */ - float percent_frames_finished; /*< variable that stores the percent done of the blendjob */ + float percent_frames_finished; /*< variable that stores the percent done of the distrenjob */ unsigned int total_time; /*< total time taken to render all the completed frames for a job */ framecounter = 0; @@ -234,17 +234,17 @@ void status_report_generator(struct blen percent_frames_finished = 0; total_time = 0; - while(framecounter < blendjob_ptr->total_frames) + while(framecounter < distrenjob_ptr->total_frames) /* scans through frames, based on their status it runs a statement(s) */ { - if(blendjob_ptr->frameset[framecounter].status == 2) + if(distrenjob_ptr->frameset[framecounter].status == 2) /* If the frame is done */ { finished_frames ++; - total_time += blendjob_ptr->frameset[framecounter].time_to_render; + total_time += distrenjob_ptr->frameset[framecounter].time_to_render; } - if(blendjob_ptr->frameset[framecounter].status == 1) + if(distrenjob_ptr->frameset[framecounter].status == 1) /* If the frame is assigned */ { pending_frames ++; @@ -252,49 +252,49 @@ void status_report_generator(struct blen } framecounter ++; - } /* while(framecounter < blendjob_ptr->total_frames) */ + } /* while(framecounter < distrenjob_ptr->total_frames) */ // find the percent of completed frames - percent_frames_finished = (finished_frames / blendjob_ptr->total_frames) * 100; /*< @LordofWar: extraneous parentheses! */ + percent_frames_finished = (finished_frames / distrenjob_ptr->total_frames) * 100; /*< @LordofWar: extraneous parentheses! */ - /* updates values in the blendjob struct */ - blendjob_ptr->completed_frames = finished_frames; - blendjob_ptr->assigned_frames = pending_frames; - blendjob_ptr->percent_done = percent_frames_finished; - blendjob_ptr->avg_render_time = (total_time / finished_frames); /*< extraneous parentheses! */ - blendjob_ptr->time_remaining = (blendjob_ptr->avg_render_time * (blendjob_ptr->total_frames - finished_frames)); /*< extraneous parentheses! */ + /* updates values in the distrenjob struct */ + distrenjob_ptr->completed_frames = finished_frames; + distrenjob_ptr->assigned_frames = pending_frames; + distrenjob_ptr->percent_done = percent_frames_finished; + distrenjob_ptr->avg_render_time = (total_time / finished_frames); /*< extraneous parentheses! */ + distrenjob_ptr->time_remaining = (distrenjob_ptr->avg_render_time * (distrenjob_ptr->total_frames - finished_frames)); /*< extraneous parentheses! */ - if(finished_frames == blendjob_ptr->total_frames) + if(finished_frames == distrenjob_ptr->total_frames) /* If all frames are complete */ { - blendjob_ptr->priority = 0; /*< set priority to zero to indicate job is complete */ - blendjob_remove(blendjobs_head, blendjob_ptr); /*< remove this job from the linkedlist */ + distrenjob_ptr->priority = 0; /*< set priority to zero to indicate job is complete */ + distrenjob_remove(distrenjobs_head, distrenjob_ptr); /*< remove this job from the linkedlist */ general_info.total_finished_jobs++; /*< add one to the total finished jobs */ } - else if (finished_frames > blendjob_ptr->total_frames) + else if (finished_frames > distrenjob_ptr->total_frames) /* just in case ;-) */ { - fprintf(stderr, "%s:%d: finished_frames (%lu) > blendjob_ptr->total_frames (%d)", + fprintf(stderr, "%s:%d: finished_frames (%lu) > distrenjob_ptr->total_frames (%d)", __FILE__, __LINE__, finished_frames, - blendjob_ptr->total_frames); + distrenjob_ptr->total_frames); abort(); } } general_info.rendering_clients = workers_working; /*< should this be a +=? */ - blendjob_ptr = blendjob_ptr->next; /*< This is the essence of linked lists and iterating through them */ + distrenjob_ptr = distrenjob_ptr->next; /*< This is the essence of linked lists and iterating through them */ numjobs ++; - } /* while(blendjob_ptr) */ + } /* while(distrenjob_ptr) */ general_info.jobs_in_queue = (highest_jobnum - general_info.total_finished_jobs); /*< extraneous parentheses! */ } /** Structure Builder: This function creates frame array based on the total number of frames to be rendered, which will then be parsed by function frame_farmer. */ -void frame_num_struct_builder(struct blendjob *job, unsigned int startframe, unsigned int numframes) { +void frame_num_struct_builder(struct distrenjob *job, unsigned int startframe, unsigned int numframes) { int jobnum_new = highest_jobnum + 1; /* global vars will someday leave us */ unsigned int counter; @@ -323,7 +323,7 @@ void frame_num_struct_builder(struct ble @return 0 success, other: error */ -int frame_finder(struct blendjob *head, struct blendjob **job, struct frameset **frame) +int frame_finder(struct distrenjob *head, struct distrenjob **job, struct frameset **frame) { int your_frame; // your_frame is an integer value that will be given to the client as the frame number to render // UNUSED: int your_job; // @TODO: Fixme: do we need this var? you_job is an integer value that must ALSO be given to the client @@ -331,7 +331,7 @@ int frame_finder(struct blendjob *head, unsigned short int found; unsigned short int priority; - struct blendjob *blendjob_ptr; + struct distrenjob *distrenjob_ptr; found = 0; while(!found) @@ -342,11 +342,11 @@ int frame_finder(struct blendjob *head, && !found; priority --) /* Find the job with the highest priority */ - for(blendjob_ptr = head; - blendjob_ptr != NULL + for(distrenjob_ptr = head; + distrenjob_ptr != NULL && !found; - blendjob_ptr = blendjob_ptr->next) - if(blendjob_ptr->priority == priority) + distrenjob_ptr = distrenjob_ptr->next) + if(distrenjob_ptr->priority == priority) found = 1; if(!found) @@ -357,107 +357,107 @@ int frame_finder(struct blendjob *head, found = 0; for(your_frame = 0; - your_frame < blendjob_ptr->total_frames; + your_frame < distrenjob_ptr->total_frames; your_frame ++) - if(blendjob_ptr->frameset[your_frame].status == 0) + if(distrenjob_ptr->frameset[your_frame].status == 0) found = 1; if(!found) { /* there are no frames left in this job */ - blendjob_ptr->priority --; + distrenjob_ptr->priority --; /* If that job had no open frames for some reason, run the status report generator so that */ status_report_generator(&head); /* should the job be removed now? */ - fprintf(stderr, "Job %d is finished, this is probably the place to call the job-removal function\n", blendjob_ptr->jobnum); + fprintf(stderr, "Job %d is finished, this is probably the place to call the job-removal function\n", distrenjob_ptr->jobnum); } } /* while(!found) */ fprintf(stderr, "Missing apostrophe !!!!!!!!!!!!!!\n"); abort(); /* sets the value of the frame to 1, which means its taken !!!!!! MISSSING APOSTROPHE!!!!!!! */ - blendjob_ptr->frameset[your_frame].status++; + distrenjob_ptr->frameset[your_frame].status++; - blendjob_ptr->frameset[your_frame].start_time = clock(); + distrenjob_ptr->frameset[your_frame].start_time = clock(); - *job = blendjob_ptr; - *frame = &blendjob_ptr->frameset[your_frame]; + *job = distrenjob_ptr; + *frame = &distrenjob_ptr->frameset[your_frame]; return 0; } /** Checks for dying slaves */ -void blend_frame_watchdog(struct blendjob *blendjob_head) +void blend_frame_watchdog(struct distrenjob *distrenjob_head) { unsigned short int watchdog_forgiveness; /*< seconds to wait on a frame before re-assigning it */ - struct blendjob *blendjob_ptr; + struct distrenjob *distrenjob_ptr; unsigned int counter; watchdog_forgiveness = 3; /*< hours of forgiveness before frame is re-assigned */ - blendjob_ptr = blendjob_head; + distrenjob_ptr = distrenjob_head; - for(blendjob_ptr = blendjob_head; blendjob_ptr; blendjob_ptr = blendjob_ptr->next) + for(distrenjob_ptr = distrenjob_head; distrenjob_ptr; distrenjob_ptr = distrenjob_ptr->next) /* iterate through jobs */ - for(counter = 0; counter < blendjob_ptr->total_frames; counter ++) + for(counter = 0; counter < distrenjob_ptr->total_frames; counter ++) /* iterate through all frames for this job*/ { - if((blendjob_ptr->frameset[counter].start_time + (watchdog_forgiveness * 3600)) < clock()) + if((distrenjob_ptr->frameset[counter].start_time + (watchdog_forgiveness * 3600)) < clock()) /* If frame is not completed within the number of hours specified by watchdog_forgiveness Then change the frame status to unassigned */ - blendjob_ptr->frameset[counter].status = 0; + distrenjob_ptr->frameset[counter].status = 0; } } /** - Finds a blendjob struct based on the jobnum + Finds a distrenjob struct based on the jobnum @arg jobnum job number to search for @return NULL on job doesn't exist */ -struct blendjob *blendjob_get(struct blendjob *head, jobnum_t jobnum) +struct distrenjob *distrenjob_get(struct distrenjob *head, jobnum_t jobnum) { - struct blendjob *blendjob_ptr; + struct distrenjob *distrenjob_ptr; /* - The conditions of the for loop will leave blendjob_ptr at NULL if the end of the list is reached. It will leave it pointing to the correct job if it is found. + The conditions of the for loop will leave distrenjob_ptr at NULL if the end of the list is reached. It will leave it pointing to the correct job if it is found. */ - for(blendjob_ptr = head; - blendjob_ptr - && blendjob_ptr->jobnum != jobnum; - blendjob_ptr = blendjob_ptr->next); + for(distrenjob_ptr = head; + distrenjob_ptr + && distrenjob_ptr->jobnum != jobnum; + distrenjob_ptr = distrenjob_ptr->next); - return blendjob_ptr; + return distrenjob_ptr; } /** - Removes a blendjob from the blendjob linkelist. + Removes a distrenjob from the distrenjob linkelist. - @arg head a double pointer. the head pointer will have to be changed if blendjob == *head. Thus, make sure that the pointer points to the pointer to the head that all functions use. (I'm going to come back to this and misunderstand myself ;-)) + @arg head a double pointer. the head pointer will have to be changed if distrenjob == *head. Thus, make sure that the pointer points to the pointer to the head that all functions use. (I'm going to come back to this and misunderstand myself ;-)) */ -void blendjob_remove(struct blendjob **head, struct blendjob *bj) +void distrenjob_remove(struct distrenjob **head, struct distrenjob *bj) { - struct blendjob *previous_blendjob; + struct distrenjob *previous_distrenjob; if(bj == *head) *head = bj->next; else { - for(previous_blendjob = *head; - previous_blendjob - && previous_blendjob->next != bj; /*< stop on the blendjob that comes before bj */ - previous_blendjob = previous_blendjob->next) + for(previous_distrenjob = *head; + previous_distrenjob + && previous_distrenjob->next != bj; /*< stop on the distrenjob that comes before bj */ + previous_distrenjob = previous_distrenjob->next) /* all of the action is in the definition of the for loop itself */; /* This removes references to bj from the linked list. I.E., we now skip bj when iterating through the list */ - previous_blendjob->next = bj->next; + previous_distrenjob->next = bj->next; } /* @@ -489,7 +489,7 @@ int distrend_do_config(int argc, char *a CFG_END() }; - struct blendjob *distrenjob; + struct distrenjob *distrenjob; int tmp; @@ -529,7 +529,7 @@ int main(int argc, char *argv[]) /* @TODO: Put some arg-grabbing code here */ - struct blendjob *head; + struct distrenjob *head; int cont; struct distrend_listenset *listenset; @@ -565,7 +565,7 @@ int main(int argc, char *argv[]) struct frameset *frame; - struct blendjob *job; + struct distrenjob *job; /* If the client is idle, must be modified for climbing through linked list of clients (client->clientnum) */ if(clientstatus == CLIENTSTATUS_IDLE)