[e-lang] Lamport slots with PBC
Mark S. Miller
markm at cs.jhu.edu
Sat Feb 3 14:50:36 CST 2007
Martin Scheffler wrote:
> OK, letting the lamport slots set up their own communication works great.
> I wrote this for the lamport reporter:
>
> to __optUncall() :any {
> def npbc extends lamportReporter {}
> return [makeLamportSlot,
> "localShadow",
> [lamportReporter.get(), npbc]]
> }
[reformatted a bit]
> now I can copy the slot from vat to vat and they stay synchronous.
> It all starts to make sense :)
> Martin
Martin, That's great!
I had meant to reply to your previous question once I'd gotten something along
these lines to work. I'm happy to see that you're way ahead of me! A working
distributed Lamport's Unum is a big deal! What does "npbc" stand for? How did
you work around the fact that I still haven't fixed:
https://sourceforge.net/tracker/index.php?func=detail&aid=1635331&group_id=75274&atid=551529
Once you have something you think works, please submit changes somehow, such
as an svn-generated *.patch file together with copies of the edited source
files themselves. (Is there a better way for someone without commit authority
to submit svn changes? I'm still new to svn.) I'll review, discuss and edit as
appropriate, check in changes, and release. If your changes include any new
files, please include an appropriate open source copyright notice near the top
of the file. MIT X preferred. Thanks!
Once this level of functionality is solid, there are several enhancements I'd
like to explore from here. All are microcosms of the same issues that will
reappear for most any interesting Unums. It would be wonderful to deal with
these issues first using this simplest-of-all stateful Unums.
* Sturdy LamportSlot distribution, where during partition, a downstream
LamportSlot can indicate to its clients that it is providing
potentially-more-stale-than-usual state values, and uses SturdyRef#getRcvr/2
http://www.erights.org/javadoc/net/captp/jcomm/SturdyRef.html#getRcvr(long,long)
to reconnect and reconcile upstream when it can.
* In a Grant-Matcher-style scenario,
http://www.erights.org/elib/equality/grant-matcher/index.html
where we have a diamond distributed introduction pattern, but where the
introduction is spreading presences of the same LamportSlot Unum, the
GrantMatcher will receive two separate downstream presences of the Unum, and
will not be able to EQ or join[1] them. I don't believe this problem can be
fixed within the current CapTP framework. I also don't believe that simply
shifting CapTP from Java serialization to Data-E serialization will be
adequate. But I'm not sure about either.
* It's unclear to me whether state-consistency among presences of an Unum
already follow E-Order relationships, just given the implementation we have
here (Thanks!), or whether other mechanism is necessary. If other mechanism is
necessary, what?, and is it worth it? If not, what is the order-consistency of
the current implementation? This question applies both to E-Order fork
constraints, and, once the above bullet is dealt with, to E-Order join
constraints.
* When state is large and differences tend to be small, should we communicate
differences? Is there some general way to modify the framework to accommodate
this?
[1] As in my section 19.5 and figures 19.2 and 19.3.
--
Text by me above is hereby placed in the public domain
Cheers,
--MarkM
More information about the e-lang
mailing list