Changeset - df7e1f917a6d
[Not reviewed]
default
0 4 0
Ethan Zonca (ethanzonca) - 16 years ago 2010-03-14 13:45:31
e@ethanzonca.com
Added more checks, fixed paths, etc
4 files changed with 35 insertions and 21 deletions:
0 comments (0 inline, 0 general)
src/server/simpleslave.c
Show inline comments
 
@@ -112,6 +112,7 @@ int main(int argc, char *argv[])
 

	
 
  char *urltoOutput;   /* Full URL where output is posted */
 
  char *pathtoOutput;  /* Full path to the output (rendered) file */
 
  char *pathtoOutdir;  /* Full path to output directory */
 

	
 
  char *pathtoJob; /* Path to job data folder */
 
  char *pathtoJobfile; /* Full path to the job's main file */
 
@@ -139,7 +140,7 @@ int main(int argc, char *argv[])
 

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

	
 
        prepareJobPaths(jobnum, framenum, outputExt, datadir, &urltoTar, &pathtoTar, &pathtoJob, &pathtoJobfile, &urltoOutput, &pathtoOutput);
 
        prepareJobPaths(jobnum, framenum, outputExt, datadir, &urltoTar, &pathtoTar, &pathtoJob, &pathtoJobfile, &urltoOutput, &pathtoOutput, &pathtoOutdir);
 
        // free(outputExt);
 
        int dlret = downloadTar(urltoTar, pathtoTar);
 
        if(dlret == 0)
 
@@ -151,13 +152,16 @@ int main(int argc, char *argv[])
 

	
 
        unpackJob(pathtoJob, pathtoTar);
 

	
 
        /* Execute blender */
 
        fprintf(stderr,"Executing blender on file %s", pathtoJobfile);
 
        /* ignore return because directory may exist already */
 
        fprintf(stderr,"Creating output directory %s\n", pathtoOutdir);
 
        mkdir(pathtoOutdir, 0700);
 
        fprintf(stderr,"Marking frame started on server... ");
 
        _web_startframe(slavekey, password, jobnum, framenum);
 

	
 
        /* ignore return because directory may exist already */
 
        mkdir(pathtoOutput, 0700);
 
        /* Execute blender */
 
        fprintf(stderr,"Executing blender on file %s\n", pathtoJobfile);
 
        fprintf(stderr,"Directing output to file %s\n", pathtoOutput);
 

	
 
        _web_startframe(slavekey, password, jobnum, framenum);
 
        if(exec_blender(pathtoJobfile, pathtoOutput, framenum))
 
          {
 
            fprintf(stderr,"Error running Blender. Check your installation and/or your PATH.\n");
 
@@ -165,15 +169,23 @@ int main(int argc, char *argv[])
 
          }
 
        free(pathtoJobfile);
 

	
 
        /* Post-execution */
 
        fprintf(stderr, "Finished frame %d in job %d, uploading...\n", framenum, jobnum);
 
        uploadOutput(pathtoOutput, urltoOutput, jobnum, framenum, slavekey); // @TODO: Handle return value
 
        struct stat buffer;
 
        int fstatus = stat(pathtoOutput, &buffer);
 
        if(fstatus == -1){
 
          fprintf(stderr,"Frame was not rendered correctly! Scene may not have camera, or your blender installation is not working.\n");
 
          return 1;
 
        }
 
        else{
 
          /* Post-execution */
 
          fprintf(stderr, "Finished frame %d in job %d, uploading...\n", framenum, jobnum);
 
          uploadOutput(pathtoOutput, urltoOutput, jobnum, framenum, slavekey); // @TODO: Handle return value
 

	
 
        free(urltoOutput);
 
        free(pathtoOutput);
 
          free(urltoOutput);
 
          free(pathtoOutput);
 

	
 
        // Tell the server that rendering and upload are complete
 
	_web_finishframe(slavekey, password, jobnum, framenum);
 
          // Tell the server that rendering and upload are complete
 
          _web_finishframe(slavekey, password, jobnum, framenum);
 
        }
 
      }
 
    else
 
      fprintf(stderr,"Nothing to do. Idling...\n");
src/server/slave.c
Show inline comments
 
@@ -118,6 +118,7 @@ int main(int argc, char *argv[])
 

	
 
  char *urltoOutput;   /* Full URL where output is posted */
 
  char *pathtoOutput;  /* Full path to the output (rendered) file */
 
  char *pathtoOutdir;  /* Full path to output directory */
 

	
 
  char *pathtoJob;     /* Full path to job data folder */
 
  char *pathtoJobfile; /* Full path to the job's main file */
 
