Changeset - 063d7fe1a866
[Not reviewed]
default
0 1 0
ethanzonca@localhost.localdomain - 16 years ago 2009-11-23 21:40:36
ethanzonca@localhost.localdomain
Slave updates
1 file changed with 16 insertions and 11 deletions:
0 comments (0 inline, 0 general)
src/server/slave.c
Show inline comments
 
@@ -75,59 +75,56 @@ int main(int argc, char *argv[])
 
      }
 
    else
 
      {
 
	fprintf(stderr, "Something is terribly wrong!");
 
      }
 

	
 

	
 

	
 
  /* Code-filled Variables  */
 
  int jobnum;          /* The job number that we're currently working */
 
  int framenum;        /* @TODO: Remotio should fill this */
 

	
 
  int gotframe = 0;    /* set this to 1 after data for a job is received from the server */
 
  int busy = 0;        /* Client business 1=busy 0=idle */
 

	
 
  char *urltoTar;      /* Full URL to the server-side location of job#.tgz */
 
  char *pathtoTar;     /* Full path to the location of the job#.tgz */
 

	
 
  char *urltoOutput;   /* Full URL where output is posted */
 
  char *pathtoJobfile; /* Full path to the job's main file */
 
  char *pathtoXml;     /* Full path to the job's xml file */
 
  char *pathtoOutput;  /* Full path to the output (rendered) file */
 
  char *outputExt;     /* Output Extension (e.g., JPG) */
 

	
 
  char *tarcmd;        /* Command to run for tar. Migrate to libtar sometime */
 
  char *outdir;        /* Output Directory for tar */
 
  char *jobdatapath;   /* Path to job data */
 

	
 
  struct distrenjob *myjob; /* Structure to hold data gathered from the XML file */
 

	
 
  /* If the server says that every frame for the last jobnum is finished,
 
   * OR if the data is getting old
 
   */
 
  if(1 == 0){
 
    delete_jobdata(jobnum, datadir);
 
  }
 
  int cont = 1;
 
  int framesInLocalQueue = 1;
 
  
 
  while(cont)
 
    {
 
  /* If we got a frame */
 
  if(gotframe != 0)
 
    if(framesInLocalQueue > 0)
 
    {
 
      /* @TODO: Add remotio hooks */
 
      // jobnum = remoteio_read(jobnum); /* Set jobnum from remoteio (we could use info from struct, but we need this info to download the xmlfile */
 
      jobnum = 0;
 
      //framenum = remoteio_read(jobnum); /* Set framenum from remoteio */
 
      framenum = 0;
 

	
 
      fprintf(stderr, "Received %d in job %d, preparing to render...\n", framenum, jobnum);
 
        fprintf(stderr, "Preparing to render frame %d in job %d\n", framenum, jobnum);
 

	
 
      /**
 
	 Variable Preparation
 
	 @todo find where to free() all of these
 
      */
 
      _distren_asprintf(&jobdatapath, "job%d", jobnum);
 
      _distren_asprintf(&urltoTar, "http://protofusion.org/distren/stor/job%d/job%d.tar.gz", jobnum); // Prepares URL to download from
 
      _distren_asprintf(&pathtoTar, "%s/stor/jobdata/job%d.tar.gz", datadir, jobnum); // Prepares destination to save to
 
      _distren_asprintf(&pathtoJobfile, "%s/%s/job.blend", datadir, jobdatapath ); // Prepares the path to the jobfile
 
      _distren_asprintf(&urltoOutput, "http://protofusion.org/distren/stor/tmp/", jobdatapath ); // Prepares the URL where output is posted
 
      _distren_asprintf(&pathtoXml, "%s/job%d/job%d.xml", datadir, jobnum ); // Prepares the path to the job's XML file
 

	
 
@@ -159,32 +156,40 @@ int main(int argc, char *argv[])
 
	  fprintf(stderr, "Well, the XML craziness may have worked. Maybe. \n");
 
	  
 
	  /* Frees things up if it was successful. xml2distrenjob() really (usually) only fails if malloc'ing inside it fails */
 
	  distrenjob_free(&myjob); 
 
	}
 
      else
 
	{
 
	  fprintf(stderr, "I think the XML craziness may have failed, so I'll terminate just for fun.\n");
 
	  return 1;
 
	}
 

	
 
      /* Variable-fillers which require XML */
 
      outputExt = myjob->output_format; /* @TODO: FIXME! <-- NEVER! */
 
        outputExt = myjob->output_format; /* @TODO: FIXME! <-- I WILL! */
 
      /* Prepares the path to the jobfile */
 
      _distren_asprintf(&pathtoOutput, "%s/job%d/output/job%d-frame%d.%s", datadir, jobnum, jobnum, framenum, outputExt );
 

	
 

	
 
      /** Series of ifs for jobtype based on xml content */
 
      if(1 == 1)
 
        while(1 == 1){
 
	exec_blender(myjob, pathtoJobfile, pathtoOutput, framenum); /* @TODO: This warning should be fixed :D */
 
          break;
 
        }
 

	
 
      /* When blender is finished, run this... */
 
      fprintf(stderr, "Finished frame %d in job %d, uploading...", framenum, jobnum);
 
      curlpost(pathtoOutput, urltoOutput); /* uploads (HTML POST) the output at outputpath to the server at outputurl */
 
      tell_the_server(DISTREN_REQUEST_DONEFRAME); /* Tells the server that it's finished rendering this frame */
 
      busy = 0;
 
      /* Slave now becomes idle, doesn't need to tell the server anything, ssh handles this. */
 
        framesInLocalQueue--;
 
    }
 

	
 
    // If the server says that every frame for the last jobnum is finished, OR if the data is getting old
 
    if(1 == 0){
 
      delete_jobdata(jobnum, datadir);
 
    }
 
  }
 

	
 
  return 0;
 
}
0 comments (0 inline, 0 general)