SturdyRef
From Erights
For more context see [1] (XXX to be integrated)
A SturdyRef is a reference to an object in another vat (henceforth called the host vat) which does not break on network failure or vat death.
The SturdyRef itself is a near ref, an ordinary local object. SturdyRefs are Selfless but not Transparent.
A SturdyRef refers to something in the host vat by a swiss number; the host vat may at any time change or forget the number/referent association.
SturdyRefs map one-to-one to CapTP URLs; the conversion is provided by <captp>
.
Contents |
Protocol
getRcvr/0
- Signature: getRcvr() :any
Returns a promise for a live ref to the referent of this SturdyRef.
If this vat cannot currently connect to the host vat, then the result will resolve to a broken ref; however, a broken ref can also be what the host vat returns as the referent. (XXX do we want to provide for distinguishing these cases?)
This operation can only be done while the local comm system is on the air; otherwise it throws XXX specify exception.
getRcvr/2
(XXX this text is copied with changes from the old JavaDoc; see notes)
Like getRcvr() but doesn't resolve the result until we connect to the object's hosting vat. (XXX what is the observable distinction of "doesn't resolve...until..."? What does getRcvr/0 do differently?) Note that the result may still resolve to broken, if the object's hosting vat, for example, no longer has this object registered for lookup by this SturdyRef (no longer has an entry for this SturdyRef's SwissNumber). (XXX isn't this true for both?)
This operation can only be done while the local comm system is on the air; otherwise it throws XXX specify exception.
pollMillis is a polling interval hint. (XXX the following is an implementation description; rewrite as spec) Until we have VLS rendezvous support, the best we can do is poll the attempt to connect to the hosting vat. pollMillis says how often we should do so, and thereby tradeoff CPU/comm against promptness. Once we have VLS rendezvous support, then we will post a long-lived query with the relevant VLSes, and refresh this query at a frequency determined by those VLSes, not by our client. This refreshing is also a polling loop, but can be long without impeding the responsiveness of getting connected.
timeout is the time in absMillis (since the epoch) at which we should give up trying to connect. Once the time has passed, we should resolve the result to broken rather than continuing to poll or refresh. A value of -1 means to keep trying forever.
This operation can only be done while the local comm system is on the air; otherwise it throws XXX specify exception.
Implementation
A SturdyRef needs to store the same components as a CapTP URL (search path, host VatID, and swiss number), plus the LocatorUnum so that it can get the live ref to return.
- This page is a stub; it should be expanded with more information. If doing so, check the original E web site and the mailing list archives for content which could be moved into this page.