Changeset - 14cd2541024e
[Not reviewed]
default
0 4 0
Ethan Zonca (ethanzonca) - 16 years ago 2010-02-16 22:34:40
e@ethanzonca.com
Updated test interface, moved/cleaned up various functions
4 files changed with 57 insertions and 192 deletions:
0 comments (0 inline, 0 general)
src/server/distrend.c
Show inline comments
 
@@ -77,37 +77,24 @@ struct general_info
 

	
 
/* *********************************************
 
   Function Prototypes
 
   ********************************************* */
 

	
 
/* ************General Functions************* */
 
// int xml_dump();
 
int distrend_do();
 
int start_data(struct general_info *general_info);
 
int mortition(struct general_info *geninfo, struct distrenjob *job);
 
void frame_watchdog(struct distrenjob *distrenjob_head);
 
int distrend_do_config(int argc, char *argv[], struct distrend_config **config);
 
int distrend_config_free(struct distrend_config *config);
 

	
 
/* **************XML Functions**************** */
 
void update_general_info(struct general_info *geninfo);
 
int import_general_info(struct general_info *general_info);
 
int restore_distrenjob(struct general_info *geninfo, struct distrenjob **distrenjob, jobnum_t jobnum);
 
int updateJobStatsXML(struct distrenjob *job);
 
int update_xml_joblist(struct general_info *geninfo);
 
int createQueueFromXML(struct general_info *geninfo);
 
int reCreateQueueFromXML(struct general_info *geninfo, xmlDocPtr doc, xmlNodePtr current);
 

	
 
/* **************Test Functions**************** */
 
int printFrameInfo(struct frameset *frame);
 
int printJob(struct distrenjob *job);
 
int printJobInfo(struct distrenjob *job);
 
int printAllJobnums(struct distrenjob *head);
 
int interactiveTest(int test, struct general_info general_info);
 
int job_getserialfilename(char **filename, struct general_info *geninfo, unsigned int jobnum, int createdir);
 
int distren_mkdir_recurse(char *dirname);
 
int interactiveTest(int test, struct general_info general_info, distrend_mysql_conn_t conn);
 

	
 
/* **************** Main ********************* */
 
int main(int argc, char *argv[])
 
