Commit Graph

284 Commits

Author SHA1 Message Date
Tony Garnock-Jones ff4799b282 Immutable bags 2018-04-27 09:55:19 +01:00
Tony Garnock-Jones 8624047ecd The failing test now passes. The reasons for this are subtle:
The patch here removes a terminated facet from its parent's
`facet-children` set only in a script, and only after all other
scripts enqueued as part of facet termination have executed without an
uncaught exception.

This means that, if (say) a stop script raises an uncaught exception,
it might have happened after some *but not all* scripts resulting from
calls to `retract-facet-assertions-and-subscriptions!` have already
executed. So some endpoints' assertions and subscriptions will have
been removed.

When the uncaught exception is caught by the handler in
`with-current-facet`, a call to `abandon-queued-work!` is made, which
discards queued scripts, including the remaining assertion-cleanup
scripts as well as the scripts for removing dead facets from their
parents' `facet-children` sets. It also (crucially) discards queued
patch actions, including those resulting from already-executed
assertion-cleanup scripts.

At this point, we have a facet tree with some dead facets still in it,
and no queued outbound patches. The assertions for the still-present
dead facets are still logically asserted.

Then, a call to `terminate-actor!` happens, which traverses the whole
tree enqueueing assertion-cleanup scripts. No user code is enqueued,
so (in principle) no exceptions can be signalled.

Once these `terminate-actor!`-enqueued scripts execute, a pending
patch exists that will remove all remaining endpoint assertions.

The remaining sticky point is the calls to `dataspace-unsubscribe!`.
Happily, these are idempotent because of the implementation in
`skeleton.rkt`.

Prior to this patch, terminating facets were removed early from their
parents' `facet-children` sets, meaning there was no way to find them
again to clean up if a failure occurred during a stop script.

Ideally, it'd be easy to see that the code is correct in this respect.
We're not there yet.
2018-04-25 20:43:25 +01:00
Tony Garnock-Jones 928e48113f Failing test: an exception in a stop script messes up cleanup 2018-04-25 20:13:54 +01:00
Tony Garnock-Jones ce6cd58930 Run stop-scripts in one scheduled execution 2018-04-25 19:54:58 +01:00
Tony Garnock-Jones dfe8a3e96e Be specific in for-loops 2018-04-25 19:47:18 +01:00
Tony Garnock-Jones c06d5ba3ce Guard against double-adhoc-assertion 2018-04-25 19:46:08 +01:00
Tony Garnock-Jones 9726376c82 Remove redundant `facet-live?` test 2018-04-25 19:40:53 +01:00
Tony Garnock-Jones bc9b931312 Omit "name" to ctor for dataspace struct - name is/will be a property of the downward relay connection 2018-04-25 19:30:45 +01:00
Tony Garnock-Jones e6d6f67021 during/spawn 2018-04-22 21:07:35 +01:00
Tony Garnock-Jones 1523ef17cf Correct typo 2018-04-22 21:06:18 +01:00
Tony Garnock-Jones efa7f517c4 Repair: it is incorrect to invoke retraction-handlers when retracting an interest 2018-04-22 21:04:22 +01:00
Tony Garnock-Jones f58c2fb8dc Repair error: stop-facet scripts must run in parent facet's context! 2018-04-22 21:03:21 +01:00
Tony Garnock-Jones a3dfb2c5aa Notice attempts to install more than one root facet in an actor 2018-04-22 21:03:01 +01:00
Tony Garnock-Jones 4be935a160 Introduce action-groups 2018-04-22 21:02:40 +01:00
Tony Garnock-Jones 634b114afc Improve debug-printing of facets 2018-04-22 21:00:35 +01:00
Tony Garnock-Jones b50d18cd46 Remove unused dataspace-actors field 2018-04-22 20:59:57 +01:00
Tony Garnock-Jones 55f4b55784 Implement during and ad-hoc assertions 2018-04-19 17:55:52 +01:00
Tony Garnock-Jones 5377a486c9 Better Isolated Turn Principle 2018-04-11 12:28:09 +01:00
Tony Garnock-Jones 533d6f9a24 Improve syntax location tracking 2018-04-09 10:29:14 +01:00
Tony Garnock-Jones 3452f1fe6e Script suspend and resume 2018-04-09 10:23:22 +01:00
Tony Garnock-Jones bd9dcb61ca Simple messages-per-second test (~195kHz at present) 2018-04-08 12:06:37 +01:00
Tony Garnock-Jones eb24d566e9 Progress on syntax veneer 2018-04-08 11:44:32 +01:00
Tony Garnock-Jones e84f2e2e39 Eliminate (interesting uses of) facet IDs by storing references directly 2018-04-08 08:52:37 +01:00
Tony Garnock-Jones fe6b895d8a More structured FID representation. 2018-04-08 07:58:17 +01:00
Tony Garnock-Jones 3c70496688 Steps toward API usable by syntax layer; beginning of syntax layer, adapted from previous implementation 2018-04-08 07:39:39 +01:00
Tony Garnock-Jones 7f65d9e452 Fine-tune skeleton-accumulator representations for persistency/reuse and for potential speed benefit 2018-04-08 07:01:39 +01:00
Tony Garnock-Jones c122add136 Correct typo 2018-04-07 08:42:38 +01:00
Tony Garnock-Jones 5d6e0f3904 printf to log-info; clean up demo output 2018-04-06 12:07:09 +01:00
Tony Garnock-Jones 4c4afc6b6e Eliminate a few useless parameters 2018-04-06 11:58:49 +01:00
Tony Garnock-Jones 2e67feee6d POC imperative dataspace implementation, with set-box example 2018-04-06 11:37:59 +01:00
Tony Garnock-Jones 25997cc778 Switch to skeleton-stx with struct-type rather than predicate 2018-03-27 22:21:49 +13:00
Tony Garnock-Jones 1d67cbe65e Rearrange 2018-03-27 22:21:49 +13:00
Tony Garnock-Jones 883fcb9b75 Start translation of pattern syntax to various structures 2018-03-27 22:21:49 +13:00
Tony Garnock-Jones 86930702e0 Initial sketch of new routing-table idea 2018-03-27 22:21:49 +13:00