# HG changeset patch # User Binki # Date 2009-07-25 00:35:41 # Node ID 8db5f38a6c2676a1290faf9001fc83305fc0b70d # Parent 4b9e91831d84fcd97a881163018cb609c7d3c776 # Parent d891672fc009ef58c7403749c0e5ba7ba8b9c97c merge diff --git a/src/server/slave.c b/src/server/slave.c --- a/src/server/slave.c +++ b/src/server/slave.c @@ -34,33 +34,37 @@ int main(int argc, char *arvg[]) int slavestatus = 0; - if(no username in config file, no key present){ + if('no username in config file, no key present'){ fprintf(stderr "run distrend -c username] [emailaddr] to register") } - if(they use a -c flag according to getopt, with 2 args){ - register_user(username, email); which returns a uniquely random url to a key - get(uniquely-random-url-to-key); + if('they use a -c flag according to getopt, with 2 args'){ + *key = register_user(username, email); // register_user returns a uniquely random url to a key + get("http://protofusion.org/distren/key/%s",key); fprintf(stderr, "you registered, hopefully successfully. Invoke distrend with no args now."); } - if(username is in conf file and key is present){ + if('username is in conf file and key is present'){ loginuser(username); } - if(slave recieves "start frame#, job#"){ - get(http://distren.protofusion.org/srv/job#.tgz); - tar -xvf job#.tgz /tmp/distren/job#; somehow - exec_blender(job#.blend, job#.frame#.JPG, job#); (check the args, we'll need to adjust for different output formats)... set SLAVESTATUS=1 while rendering, SLAVESTATUS=2 when done + if('slave recieves "start frame#, job#"'){ + fprintf(stderr, "Got frame %d in job %d, preparing to render...",frame,job); + get('http://distren.protofusion.org/srv/job#.tgz'); + exec('tar -xvf job#.tgz /tmp/distren/job#'); // somehow + exec_blender(jobname.blendfile, jobnum.framenum.JPG, jobnum); // (check the args, we'll need to adjust for different output formats)... set SLAVESTATUS=1 while rendering, SLAVESTATUS=2 when done } if(SLAVESTATUS==2){ - tell the server "done with frame# in job#"; - SLAVESTATUS=0 + tell_the_server("Completed"); + fprintf(stderr, "Finished frame %d in job %d",framenum,jobnum); + SLAVESTATUS=0; } if(SLAVESTATUS==0){ - tell the server "i ain't got no frames to render"; + tell_the_server("Idle"); + fprintf(stderr, "Idle. No frames to render."); } while(SLAVESTATUS==1){ - tell the server "rendering this friggn frame"; - delay(1000); + tell_the_server("Rendering"); + fprintf(stderr, "Rendering frame %d in job %d...",framenum,jobnum); + delay(1000); // or not... this should be more event-driven, but should still give a heartbeat to the server } return 0; diff --git a/src/server/slavefuncs.c b/src/server/slavefuncs.c --- a/src/server/slavefuncs.c +++ b/src/server/slavefuncs.c @@ -17,20 +17,17 @@ along with DistRen. If not, see . */ -/* - * ********************************************************************************** - * Slave listens on server for a command in the format of each function... - * We need if's for returns... ==> watchdog - * ********************************************************************************** -*/ - -// Registration on server. Needs attention. Prevent account spamming. -// Key transfer? -// Set up something like: distrend -c username email@example.com + /* + * Registration on server. Needs attention. Prevent account spamming. + * TODO: MAKE THIS FUNCTION RETURN THE UNIQUE URL TO THE USER'S KEY!!! + * Set up something like: distrend -c username email@example.com + */ void registeruser(char *username, char *email){ - // Logs into sandboxed user on zserver2 and registers a user. Should eventually generate a key on the server and return it to the user. - // All created user accounts should be sandboxed accordingly, requiring a different skel, and the default shell to be rbash. Also, - // a custom path defined in the .bash_profile of the skel is needed. + /* + * Logs into sandboxed user on zserver2 and registers a user. Should eventually generate a key on the server and return it to the user. + * All created user accounts should be sandboxed accordingly, requiring a different skel, and the default shell to be rbash. Also, + * a custom path defined in the .bash_profile of the skel is needed. + */ char buf[10]; struct execio *testrem; char *execargv[] = @@ -48,7 +45,7 @@ void registeruser(char *username, char * "-d", "/home/distren", "--gid", - "541", // Add in shellscript to generate ssh key and return it to the user somehow + "541", // Add in shellscript to generate ssh key and return it to the user somehow, probably post to http username, (char *)NULL }; @@ -98,7 +95,7 @@ void loginuser(char *username){ } -// Executors +/* Executors */ /* It seems that the client will need to know the job number. Is finish_frame going to be on the client or the server? we gotta figure that out! @@ -109,6 +106,18 @@ void exec_blender(struct blendjob* blend asprintf(frame,frame_str); // GNU/*nix compatible only, fix before releasing win32, although dll for windows for asprintf exists! int ret; char *cmd[] = { "blender", "-b", "-o", output, input, "-f", frame_str, (char *)0 }; - ret = execv("/usr/bin/blender", cmd); + ret = execv("/usr/bin/blender", cmd); // This path will be absolute for testing, should be relative to install on production finish_frame(blendjob, frame); } + +/* Update me when the time comes: +void exec_luxrender(struct luxjob* luxjob, char *input, char *output, int frame) +{ + char *frame_str; + asprintf(frame,frame_str); + int ret; + char *cmd[] = { "luxrender", "-b", "-o", output, input, "-f", frame_str, (char *)0 }; // Fix args later + ret = execv("/usr/bin/luxrender", cmd); // Absolute for testing, relative on production + finish_frame(luxjob, frame); +} +*/