[E-Lang] Hash Chaining & Capabilities, Proposal #1b:
SimplifyingPluribus
Mark S. Miller
markm@caplet.com
Wed, 08 Nov 2000 10:12:24 -0800
Everyone, and especially Tyler, very sorry for the delay!
At 04:04 AM 10/25/00, Tyler Close wrote:
>A while back, markm wrote:
>> So, if no one has a counter-argument, I'm still planning to
>> look up a
>> swissNumber rather than a pair, and I'm still planning to
>> use the Vine to
>> determine what vat to round trip to, rather than provide
>> other extra
>> information for this purpose.
>
>I don't think that the partial ordering of messages that E defines,
>guarantees that a round trip to the originating Vat will complete
>after the original message. The two messages are sent on different
>'live' references, so there are no order guarantees.
Currently, this isn't a fatal problem, since I only need to solve this
problem within the Pluribus protocol, and the Pluribus protocol can validly
count on properties of the Pluribus protocol that are beyond the E
semantics. Currently, the Pluribus protocol is conceived of as fully order
preserving of all messages on a particular live inter-vat connection.
Clearly, full-order preservation in the protocol is sufficient, but more
than necessary, to implement order preservation of the messages on each
individual reference carried by this connection -- hence the "beyond".
This is much like the normal practice of an implementation being able to
count on other "incidental" properties of the implementation that are not
specified by the semantics being implemented, except that here one spec --
Pluribus -- is in the implementation role of another spec -- E. Each of
these specs has its own implementation as well.
OTOH, other things being equal, it's always better to count on less, as
changes in one part of the system will cause fewer cascading changes. Also,
since Pluribus exists right now only to implement E's semantics across the
network, the E semantics can be considered strictly more stable than the
Pluribus semantics, so, other things being equal, it's better to count only
on those properties of Pluribus demanded by E's semantics. Therefore I
appreciate what your suggestion is trying to do. (Ironically, once E sees
large scale use, the Pluribus semantics will be more stable, as network
protocols are harder to change than languages.)
By fortuitous timing, Jed Harris has proposed a change in to Pluribus for
better behavior under certain resource exhaustion accidents. Jed's
suggested change probably would relax the per-connection full ordering
property I was planning to count on, while leaving the E semantics
untouched. So a suggestion such as yours would become necessary.
(Briefly, Jed suggests that only a bounded number of messages should be sent
on a RemoteVow (an inter-vat promise) before hearing that the promise is
resolved. The bound should be high enough to get most of the benefit of
pipelining, but, by being finite, causes an unbounded sending program to
allocate only a finite amount of space in the recipient's vat, and instead
allocate the unbounded amount of space in its own. This causes the "pipes
to back up" into the sender's vat, ultimately wedging it, rather than
wedging the recipient's vat. A useful safeguard for the "cooperative intent
+ accident" situation. Note that vastly more work would be required to
guard against resource exhaustion attack.
With Jed's suggestion, the full order of messages on each reference no
longer becomes a temporal full order of all messages on a connection.)
>I think a small change to the Vine will fix this. When VatA generates
>and sends the cap the VatB, it also includes the cap for the slot in
>VatA that VatC will eventually resolve. When VatC receives the message
>from VatB, and finds that the cap does not exist yet, it sends a
>"whenResolved" message on the second cap (the one identifying the slot
>in VatA). This is the same "whenResolved" message that promises
>currently support.
>
>The "whenResolved" message is the standard way to impose order on
>separate 'live' references, so it seems appropriate to use it to solve
>this problem.
But I'm not sure I understand your suggestion. What do you mean by "slot"?
How would this slot be connected to the Vine?