Changeset - a1fb4d1ec4fa
[Not reviewed]
default
0 3 0
Ethan Zonca (ethanzonca) - 16 years ago 2010-02-13 18:52:42
e@ethanzonca.com
Reorganization, changes
3 files changed with 225 insertions and 166 deletions:
0 comments (0 inline, 0 general)
src/server/distrend.c
Show inline comments
 
@@ -79,22 +79,19 @@ struct general_info
 
   ********************************************* */
 

	
 
/* ************General Functions************* */
 
int xml_dump();
 
// int xml_dump();
 
int distrend_do();
 
int start_data(struct general_info *general_info);
 
void finish_frame(struct general_info *geninfo, struct distrenjob *distrenjob, int frame);
 
// int start_data(struct general_info *general_info);
 
int mortition(struct general_info *geninfo, struct distrenjob *job);
 
int restoreJobState(struct distrenjob *job);
 
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 distrenjob_enqueue(struct general_info *geninfo, struct distrenjob *job);
 
int change_job_priority(struct general_info *geninfo, struct distrenjob *job, int new_priority);
 
int find_jobframe(struct general_info *geninfo, struct distrenjob **job, struct frameset **frame);
 
int find_jobframe_from_job(struct distrenjob *distrenjob_ptr, struct distrenjob **job, struct frameset **frame);
 
int find_jobframe_new(struct general_info *geninfo, int rend_pwr, struct distrenjob **job, struct frameset **frame);
 
int find_jobframe_again(struct general_info *geninfo, int jobnum, int rend_pwr, struct distrenjob **job, struct frameset **frame);
 
// int restoreJobState(struct distrenjob *job);
 
// 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 distrenjob_enqueue(struct general_info *geninfo, struct distrenjob *job);
 
// int find_jobframe_from_job(struct distrenjob *distrenjob_ptr, struct distrenjob **job, struct frameset **frame);
 
// int find_jobframe_new(struct general_info *geninfo, int rend_pwr, struct distrenjob **job, struct frameset **frame);
 
// int find_jobframe_again(struct general_info *geninfo, int jobnum, int rend_pwr, struct distrenjob **job, struct frameset **frame);
 
void frame_watchdog(struct distrenjob *distrenjob_head);
 
struct distrenjob *distrenjob_get(struct distrenjob *head, jobnum_t jobnum);
 
void distrenjob_remove(struct general_info *geninfo, struct distrenjob *bj);
 
// struct distrenjob *distrenjob_get(struct distrenjob *head, jobnum_t jobnum);
 
// void distrenjob_remove(struct general_info *geninfo, struct distrenjob *bj);
 
int distrend_do_config(int argc, char *argv[], struct distrend_config **config);
 
int distrend_config_free(struct distrend_config *config);
 

	
 
@@ -157,11 +154,13 @@ int main(int argc, char *argv[])
 
  _distren_asprintf(&general_info.files.geninfo, "%s/general_info.xml",
 
		    general_info.config->datadir);
 

	
 
  /* @QUERY: Obselete?
 
  if(start_data(&general_info))
 
    {
 
      fprintf(stderr, "%s:%d: start_data() failed\n", __FILE__, __LINE__);
 
      return 1;
 
    }
 
    */
 

	
 
  /** MySQL Connection */
 
  struct distrend_mysql_con *conn;
 