{
 
  /* Parse arguments */
 
  int counter;
 
@@ -119,13 +106,13 @@ int main(int argc, char *argv[])
 
  {
 
    CLIENTSTATUS_UNINITIALIZED = 0,
 
    CLIENTSTATUS_BUSY = 1,
 
    CLIENTSTATUS_IDLE = 2
 
  } clientstatus;
 

	
 
  xmlinit();
 
  // xmlinit();
 

	
 
  for(counter = 0; counter < argc; counter ++)
 
    {
 
      if(strcmp(argv[counter], "-h") == 0)
 
      {
 
    	  fprintf(stderr, "Usage: distrend [option] \nStarts the distrend server\n\t-h\tshow this help\n\t-t\tlaunches queue testing interface \n");
 
@@ -145,20 +132,22 @@ int main(int argc, char *argv[])
 

	
 
  /** preset paths */
 
  _distren_asprintf(&general_info.files.geninfo, "%s/general_info.xml",
 
		    general_info.config->datadir);
 

	
 
  /** MySQL Connection */
 
  fprintf(stderr,"Connecting to mysql...\n");
 
  if(mysqlConnect(&general_info.conn))
 
    {
 
      fprintf(stderr, "%s:%d: mysqlConnect() failed\n", __FILE__, __LINE__);
 
      return 1;
 
    }
 
  fprintf(stderr,"Finished connecting!\n");
 

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

	
 
  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)
 
@@ -423,205 +412,71 @@ int update_xml_joblist(struct general_in
 
  xmlFreeTextWriter(writer);
 
  return 0;
 
}
 

	
 
/* ************************** Test Functions ************************* */
 

	
 
/** Prints info about frames in a frameset */
 
int printFrameInfo(struct frameset *frame)
 
{
 
  char *status;
 

	
 
  status = NULL;
 

	
 
  switch(frame->status)
 
  {
 
    case FRAMESETSTATUS_UNASSIGNED:
 
      _distren_asprintf(&status, "%s", "unassigned");
 
      break;
 
    case FRAMESETSTATUS_ASSIGNED:
 
      _distren_asprintf(&status, "%s", "assigned");
 
      break;
 
    case FRAMESETSTATUS_DONE:
 
      _distren_asprintf(&status, "%s", "completed");
 
      break;
 
    case FRAMESETSTATUS_CANCELED:
 
      _distren_asprintf(&status, "%s", "canceled");
 
  }
 

	
 
  printf("frame #: %d --> %s\n", frame->num, status);
 
  free(status);
 

	
 
  return 0;
 
}
 

	
 
/** Prints information about all frames in a job */
 
int printJob(struct distrenjob *job)
 
{
 
  int counter;
 
  fprintf(stderr, "frame_num: status\n");
 
  for(counter = 0; counter < job->total_frames; counter++)
 
    {
 
      printFrameInfo(&job->frameset[counter]);
 
    }
 

	
 
  return 1;
 
}
 

	
 
/** Prints information about a job */
 
int printJobInfo(struct distrenjob *job)
 
{
 
  fprintf(stderr, "type: %d\n", job->type);
 
  fprintf(stderr, "name: %s\n", job->name);
 
  fprintf(stderr, "submitter: %s\n", job->submitter);
 
  fprintf(stderr, "priority: %d\n", job->priority);
 
  fprintf(stderr, "completed: %d\n", job->completed_frames);
 
  fprintf(stderr, "assigned: %d\n", job->assigned_frames);
 
  fprintf(stderr, "total: %d\n", job->total_frames);
 
  fprintf(stderr, "watchdog: %d\n", job->watchdog_forgiveness);
 
  fprintf(stderr, "hibernate: %d\n", job->hibernate);
 
  fprintf(stderr, "prev_frame: %d\n", job->prev_frame_index);
 
  fprintf(stderr, "render power: %ld\n", job->assigned_render_power);
 

	
 
  return 1;
 
}
 

	
 
/** Print all jobnums in the queue */
 
int printAllJobnums(struct distrenjob *head)
 
{
 
  struct distrenjob *current_job;
 
  int total_jobs;
 
  fprintf(stderr, "job numbers in the order they will be processed:\n");
 

	
 
  total_jobs = 0;
 
  for(current_job = head->next; current_job; current_job = current_job->next)
 
    {
 
      fprintf(stderr, "%d: %s\n", current_job->jobnum, current_job->name);
 
      total_jobs++;
 
    }
 

	
 
  fprintf(stderr, "\n%d jobs in queue\n\n", total_jobs);
 

	
 
  return 1;
 
}
 

	
 
/** 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){
 
/* @QUEUE: Test uses methods not present in C code using mysql web-based system */
 
int interactiveTest(int test, struct general_info general_info, distrend_mysql_conn_t conn){
 
  int command;
 
  jobnum_t jobnum;
 
  struct distrenjob *tmp_job;
 
  struct frameset *tmp_frame;
 
  int type;
 
  char *name;
 
  char *submitter;
 
  char *email;
 
  int priority;
 
  int width;
 
  int height;
 
  int start_frame;
 
  int end_frame;
 
  size_t read_buf;
 
  fprintf(stderr,"Hello!\n");
 
  int32_t slaveKey = 0;
 
  int32_t jobKey = 0;
 
  int32_t frameNum = 0;
 
  int32_t newPriority = 0;
 
  int tmp = 0;
 

	
 
  while(test == 1)
 
   {
 
     fprintf(stderr, "Welcome to DistRen Alpha Interactive Test Mode\n\n");
 
     fprintf(stderr, "\t1 \tPrint all frames in a job\n");
 
     fprintf(stderr, "\t2 \tExamine certain job\n");
 
     fprintf(stderr, "\t3 \tGet a frame to render\n");
 
     fprintf(stderr, "\t4 \tAdd a job\n");
 
     fprintf(stderr, "\t5 \tDelete a job\n");
 
     fprintf(stderr, "\t6 \tPrint jobnums in queue\n");
 
     fprintf(stderr, "\t7 \tPrint general info\n");
 
     fprintf(stderr, "\t8 \tQuit\n");
 
     fprintf(stderr, "\t1 \tGet a frame to render\n");
 
     fprintf(stderr, "\t2 \tChange job priority\n");
 
     fprintf(stderr, "\t3 \tSet frame finished\n");
 
     fprintf(stderr, "\t4 \tQuit\n");
 

	
 
     scanf("%d", &command);
 

	
 
     switch(command)
 
     {
 
     case 1:
 
       fprintf(stderr, "Job number: ");
 
       scanf("%d", &jobnum);
 
       printJob(distrenjob_get(&general_info.head, jobnum));
 
       fprintf(stderr, "Got frame: ");
 
       find_jobframe(conn, slaveKey, jobKey, frameNum);
 
       fprintf(stderr, "jobKey: %d, frameNum: %d\n",jobKey,frameNum);
 
       break;
 
     case 2:
 
       fprintf(stderr, "Job number: ");
 
       scanf("%d", &jobnum);
 
       printJobInfo(distrenjob_get(&general_info.head, jobnum));
 
       fprintf(stderr,"Job key: ");
 
       scanf("%d", &tmp);
 
       jobKey = tmp;
 

	
 
       fprintf(stderr,"New priority: ");
 
       scanf("%d", &tmp);
 
       newPriority = tmp;
 

	
 
       change_job_priority(conn, jobKey, newPriority);
 
       fprintf(stderr,"Changed!");
 
       break;
 
     case 3:
 
       general_info.total_render_power ++;
 
       if(!find_jobframe_again(&general_info, -1, 1, &tmp_job, &tmp_frame))
 
       {
 
           fprintf(stderr, "frame was found, details below\n");
 
           fprintf(stderr, "Job#:%d\n", tmp_job->jobnum);
 
           fprintf(stderr, "Frame#:%d\n", tmp_frame->num);
 
       }
 
       fprintf(stderr,"Slave Key: ");
 
       scanf("%d", &tmp);
 
       slaveKey = tmp;
 

	
 
       fprintf(stderr,"Job Key: ");
 
       scanf("%d", &tmp);
 
       jobKey = tmp;
 

	
 
       fprintf(stderr,"Frame Number: ");
 
       scanf("%d", &tmp);
 
       frameNum = tmp;
 

	
 
       finish_frame(conn, slaveKey, jobKey, frameNum);
 
       fprintf(stderr,"Finished Frame!\n");
 
       break;
 
     case 4:
 
       name = NULL;
 
       submitter = NULL;
 
       email = NULL;
 

	
 
       fprintf(stderr, "\nType: \n\t 1 \t blender\n\t 2 \t povray\n"); scanf("%d", &type);
 
       fprintf(stderr, "\nName: ");        scanf("\n"); getline(&name, &read_buf, stdin);
 
       fprintf(stderr, "\nSubmitter: ");                getline(&submitter, &read_buf, stdin);
 
       fprintf(stderr, "\nEmail: ");                    getline(&email, &read_buf, stdin);
 
       fprintf(stderr, "\nPriority: ");                 scanf("%d", &priority);
 
       fprintf(stderr, "\nStart frame: ");              scanf("%d", &start_frame);
 
       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, priority, start_frame, end_frame, width, height);
 
       return 0;
 
       break;
 
     case 5:
 
       fprintf(stderr, "\nJob number: ");
 
       scanf("%d", &jobnum);
 
       distrenjob_remove(&general_info, distrenjob_get(&general_info.head, jobnum));
 
       break;
 
     case 6:
 
       printAllJobnums(&general_info.head);
 
       break;
 
     case 7:
 
       fprintf(stderr, "\nHighest job number: %d", general_info.highest_jobnum);
 
       fprintf(stderr, "\nJobs in queue: %d", general_info.jobs_in_queue);
 
       fprintf(stderr, "\nTotal frames rendered: %d", general_info.total_frames_rendered);
 
       fprintf(stderr, "\nTimestamp: %lu", (long)general_info.timestamp);
 
       fprintf(stderr, "\nTotal priority pieces: %ld", general_info.total_priority_pieces);
 
       fprintf(stderr, "\nTotal render power: %ld\n", general_info.total_render_power);
 
       break;
 
     case 8:
 
       fprintf(stderr,"Goodbye.\n");
 
       test = 0;
 
     default:
 
       fprintf(stderr, "Invalid input, please try again.\n");
 
     }
 
  return 0;
 
   }
 
  return 0;
 
}
 
*/
 

	
 

	
 
/**
 
   @TODO: reuse for constructing data paths?
 
   constructs the filename for a distrenjob's serialized XML
 
   to be stored/retrieved from/in.
 
   @arg filename pointer to filename allocated using something
 
           malloc() and free() compatible. Must be free()ed by the
 
	   caller
 
   @return 0 on success
 
 */
 
int job_getserialfilename(char **filename, struct general_info *geninfo, unsigned int jobnum, int createdir)
 
{
 
  _distren_asprintf(filename, "%s/stor/job/%d/distrenjob.xml",
 
		    geninfo->config->datadir,
 
		    jobnum);
 
  if(!*filename)
 
    return 1;
 
  
 
  if(createdir)
 
    return distren_mkdir_recurse(*filename);
 
  
 
  return 0;
 
}
 

	
src/server/mysql.c
Show inline comments
 
@@ -82,15 +82,15 @@ struct distrend_mysql_result
 
 */
 

	
 
int mysqlConnect(distrend_mysql_conn_t *conn)
 
{
 
  MYSQL *mysqlconn;
 

	
 
  char *server = "zserver1";
 
  char *server = "zserver2";
 
  char *user = "distren";
 
  char *password = "secretpassword";
 
  char *password = "HwLxuBqTvJ6J7FWj";
 
  char *database = "distren";
 

	
 
  mysqlconn = mysql_init(NULL);
 
  mysql_options(mysqlconn, MYSQL_OPT_RECONNECT,"true");
 

	
 
  if(!mysql_real_connect(mysqlconn, server, user, password, database, 0, NULL, 0))
src/server/slavefuncs.c
Show inline comments
 
@@ -327,6 +327,14 @@ int distren_mkdir_recurse(char *dirname)
 
          nextdir[counter] = '/';
 
        }
 
    }
 

	
 
  return 0;
 
}
 

	
 
/**
 
 @TODO: Use for constructing path to job data locally and/or on data.distren.org
 
 */
 
int job_build_path(char *filename, unsigned int jobnum)
 
{
 
  return 0;
 
}
src/server/slavefuncs.h
Show inline comments
 
@@ -42,7 +42,9 @@ int register_user(char *username, char *
 
int login_user(char *username);
 
int conf_replace(char *conffile, char *wordtoreplace, char *replacewith);
 
int exec_blender(char *input, char *output, int frame);
 
void xmlinit();
 
void xmlcleanup();
 
int distren_mkdir_recurse(char *dirname);
 
int job_build_path(char *filename, unsigned int jobnum);
 

	
 
#endif
0 comments (0 inline, 0 general)