On 05/15/2012 09:37 AM, Eli Barzilay wrote:
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' --?
I'll add more detail to the reference documentation


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
   processes:

   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?
There were some tests that used to run nightly, but they have been disabled for a while.
This shouldn't be a problem anymore for nightly builds.

* 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 distributed system, by default, builds a complete graph between the nodes.
The star network of ssh connections is not what I wanted to implement.

* 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.
Noted, I'll add more detail.

* 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@bar"?
It will use a different username if your .ssh/config sets that up.
It doesn't support a "user@host" hostname string, so that won't work.


* 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?)
I'm being conservative for now.  Currently, serialization
just uses read and write.

* Would it work on all platforms?  If it runs ssh, is there a way to
   specify an alternative executable name?
Yes, there is a #:ssh-bin-path keyword argument.

* 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?).
I've added @filepath usage

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

     @(define place-thunk-function
         (make-splice
          (list
           @p{
     ...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
   @-forms.)
FIXED


____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to