# HG changeset patch # User normaldotcom # Date 2010-03-14 14:48:41 # Node ID 0307f7fcc41091b4bacf6e7129ce25f0697dea17 # Parent 6331e72e3889884a13b0897e44e8efd0de73bdbb Added error checking diff --git a/src/server/simpleslave.c b/src/server/simpleslave.c --- a/src/server/simpleslave.c +++ b/src/server/simpleslave.c @@ -147,8 +147,10 @@ int main(int argc, char *argv[]) int dlret = downloadTar(urltoTar, pathtoTar); if(dlret == 0) fprintf(stderr,"Got data tarball\n"); - else if(dlret == 3) + else if(dlret == 3){ + _web_resetframe(slavekey, password, jobnum, framenum); // Unassign the frame on the server so other slaves can render it return 0; // ouput dir doesn't exist + } else fprintf(stderr,"Using existing tarball %s...\n", pathtoTar); @@ -158,8 +160,10 @@ int main(int argc, char *argv[]) fprintf(stderr,"Main job file does not exist, extracting...\n"); // If error unpacking tarball - if(unpackJob(pathtoJob, pathtoTar)) + if(unpackJob(pathtoJob, pathtoTar)){ + _web_resetframe(slavekey, password, jobnum, framenum); // Unassign the frame on the server so other slaves can render it return 1; + } } @@ -176,6 +180,7 @@ int main(int argc, char *argv[]) if(exec_blender(pathtoJobfile, pathtoOutput, framenum)) { fprintf(stderr,"Error running Blender. Check your installation and/or your PATH.\n"); + _web_resetframe(slavekey, password, jobnum, framenum); // Unassign the frame on the server so other slaves can render it return 1; } free(pathtoJobfile); @@ -183,8 +188,8 @@ int main(int argc, char *argv[]) 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"); - // @TODO: Unassign the frame on the server so other slaves can render it + fprintf(stderr,"*** Frame was not rendered correctly! Scene may not have camera, or your blender installation is not working.\n"); + _web_resetframe(slavekey, password, jobnum, framenum); // Unassign the frame on the server so other slaves can render it return 1; } else{ diff --git a/src/server/slavefuncs.c b/src/server/slavefuncs.c --- a/src/server/slavefuncs.c +++ b/src/server/slavefuncs.c @@ -643,8 +643,6 @@ struct _web_memorystruct _web_getrequest /* we're done with libcurl, so clean it up */ curl_global_cleanup(); - if(!strncmp(chunk.memory, "ERROR", 5)) - fprintf(stderr, "Server request returned error %s!\n", chunk.memory); return chunk; // 0 is OK, 1 is 404 or other error } @@ -660,6 +658,18 @@ void _web_finishframe(int slavekey, char free(data.memory); } +void _web_resetframe(int slavekey, char *slavepass, int jobnum, int framenum){ + fprintf(stderr,"Resetting frame %d in job %d on server...",framenum,jobnum); + char *url; + _distren_asprintf(&url,"http://dev.distren.org/slave/act.php?mode=resetframe&slavekey=%d&slavepass=%s&jobnum=%d&framenum=%d", slavekey, slavepass, jobnum, framenum); + struct _web_memorystruct data = _web_getrequest(url); + free(url); + + fprintf(stderr,"%s\n", data.memory); + if(data.memory) + free(data.memory); +} + void _web_startframe(int slavekey, char *slavepass, int jobnum, int framenum){ char *url; _distren_asprintf(&url,"http://dev.distren.org/slave/act.php?mode=startframe&slavekey=%d&slavepass=%s&jobnum=%d&framenum=%d", slavekey, slavepass, jobnum, framenum); @@ -677,8 +687,11 @@ int _web_getwork(int slavekey, char *sla struct _web_memorystruct data = _web_getrequest(url); free(url); - //fprintf(stderr,"Got data for getwork: %s!\n", data.memory); - if(!strcmp(data.memory, "ERROR_BADKEY")){ + if(!data.memory || !strcmp(data.memory,",")){ + fprintf(stderr,"No work available on server!\n"); + return 0; + } + else if(!strcmp(data.memory, "ERROR_BADKEY")){ fprintf(stderr,"*** Slave %d does not exist!\n",slavekey); free(data.memory); return 0; diff --git a/src/server/slavefuncs.h b/src/server/slavefuncs.h --- a/src/server/slavefuncs.h +++ b/src/server/slavefuncs.h @@ -60,6 +60,7 @@ static size_t _web_writememorycallback(v struct _web_memorystruct _web_getrequest(char *url); void _web_finishframe(int slavekey, char *slavepass, int jobnum, int framenum); void _web_startframe(int slavekey, char *slavepass, int jobnum, int framenum); +void _web_resetframe(int slavekey, char *slavepass, int jobnum, int framenum); int _web_getwork(int slavekey, char *slavepass, int *jobnum, int *framenum); void _web_setrenderpower(int slavekey, char *slavepass, int jobnum, int framenum);