@@ -145,7 +146,7 @@ int main(int argc, char *argv[])
 

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

	
 
        prepareJobPaths(jobnum, framenum, outputExt, datadir, &urltoTar, &pathtoTar, &pathtoJob, &pathtoJobfile, &urltoOutput, &pathtoOutput);
 
        prepareJobPaths(jobnum, framenum, outputExt, datadir, &urltoTar, &pathtoTar, &pathtoJob, &pathtoJobfile, &urltoOutput, &pathtoOutput, &pathtoOutdir);
 
        free(outputExt);
 

	
 
        if(downloadTar(urltoTar, pathtoTar))
src/server/slavefuncs.c
Show inline comments
 
@@ -288,19 +288,19 @@ return 1; // Success
 
/** Executor function for Blender operations */
 
int exec_blender(char *input, char *output, int frame)
 
{
 
  fprintf(stderr,"Preparing to execute...\n");
 
  int ret;
 
  char *frame_str;
 
  _distren_asprintf(&frame_str, "%i", frame);
 

	
 
  char *command = "blender"; // @TODO: We currently expect this to be in PATH
 
  char *cmd[] = { command, "-b", "-o", output, input, "-f", frame_str, (char *)NULL }; // arguments for blender
 

	
 
  fprintf(stderr,"Preparing to execute command: %s \"-b\" \"-o\" %s %s \"-f\" %s\n", command, output, input, frame_str);
 

	
 
  char buf[10];
 
  struct execio *testrem;
 
  size_t readlen;
 

	
 
  _distren_asprintf(&frame_str, "%i", frame);
 

	
 
  fprintf(stderr,"Executing: %s\n", frame_str);
 
  ret = execio_open(&testrem, command, cmd);
 
  buf[9] = '\0';
 
@@ -477,7 +477,7 @@ int unpackJob(char *outdir, char *pathto
 
}
 

	
 

	
 
void prepareJobPaths(int jobnum, int framenum, char *outputExt, char *datadir, char **urltoTar,char **pathtoTar,char **pathtoJob, char **pathtoJobfile,char **urltoOutput,char **pathtoOutput)
 
void prepareJobPaths(int jobnum, int framenum, char *outputExt, char *datadir, char **urltoTar,char **pathtoTar,char **pathtoJob, char **pathtoJobfile,char **urltoOutput,char **pathtoOutput, char **pathtoOutdir)
 
{
 
  // Variable Preparation
 
  char *jobdatapath;
 
@@ -488,6 +488,7 @@ void prepareJobPaths(int jobnum, int fra
 
   _distren_asprintf(pathtoJobfile, "%s/%s/job.blend", datadir, jobdatapath ); // Prepares the path to the jobfile
 
   _distren_asprintf(urltoOutput, "http://distren.org/slaveUpload.php"); // Prepares the URL where output is posted
 
   _distren_asprintf(pathtoOutput, "%s/%s/output/job%d-frame%d.%s", datadir, jobdatapath, jobnum, framenum, outputExt );
 
   _distren_asprintf(pathtoOutdir, "%s/%s/output", datadir, jobdatapath);
 
   free(jobdatapath);
 
}
 

	
 
@@ -656,7 +657,7 @@ void _web_finishframe(int slavekey, char
 
  struct _web_memorystruct data = _web_getrequest(url);
 
  free(url);
 

	
 
  fprintf(stderr,"Got data: %s\n", data.memory);
 
  fprintf(stderr,"%s\n", data.memory);
 
  if(data.memory)
 
    free(data.memory);
 
}
 
@@ -667,7 +668,7 @@ void _web_startframe(int slavekey, char 
 
  struct _web_memorystruct data = _web_getrequest(url);
 
  free(url);
 

	
 
  fprintf(stderr,"Got data: %s\n", data.memory);
 
  fprintf(stderr,"%s\n", data.memory);
 
  if(data.memory)
 
    free(data.memory);
 
}
src/server/slavefuncs.h
Show inline comments
 
@@ -49,7 +49,7 @@ int job_build_path(char *filename, unsig
 
int downloadTar(char *url, char *destinationPath);
 
int uploadOutput(char *pathtoOutput, char *urltoOutput, int jobnum, int framenum, int slavekey);
 
int unpackJob(char *outdir, char *pathtoTar);
 
void prepareJobPaths(int jobnum, int framenum, char *outputExt, char *datadir, char **urltoTar,char **pathtoTar,char **pathtoJob, char **pathtoJobfile,char **urltoOutput,char **pathtoOutput);
 
void prepareJobPaths(int jobnum, int framenum, char *outputExt, char *datadir, char **urltoTar,char **pathtoTar,char **pathtoJob, char **pathtoJobfile,char **urltoOutput,char **pathtoOutput, char **pathtoOutdir);
 
int checkUsername(char *username);
 
void slaveTest();
 

	
0 comments (0 inline, 0 general)