diff --git a/src/server/simpleslave.c b/src/server/simpleslave.c --- a/src/server/simpleslave.c +++ b/src/server/simpleslave.c @@ -109,6 +109,7 @@ int main(int argc, char *argv[]) char *urltoTar; /* Full URL to the server-side location of job#.tgz */ char *pathtoTar; /* Full path to the location of the job#.tgz */ + char *pathtoTardir; char *urltoOutput; /* Full URL where output is posted */ char *pathtoOutput; /* Full path to the output (rendered) file */ @@ -140,8 +141,9 @@ 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, &pathtoOutdir); - // free(outputExt); + prepareJobPaths(jobnum, framenum, outputExt, datadir, &urltoTar, &pathtoTar, &pathtoTardir, &pathtoJob, &pathtoJobfile, &urltoOutput, &pathtoOutput, &pathtoOutdir); + //free(outputExt); + mkdir(pathtoTardir, 0700); int dlret = downloadTar(urltoTar, pathtoTar); if(dlret == 0) fprintf(stderr,"Got data tarball\n"); @@ -150,7 +152,16 @@ int main(int argc, char *argv[]) else fprintf(stderr,"Using existing tarball %s...\n", pathtoTar); - unpackJob(pathtoJob, pathtoTar); + struct stat jbuffer; + int jstatus = stat(pathtoJobfile, &jbuffer); + if(jstatus == -1){ + fprintf(stderr,"Main job file does not exist, extracting...\n"); + + // If error unpacking tarball + if(unpackJob(pathtoJob, pathtoTar)) + return 1; + } + /* ignore return because directory may exist already */ fprintf(stderr,"Creating output directory %s\n", pathtoOutdir); @@ -173,6 +184,7 @@ int main(int argc, char *argv[]) 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"); + // @TODO: Unassign the frame on the server so other slaves can render it return 1; } else{