[E-Lang] Hash Chaining & Capabilities, Proposal #1b: SimplifyingPluribus

Mark S. Miller markm@caplet.com
Wed, 08 Nov 2000 18:44:40 -0800


At 11:30 AM 11/8/00, Tyler Close wrote:
>I thought this bound was already implicitly implemented. The sending
>Vat can batch together a bunch of calls that use a RemoteVow, but will
>not hear back from the receiving Vat until the receiving Vat has
>resolved the promise. So long as the sending Vat doesn't start up
>additional connections to the same receiving Vat, there is a
>non-finite, but practically very small, bound on the number of
>messages with the unresolved promise that the receiving Vat will
>receive.

Your "So long as the sending Vat doesn't start up additional connections to 
the same receiving Vat" is always true, as part of the contract of 
Data-Pluribus is that there is always at most one live connection between a 
pair of vats.

Beyond this, I think we may be misunderstanding each other.

Why would the sending vat need to hear back from the receiving vat before 
sending further messages on RemoteVow that go from the sending vat to the 
receiving vat?  In the pipelined Pluribus protocol without Jed's suggestion, 
it doesn't.


>I am not intimately familiar with the E implementation of a "vine", so
>do not assume that any of the nouns I use are class names.
>
>A particular remote method call might have a return value that is
>pass-by-copy. There is no way for the sending Vat to know if it will
>be or not when the invocation is sent. The sending code might depend
>on eventually getting a local reference to this pass-by-copy return
>value; therefore, the sending Vat must allocate a deferred promise for
>a local object, which it gives to the sending code. In the original
>description, I referred to this deferred promise as a "slot". This
>slot has two addresses. An identical slot will eventually exist in the
>receiving Vat. When the sending code gives the reference for this slot
>to other code, the other code must receive both addresses: the address
>for the slot in the sending Vat and the address for the slot in the
>receiving Vat. When the receiving Vat receives an invocation that uses
>this slot reference, it first checks for the local version of the
>slot. If it does not exist yet, it sends a "whenResolved" message on
>the second address. I think of this second address as the "vine".

Gotcha.

Your "slot" is my "LocalResolver" of a "RemoteVow" (ie, a Resolver in the 
same vat as the arrowtail -- a peculiar concept useful (only?) in 
implementing the comm system).  Your description is close enough to what 
actually happens -- the receiving vat is indeed given the ability to resolve 
the sending vat's RemoteVow -- the promise for the result of a send.  
Returning to our standard scenario, let's say the sending vat is VatA, the 
receiving vat is VatC, and the problem we're solving is Alice sending to Bob 
the RemoteVow/promise for the result of a message Alice sent to Carol.  VatA 
does indeed also send the LocalResolver for this promise to VatC (as 
argument of a whenResolved message).

In your solution, VatA would also give this LocalResolver to VatB, who would 
give it to VatC as an extra argument in the lookup (instead of, or in 
addition to, the Vine).  VatC would do a whenResolved round trip to it, 
rather than a round trip to the Vine, in order to determine when to reject 
the SwissNumber lookup request.

This may or may not have the right scheduling behavior -- I'm not sure yet.  
However, it has a fatal security problem: VatB has been given the authority 
to resolve the RemoteVow in VatA.


        Cheers,
        --MarkM