Thanks a LOT, raph.

Yes, indeed, I had the mis-conception that the procedure C.p
would be executed on the remote host [ like that in the ticket-connection 
mechanism ].

Making sure that Open.pipe gets executed on remote host is the key!
Your suggestion works.
Thanks
HP



On Tue, 13 May 2008, Raphael Collet wrote:

> Dear HP Wei,
> 
> The error you observe is due to the distributed behavior of procedures.  The
> problem is: the procedure call {C.p ...} is *not* executed on the remote host,
> as you apparently expect it to do!  The procedure P defined in the functor is
> *copied* from the remote host to the local one, then it is executed locally.
> The problem is that P refers to Open.pipe, a class that cannot be copied
> between sites, because it refers to site resources (OS file descriptors, etc).
> That class is thus exported as a "resource", which is an opaque unusable
> value.
> 
> {R apply(X C)}             %%% b -- to run on remote host
> %% procedure P is indeed created on the remote host
> 
> local L Cmd in
>    Cmd = "ls a_path | wc"
>    {C.p Cmd L}              %% the procedure is copied and run *here*
>    {System.showInfo L}
> end
> 
> 
> The solution is to force the remote creation of objects, by using a port.
> This can be seen as an implementation of RPC for procedure P:
> 
> X = functor
>     import Open
>     export p:P
>     define
>        Str Prt={NewPort Str}
>        thread
>           for Cmd#R in Str     % process requests (on remote host)
>              thread
>                 {{New Open.pipe init(cmd: "sh" args:['-c' Cmd])}
>                  read(list:R size:all)}
>              end
>           end
>        end
>        proc {P Cmd ?R}
>           {Send Prt Cmd#R}     % send the request on port
>        end
>     end
> 
> 
> Cheers,
> raph
> _________________________________________________________________________________
> mozart-users mailing list
> [email protected]
> http://www.mozart-oz.org/mailman/listinfo/mozart-users
> 
> 
_________________________________________________________________________________
mozart-users mailing list                               
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to