@@ -172,14 +171,15 @@ int main(int argc, char *argv[])
 
    }
 

	
 
  /** pre-loaded jobs for testing */
 
  prepare_distrenjob(&general_info, 1, "awesome", "LordOfWar", 8, 1, 100, 640, 480);
 
  prepare_distrenjob(&general_info, 1, "hamburger", "ohnobinki", 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);
 

	
 
  /** Execute test function */
 
  interactiveTest(test, general_info);
 
  // interactiveTest(test, general_info);
 

	
 
  distrend_listen(general_info.config, &clients);
 

	
 
  int slaveKey = 0; // Remotio should set me on a per-slave basis
 
  /* Main Loop */
 
  while(!general_info.config->die)
 
    {
 
@@ -196,7 +196,7 @@ int main(int argc, char *argv[])
 
      /* If the client is idle, must be modified for climbing through linked list of clients (client->clientnum) */
 
      if(clientstatus == CLIENTSTATUS_IDLE)
 
	{
 
	  int returnnum = find_jobframe(&general_info, &job, &frame); // Finds a frame to render
 
	  int returnnum = find_jobframe(slaveKey, &job->jobnum, &frame->num); // Finds a frame to render @FIXME: Slavenum :D
 
	  if(returnnum)
 
	    {
 
	      fprintf(stderr,"No frames are available to render at this time. Idling...\n");
 
@@ -208,7 +208,7 @@ int main(int argc, char *argv[])
 
      /* If the client states that they finished the frame */
 
      	if(clientsays == DISTREN_REQUEST_DONEFRAME){
 
      	  clientstatus = CLIENTSTATUS_IDLE; // Sets the client back to idle
 
      	  finish_frame(&general_info, job, frame->num); // @TODO: Make sure this actually works.
 
      	  finish_frame(slaveKey, job->jobnum, frame->num); // @TODO: Make sure this actually works.
 
      	}
 
    } /* while(!general_info.config->die) */
 

	
 
@@ -228,10 +228,14 @@ int main(int argc, char *argv[])
 

	
 
/** Dumps all data in RAM to an xml file (such as current jobs, etc) which is parsed by start_data. Remember to invoke this before shutting down! @TODO: Fill this stub*/
 
// @QUERY: Obselete function, get rid of me!
 
/*
 
int xml_dump()
 
{
 
  return 0;
 
}
 
*/
 

	
 

	
 
/**
 
   Performs command stored in a client's request. @TODO: Fill stub
 
*/
 
@@ -244,13 +248,15 @@ int distrend_do()
 
    Fill variables at startup from XML dumps or defaults
 
 */
 
// @QUERY: Obselete function, as data is stored in sql now.
 

	
 
/*
 
int start_data(struct general_info *general_info)
 
{
 
  struct stat buffer;
 

	
 
  /**
 
     defaults
 
   */
 

	
 
// defaults
 

	
 
  memset(&general_info->head, '\0', sizeof(struct distrenjob));
 
  general_info->head.priority = 0;
 

	
 
@@ -284,26 +290,16 @@ int start_data(struct general_info *gene
 
  
 
  return 0;
 
}
 
*/
 

	
 
/** Finish-Setter: Sets a frame to the "completed" status.*/
 
// @QUERY: update `distren`.`Job` set `Finish_Confirmed`=1 where `Job_Key`='1';
 
void finish_frame(struct general_info *geninfo, struct distrenjob *distrenjob, int frame)
 
{
 
  distrenjob->frameset[frame].status = FRAMESETSTATUS_DONE;
 
  distrenjob->total_render_time = distrenjob->total_render_time + (clock() - distrenjob->frameset[frame].start_time);
 
  distrenjob->completed_frames ++;
 
  distrenjob->assigned_frames --;
 
  geninfo->total_frames_rendered ++; /*< Increase total frames var for stats */
 

	
 
  update_general_info(geninfo);
 
  updateJobStatsXML(distrenjob);
 
}
 

	
 
/**
 
   checks to see if a job is actually done.
 
   - scans the folder of the job to make sure all output files are present
 
*/
 
// @QUERY: Needs some complex query work
 

	
 
/*
 
int mortition(struct general_info *geninfo, struct distrenjob *job)
 
{
 
  short int isJobDone;
 
@@ -321,9 +317,9 @@ int mortition(struct general_info *genin
 
                        job->output_format);
 
      if(stat(path_and_number, &buffer) == -1)
 
        {
 
          /**
 
             missing frame found
 
           */
 

	
 
          //   missing frame found
 

	
 
          job->frameset[counter].status = FRAMESETSTATUS_UNASSIGNED;
 
          job->completed_frames--;
 
          geninfo->total_frames_rendered--;
 
@@ -334,23 +330,24 @@ int mortition(struct general_info *genin
 

	
 
  if(isJobDone)
 
    {
 
      /**
 
         all frames were accounted for
 
      */
 

	
 
    //   all frames were accounted for
 

	
 
      distrenjob_remove(geninfo, job);
 
      distrenjob_free(&job);
 
      update_xml_joblist(geninfo);
 
    }
 
  else
 
    /**
 
       if the job isn't done, have frame_finder() start from the first frame, allowing it to see the frames that are now unassigned 
 
    */
 

	
 
    //   if the job isn't done, have frame_finder() start from the first frame, allowing it to see the frames that are now unassigned
 

	
 
    job->prev_frame_index = -1;
 

	
 
  update_general_info(geninfo);
 

	
 
  return 0;
 
}
 
*/
 

	
 
/**
 
   scans the frames of a job to initialize a job after server
 
@@ -358,6 +355,8 @@ int mortition(struct general_info *genin
 
           1 if missing frames are found.
 
*/
 
// @QUERY: Obselete with mysql job/frame storage
 

	
 
/*
 
int restoreJobState(struct distrenjob *job)
 
{
 
  short int isJobDone;
 
@@ -368,7 +367,7 @@ int restoreJobState(struct distrenjob *j
 
  isJobDone = 1;
 
  for(counter = 0; counter < job->total_frames; counter++)
 
    {
 
      _distren_asprintf(&path_and_number, "stor/job%d/out/%d.%s", job->jobnum, job->frameset[counter].num, job->output_format); /*< @TODO this path is used in multiple places, construct/build/determine it in a central function */
 
      _distren_asprintf(&path_and_number, "stor/job%d/out/%d.%s", job->jobnum, job->frameset[counter].num, job->output_format); //< @TODO this path is used in multiple places, construct/build/determine it in a central function
 
      if(stat(path_and_number, &buffer) == 0)
 
        {
 
          job->frameset[counter].status = FRAMESETSTATUS_ASSIGNED;
 
@@ -381,6 +380,8 @@ int restoreJobState(struct distrenjob *j
 

	
 
  return !isJobDone;
 
}
 
*/
 

	
 

	
 
/**
 
   creates a structure from starting data, then calls another
 
@@ -389,6 +390,8 @@ int restoreJobState(struct distrenjob *j
 
   Passed strings must be free()d by the caller.
 
*/
 
// @QUERY: Likely obselete, as jobs are submitted via the web
 

	
 
/*
 
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;
 
@@ -410,7 +413,7 @@ int prepare_distrenjob(struct general_in
 
  distrenjob->priority = priority;
 
  distrenjob->width = width;
 
  distrenjob->height = height;
 
  /** sets the total number of frames in animation for status purposes */
 
  // sets the total number of frames in animation for status purposes
 
  distrenjob->total_frames = (end_frame - start_frame + 1);
 
  distrenjob->frameset = malloc(sizeof(struct frameset) * distrenjob->total_frames);
 
  if(!distrenjob->frameset)
 
@@ -421,7 +424,9 @@ int prepare_distrenjob(struct general_in
 
      return 1;
 
    }
 

	
 
  /** initialize frameset */
 

	
 

	
 
  // initialize frameset
 
  counter2 = start_frame;
 
  for(counter = 0; counter < distrenjob->total_frames; counter++)
 
    {
 
@@ -433,9 +438,9 @@ int prepare_distrenjob(struct general_in
 

	
 
  job_getserialfilename(&serialfile, geninfo, distrenjob->jobnum, 1);
 

	
 
  /**
 
     add job to queue
 
  */
 

	
 
//     add job to queue
 

	
 
  fprintf(stderr, "prepare_distrenjob(): attempting distrenjob_serialize(%d, \"%s\")\n",
 
          distrenjob->jobnum, serialfile);
 
  distrenjob_serialize(distrenjob, serialfile);
 
@@ -453,6 +458,8 @@ int prepare_distrenjob(struct general_in
 

	
 
  return 0;
 
}
 
*/
 

	
 

	
 

	
 
/**
 
@@ -460,6 +467,8 @@ int prepare_distrenjob(struct general_in
 
   Updates geninfo->jobs_in_queue.
 
*/
 
// @QUERY: Likely obselete, enqueueing is done via web interface
 

	
 
/*
 
int distrenjob_enqueue(struct general_info *geninfo, struct distrenjob *job)
 
{
 
  struct distrenjob *prev_job;
 
@@ -469,19 +478,19 @@ int distrenjob_enqueue(struct general_in
 
  head = &geninfo->head;
 
  prev_job = head;
 

	
 
  /**
 
     iterate through linked jobs
 
  */
 

	
 
//     iterate through linked jobs
 

	
 
  for(current_job = head->next; current_job; current_job = current_job->next)
 
  {
 
    fprintf(stderr, "enqueue loop iteration\n");
 
    if(job->priority < current_job->priority)
 
      {
 
        /**
 
           if job's priority is less than current_job's priority, insert job
 
           keep in mind 1 is the highest priority given to jobs, head has a
 
           priority of zero so it will always be before other jobs
 
        */
 

	
 
        //   if job's priority is less than current_job's priority, insert job
 
        //   keep in mind 1 is the highest priority given to jobs, head has a
 
        //   priority of zero so it will always be before other jobs
 

	
 
        prev_job->next = job;
 
        job->next = current_job;
 
        fprintf(stderr, "added job before jobname: ``%s''\n", current_job->name);
 
@@ -493,114 +502,21 @@ int distrenjob_enqueue(struct general_in
 
    prev_job = current_job;
 
  }
 

	
 
  /**
 
     if it has reached the end of the list, add job there
 
  */
 

	
 
  // if it has reached the end of the list, add job there
 

	
 
  prev_job->next = job;
 
  fprintf(stderr, "added job at end of queue\n");
 

	
 
  geninfo->jobs_in_queue ++;
 
  return 0;
 
}
 

	
 
/** Changes the priority of an existing (and maybe running) job. @arg head I may end up changing the head if job == head */
 
// @QUERY: update `distren`.`Job` set `Priority`='12', `Finish_Confirmed`=1 where `Job_Key`='1';
 
int change_job_priority(struct general_info *geninfo, struct distrenjob *job, int new_priority){
 
  struct distrenjob *current_job;
 
  struct distrenjob *prev_job;
 
  char *serialname;
 

	
 
  distrenjob_remove(geninfo, job);
 
  job->priority = new_priority;
 

	
 
  prev_job = &geninfo->head;
 

	
 
  if(job->frameset[0].status == FRAMESETSTATUS_UNASSIGNED)
 
    /**
 
       if job was not yet started
 
    */
 
    {
 
      distrenjob_enqueue(geninfo, job);
 
      return 0;
 
    }
 

	
 
  /**
 
     iterate through linked list of jobs 
 
  */
 
    for(current_job = &geninfo->head;
 
        current_job != NULL
 
          && job->priority > current_job->priority;
 
        current_job = current_job->next)
 
      prev_job = current_job;
 

	
 
    prev_job->next = job;
 
    job->next = current_job;
 

	
 

	
 
  update_xml_joblist(geninfo);
 
  /** reserialize after changes */
 
  job_getserialfilename(&serialname, geninfo, job->jobnum, 0);
 
  distrenjob_serialize(job, serialname);
 
  free(serialname);
 

	
 
  return 0;
 
}
 

	
 
/**
 
  Frame Finder: matches your computer up with a lovely frame to render, starts looking at oldest job first
 
  @TODO: We must return both jobnum and framenum
 
  @TODO: Add calls in main()
 
  @return 0 success, other: error
 
*/
 
// @QUERY: Frame_Get()
 
int find_jobframe(struct general_info *geninfo, struct distrenjob **job, struct frameset **frame)
 
{
 
  if(geninfo->hibernate)
 
    return 1;
 

	
 
  unsigned int frame_counter;
 
  unsigned short int found;
 

	
 
  struct distrenjob *distrenjob_ptr;
 

	
 
  found = 0;
 
  /* iterate through jobs from first to last */
 
  for(distrenjob_ptr = geninfo->head.next; distrenjob_ptr && !distrenjob_ptr->hibernate; distrenjob_ptr = distrenjob_ptr->next)
 
  {
 
    for(frame_counter = (distrenjob_ptr->prev_frame_index + 1); frame_counter < distrenjob_ptr->total_frames; frame_counter ++)
 
    {
 
      if(distrenjob_ptr->frameset[frame_counter].status == FRAMESETSTATUS_UNASSIGNED) // jobframe found
 
      {
 
        found = 1;
 
        distrenjob_ptr->frameset[frame_counter].status = FRAMESETSTATUS_ASSIGNED;
 
        distrenjob_ptr->frameset[frame_counter].start_time = clock();
 
        distrenjob_ptr->assigned_frames++;
 
        distrenjob_ptr->prev_frame_index = frame_counter;
 
        updateJobStatsXML(distrenjob_ptr);
 
      }
 

	
 
      if(found)
 
        break;
 
    }
 

	
 
    if(found)
 
      break;
 
  }
 

	
 
  if(!found)
 
    {
 
      fprintf(stderr, "No more jobs to render\n");
 
      sleep(1); /*< @todo eliminate the need for this line*/
 
      return 1;
 
    }
 

	
 
  *job = distrenjob_ptr;
 
  *frame = &distrenjob_ptr->frameset[frame_counter];
 

	
 
  return 0;
 
}
 

	
 
// @QUERY: Obselete?
 
/*
 
int find_jobframe_from_job(struct distrenjob *distrenjob_ptr, struct distrenjob **job, struct frameset **frame)
 
{
 
  unsigned int frame_counter;
 
@@ -636,9 +552,12 @@ int find_jobframe_from_job(struct distre
 

	
 
  return 0;
 
}
 
*/
 

	
 

	
 
// find a frame to render when the job that the last frame was for no longer exists
 
// @QUERY: Obselete?
 
/*
 
int find_jobframe_new(struct general_info *geninfo, int rend_pwr, struct distrenjob **job, struct frameset **frame)
 
{
 
  if(geninfo->hibernate)
 
@@ -653,16 +572,16 @@ int find_jobframe_new(struct general_inf
 

	
 
  greatest_power_difference = -10000;
 
  found = 0;
 
  /* iterate through jobs from first to last */
 
  // iterate through jobs from first to last
 
  for(distrenjob_ptr = geninfo->head.next;
 
      distrenjob_ptr && !distrenjob_ptr->hibernate;
 
      distrenjob_ptr = distrenjob_ptr->next)
 
  {
 
          if(distrenjob_ptr->prev_frame_index < (distrenjob_ptr->total_frames - 1))
 
          {
 
            /**
 
               Why is the number 11 found here again? --ohnobinki
 
             */
 

	
 
             //  Why is the number 11 found here again? --ohnobinki
 

	
 
                  power_difference = (((float)geninfo->total_render_power / (float)geninfo->total_priority_pieces) * ((float)distrenjob_ptr->priority));
 
                  power_difference = power_difference - (float)distrenjob_ptr->assigned_render_power;
 

	
 
@@ -688,9 +607,12 @@ int find_jobframe_new(struct general_inf
 

	
 
  return 0;
 
}
 
*/
 

	
 

	
 
// gets a frame to render from the same job that the previously rendered frame was from
 
// @QUERY: Obselete?
 
/*
 
int find_jobframe_again(struct general_info *geninfo, int jobnum, int rend_pwr, struct distrenjob **job, struct frameset **frame)
 
{
 
  if(geninfo->hibernate)
 
@@ -721,6 +643,8 @@ int find_jobframe_again(struct general_i
 

	
 
  return 0;
 
}
 
*/
 

	
 

	
 
/** Checks for dead, latent, or stale slaves */
 
void frame_watchdog(struct distrenjob *distrenjob_head)
 
@@ -756,13 +680,14 @@ void frame_watchdog(struct distrenjob *d
 
   @return NULL on job doesn't exist
 
 */
 
// @QUERY: Obselete
 
/*
 
struct distrenjob *distrenjob_get(struct distrenjob *head, jobnum_t jobnum)
 
{
 
  struct distrenjob *distrenjob_ptr;
 

	
 
  /*
 
    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.
 
   */
 

	
 
   // 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(distrenjob_ptr = head;
 
      distrenjob_ptr
 
        && distrenjob_ptr->jobnum != jobnum;
 
@@ -770,7 +695,7 @@ struct distrenjob *distrenjob_get(struct
 

	
 
  return distrenjob_ptr;
 
}
 

	
 
*/
 

	
 
/**
 
   Removes a distrenjob from the distrenjob linked list. It does not free the
 
@@ -780,23 +705,25 @@ struct distrenjob *distrenjob_get(struct
 
   @arg head pointer to the head of the linkedlist of distrenjobs
 
 */
 
// @QUERY: Obselete: removal done via web interface
 
/*
 
void distrenjob_remove(struct general_info *geninfo, struct distrenjob *bj)
 
{
 
  struct distrenjob *previous_distrenjob;
 

	
 
  for(previous_distrenjob = &geninfo->head;
 
      previous_distrenjob
 
        && previous_distrenjob->next != bj; /*< stop on the distrenjob that comes before bj */
 
        && previous_distrenjob->next != bj; //< stop on the distrenjob that comes before bj
 
      previous_distrenjob = previous_distrenjob->next)
 
    ;
 

	
 
  /*
 
    This removes references to bj from the linked list. I.E., we now skip bj when iterating through the list
 
  */
 

	
 
    // This removes references to bj from the linked list. I.E., we now skip bj when iterating through the list
 

	
 
  previous_distrenjob->next = bj->next;
 

	
 
  geninfo->jobs_in_queue --;
 
}
 
*/
 

	
 

	
 
/* Grabs config info from confs */
 
@@ -1248,6 +1175,7 @@ int printAllJobnums(struct distrenjob *h
 
}
 

	
 
/** Interactive test for the queuing system */
 
/* @QUEUE: Test uses methods not present in C code using mysql web-based system
 
int interactiveTest(int test, struct general_info general_info){
 
  int command;
 
  jobnum_t jobnum;
 
@@ -1341,6 +1269,7 @@ int interactiveTest(int test, struct gen
 
   }
 
  return 0;
 
}
 
*/
 

	
 
/**
 
   constructs the filename for a distrenjob's serialized XML
src/server/mysql.c
Show inline comments
 
@@ -22,6 +22,7 @@
 
#include <mysql/mysql.h>
 

	
 
#include "common/asprintf.h"
 
#include "common/protocol.h"
 

	
 
#include <stdio.h>
 
#include <string.h>
 
@@ -149,3 +150,122 @@ int mysqlResultFree(distrend_mysql_resul
 

	
 
  return 0;
 
}
 

	
 
/**
 
   Querying Functions
 
 */
 

	
 
/** Finish-Setter: Sets a frame to the "completed" status.*/
 
// @QUERY: update `distren`.`Job` set `Finish_Confirmed`=1 where `Job_Key`='1' and `Frame` = somenumber;
 
void finish_frame(int slaveKey, int jobKey, int frameNum)
 
{
 
  // Check to make sure the slavekey is the one who rendered the frame before finishing :D
 
  /*
 
  distrenjob->frameset[frame].status = FRAMESETSTATUS_DONE;
 
  distrenjob->total_render_time = distrenjob->total_render_time + (clock() - distrenjob->frameset[frame].start_time);
 
  distrenjob->completed_frames ++;
 
  distrenjob->assigned_frames --;
 
  geninfo->total_frames_rendered ++; //< Increase total frames var for stats
 

	
 
  update_general_info(geninfo);
 
  updateJobStatsXML(distrenjob);
 
  */
 
}
 

	
 
/** Changes the priority of an existing (and maybe running) job. @arg head I may end up changing the head if job == head */
 
// @QUERY: update `distren`.`Job` set `Priority`='12', `Finish_Confirmed`=1 where `Job_Key`='1';
 
int change_job_priority(int jobKey, int newPriority){
 
  /*
 
  struct distrenjob *current_job;
 
  struct distrenjob *prev_job;
 
  char *serialname;
 

	
 
  distrenjob_remove(geninfo, job);
 
  job->priority = new_priority;
 

	
 
  prev_job = &geninfo->head;
 

	
 
  if(job->frameset[0].status == FRAMESETSTATUS_UNASSIGNED)
 

	
 
      //  if job was not yet started
 

	
 
    {
 
      distrenjob_enqueue(geninfo, job);
 
      return 0;
 
    }
 

	
 

	
 
    // iterate through linked list of jobs
 
    for(current_job = &geninfo->head;
 
        current_job != NULL
 
          && job->priority > current_job->priority;
 
        current_job = current_job->next)
 
      prev_job = current_job;
 

	
 
    prev_job->next = job;
 
    job->next = current_job;
 

	
 

	
 
  update_xml_joblist(geninfo);
 
  // reserialize after changes
 
  job_getserialfilename(&serialname, geninfo, job->jobnum, 0);
 
  distrenjob_serialize(job, serialname);
 
  free(serialname);
 
*/
 
  return 0;
 
}
 

	
 
/**
 
  Frame Finder: matches your computer up with a lovely frame to render, starts looking at oldest job first
 
  @TODO: We must return both jobnum and framenum
 
  @TODO: Add calls in main()
 
  @return 0 success, other: error
 
*/
 
// @QUERY: Frame_Get()
 
int find_jobframe(int slaveKey, int *jobKey, int *frameNum)
 
{
 
  /*
 
  if(geninfo->hibernate)
 
    return 1;
 

	
 
  unsigned int frame_counter;
 
  unsigned short int found;
 

	
 
  struct distrenjob *distrenjob_ptr;
 

	
 
  found = 0;
 
  // iterate through jobs from first to last
 
  for(distrenjob_ptr = geninfo->head.next; distrenjob_ptr && !distrenjob_ptr->hibernate; distrenjob_ptr = distrenjob_ptr->next)
 
  {
 
    for(frame_counter = (distrenjob_ptr->prev_frame_index + 1); frame_counter < distrenjob_ptr->total_frames; frame_counter ++)
 
    {
 
      if(distrenjob_ptr->frameset[frame_counter].status == FRAMESETSTATUS_UNASSIGNED) // jobframe found
 
      {
 
        found = 1;
 
        distrenjob_ptr->frameset[frame_counter].status = FRAMESETSTATUS_ASSIGNED;
 
        distrenjob_ptr->frameset[frame_counter].start_time = clock();
 
        distrenjob_ptr->assigned_frames++;
 
        distrenjob_ptr->prev_frame_index = frame_counter;
 
        updateJobStatsXML(distrenjob_ptr);
 
      }
 

	
 
      if(found)
 
        break;
 
    }
 

	
 
    if(found)
 
      break;
 
  }
 

	
 
  if(!found)
 
    {
 
      fprintf(stderr, "No more jobs to render\n");
 
      sleep(1); //< @todo eliminate the need for this line
 
      return 1;
 
    }
 

	
 
  *job = distrenjob_ptr;
 
  *frame = &distrenjob_ptr->frameset[frame_counter];
 
*/
 
  return 0;
 
}
src/server/mysql.h
Show inline comments
 
@@ -55,4 +55,14 @@ distrend_mysql_result_t mysqlQuery(struc
 
 */
 
int mysqlResultFree(distrend_mysql_result_t result);
 

	
 

	
 
/** Import */
 

	
 
void finish_frame(int slaveKey, int jobKey, int frameNum);
 
int change_job_priority(int jobKey, int newPriority);
 
int find_jobframe(int slaveKey, int *jobKey, int *frameNum);
 

	
 

	
 

	
 

	
 
#endif /* MYSQL_H_ */
0 comments (0 inline, 0 general)