[racket] remote tasks

From: Eli Barzilay (eli at barzilay.org)
Date: Tue May 15 11:37:56 EDT 2012

Yesterday, Kevin Tew wrote:
> Attached is a distributed places program that will do what you want.
> It requires the latest checkout from git head.  You must have ssh
> public-key authentication setup on all the nodes.  For easy use, it
> also requires that racket and remote-eval.rkt be installed in the
> same place on all three machines.  It communicates with plain
> sockets, so it assumes a secure environment.
> Let me know what problems you have or if it works for you.
> I would start by testing it out using just localhost.

Looks like there's a good bit of magic is done in the library or
possibly in the `define-named-remote-server' macro -- so it seems that
it would be good to add this example with lots of explaining comments
into the docs.  BTW, the description of `define-named-remote-server'
looks very confusing.  My guess that it might do some work that is
worth describing is based on the fact that it seems that it is what
defines the `echo-server-evalit' and `make-echo-server' --?

More issues:

* When I ran this for the first time, I got

    tcp-listen: listen on 6340 failed (Address already in use; errno=98)

  and it was stuck.  (And no other process is using that port.)  When
  I killed it (with just C-c, in an Emacs shell), it left a couple of

  24863 eli 0.0 0.0    784 S ? 00:00:00 /usr/bin/ssh localhost /var/tmp/racket/bin/racket -tm /var/tmp/racket/collects/racket/place/distributed/launch.r
  24871 eli 0.0 0.0 139740 S ? 00:00:00 /var/tmp/racket/bin/racket -tm /var/tmp/racket/collects/racket/place/distributed/launch.rkt spawn 6340

  I manually killed the second and the first disappeared too.

  The "/var/tmp" path means that this was started from the nightly
  build -- is there some test that uses that port?  If so, then it's a
  bad idea to risk leaving a running process and worse to have it open
  a port -- can you add code that checks that the process is dead and
  kill it if it isn't?

* Openning a tcp port for each node seems pretty bad in general -- if
  it's ssh-ing to the other machine, why not use the standard IO ports
  and avoid the potential problems?  (Eg, for the build script I would
  never use a system that just opens a random port -- even if all of
  the machines are protected by a firewall, a stuck build process
  would be very problematic.)

* The hello-world example at the top of the doc page could also use
  commentage.  More than that, it's missing some documentation that is
  at a level that is a little higher -- I can't make things out in the
  current text.

* The documentation says: "The same user account is used across all
  nodes in the distributed network" -- is that really needed?  If it
  uses ssh to connect, then "ssh foo" could use a different username
  if my .ssh/config sets that up, and in addition is there any problem
  with "ssh foo at bar"?

* Later it says: "All machines run the same version of Racket" -- if
  this is required because it uses zo to pass around data, then it's
  better to say that explicitly.  (Otherwise it's not clear: should it
  be exactly the same racket build for the same platform on both
  machines?  Maybe it should only have the same functionality wrt the
  places libraries?)

* Would it work on all platforms?  If it runs ssh, is there a way to
  specify an alternative executable name?

* Sidenote: you should use @filepath{.ssh/config} and
  @filepath{.ssh/authorized_keys} to typeset them as paths, and
  probably worth mentioning something about other possible
  architectures (maybe on OSX it's in some ~/Library?).

* Another side-note: you have a few things like

    @(define place-thunk-function
    ...some text...
          })) )

  There's no need for that -- you can indent the text to make the
  scribble source more readable.  (That's one of the advantages of the

          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:
                    http://barzilay.org/                   Maze is Life!

Posted on the users mailing list.