Thanks, but ssh is set up correctly. If not, racket typically complains
that it cannot connect to the remote node, rather than throwing the
contract violation. In fact, with both the remote and the localhost, I
can see the new spawned racket process running. I get the error on
*channel-get and only when the remote process has already put something
on the channel.
On 12/16/2012 11:46 AM, Michael Wilber wrote:
This is just a shot in the dark, but do you have your SSH keys set up?
If you get a password prompt when you 'ssh remote-node-name', I think it
might not work.
(From the looks of things, since you're spawning a node on localhost, I
think you might have to get 'ssh localhost' working the same way. Maybe
something like cat .ssh/id_rsa >> .ssh/authorized_keys might help?)
Matthew Eric Bassett <mebass...@gegn.net> writes:
Kevin,
Thanks again for your time looking into this - hope the dissertation
edits are going well. :)
Some clarification after I tried it this morning: Invoking racket (with
"-W debug", thanks for the tip!) on your hello-world-place.rkt hangs at
the following:
SPAWNED-PROCESS:2865 (/usr/bin/ssh localhost /usr/local/bin/racket -lm
racket/place/distributed/launch spawn 7000)
try 0 waiting 1 sec to retry connection to localhost:7000
From the racket repl I tried the following:
>(define-values (node pl) (spawn-node-supervise-place-at "localhost"
#:listen-port 7000 "hello-world-place.rkt" 'hello-world))
>(*channel-put pl "hello")
>(*channel-get pl)
; dcgm-type: contract violation
; expected: dcgm?
; context...: ;
/usr/local/lib/racket/collects/racket/place/distributed.rkt:436:8: loop
; /usr/local/lib/racket/collects/xrepl/xrepl.rkt:1342:0
; /usr/local/lib/racket/collects/racket/private/misc.rkt:87:7
Thanks,
Matthew
On 12/15/2012 10:22 PM, Matthew Eric Bassett wrote:
Kevin,
Many thanks for your response.
The only significant difference between your code and mine is the use
of localhost (which makes distributed places a lot less distributed)
and the port specification. In any case, I've tried your code
verbatim on two machines now. It also throws the same dcgm contract
violation.
What OS are you running? Perhaps there's something funny about my
build? I don't know anything about distributed/places internals here,
I'm just guessing.
I've tested this on Fedora 17 x64, and on an amazon stock x64 ec2
machine.
Regards,
Matthew Eric
On 12/15/2012 04:05 AM, Kevin Tew wrote:
The following thunk example works for me.
Uncommenting the message-router line will pump back stdout and stderr
from the remote node so you can see any errors that may be occurring
at the remote-node.
You will have to kill the message router by hitting CTRL-C when you
want to end the program.
EXAMPLE 1
-----------------------------------------
#lang racket
(require racket/place/distributed)
(define (hello-world)
(place ch
(printf/f "hello-world received: ~a\n" (place-channel-get ch))
(place-channel-put ch "Hello World\n")
(printf/f "hello-world sent: Hello World\n")))
(provide hello-world)
(module+ main
(define-values (node pl) (spawn-node-supervise-place-at "localhost"
#:listen-port 7000 "hello-world-place.rkt" 'hello-world #:thunk #t))
(*channel-put pl "Hello bozo")
(*channel-get pl)
#;(message-router node)
)
Example 2 show how I would normally write distributed places code
without using the #:thunk keyword argument.
EXAMPLE 2
--------------------------------------------
#lang racket
(require racket/place/distributed)
(define (hello-world ch)
(printf/f "hello-world received: ~a\n" (place-channel-get ch))
(place-channel-put ch "Hello World\n")
(printf/f "hello-world sent: Hello World\n"))
(provide hello-world)
(module+ main
(define-values (node pl) (spawn-node-supervise-place-at "localhost"
#:listen-port 7000 "hello-world-place.rkt" 'hello-world))
(*channel-put pl "Hello bozo")
(*channel-get pl)
#;(message-router node)
)
On 12/15/2012 02:16 AM, Matthew Eric Bassett wrote:
Just to update, also tried this on v5.3.1 using
spawn-node-supervise-place-at with #:thunk set. same result.
On 12/14/2012 03:31 PM, Matthew Eric Bassett wrote:
Hey folks,
I was playing around with distributed places and I ran into a some
problems. I'm using racket v5.3 and am following the docs from the
racket reference
(http://docs.racket-lang.org/reference/distributed-places.html)
Let's say we have an example just like the one in the reference.
hello-world-place.rkt
----------------------
(define (hello-world)
(place ch (printf "hello-world received: ~a\n"
(place-channel-get ch))
(place-channel-put ch "Hello World\n")
(printf "hello-world sent: Hello World\n")))
Then from the racket xrepl we do
(define-values (node pl)
(spawn-node-supervise-dynamic-place-at remote-node
"hello-world-place.rkt" 'hello-world))
; there's now a racket process running on my remote-node
(*channel-put pl "hi")
; the remote node shuts down as we expect, giving the
place-channel-get should have locked it until this point.
(*channel-get pl)
; dcgm-type: contract violation
; expected: dcgm?
; given: #<eof>
; context...:
;
/usr/local/lib/racket/collects/racket/place/distributed.rkt:442:8:
loop
; /usr/local/lib/racket/collects/xrepl/xrepl.rkt:1341:0
; /usr/local/lib/racket/collects/racket/private/misc.rkt:87:7
I've tried [naively] using place-channel-put/get instead of
*channel-put/get, same result. Wrapping it in a message-router
makes no difference.
(message-router node (after-seconds 2 (*channel-put pl "hi!")
(*channel-get pl)))
; gives same result as above.
Any ideas what I'm doing wrong or what I'm missing?
Many thanks,
--
Matthew Eric Bassett |http://mebassett.info
____________________
Racket Users list:
http://lists.racket-lang.org/users
____________________
Racket Users list:
http://lists.racket-lang.org/users
--
Matthew Eric Bassett | http://mebassett.info
____________________
Racket Users list:
http://lists.racket-lang.org/users