-
Notifications
You must be signed in to change notification settings - Fork 207
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
unify vat-worker filenames #2202
Comments
re Is the |
Yeah, |
* feat(xsnap): setImmediate and print In addition to detecting XS Machine quiescense so we can safely take snapshots, the supervisor has to detect vat queiscense so it can tell when a delivery is done. I have resorted to ad-hoc `fprintf()` at the C level for debugging enough to justify restoring print. Here we test that it's only available in the start compartment. note print() includes fflush() * build(xsnap): don't set mxDebug in release builds fixes #2216 only tested on lin, not mac nor win * build(xsnap): build GOAL=debug too * fix(xsnap): don't swallow error message * feat(xsnap): return data from xsnap.evaluate() Using the .result property of a mutable object rather than the resolution of a promise is a little awkward, but it seems to work. * chore(xs-vat-worker): prune obsolete dependencies * build(xs-vat-worker): moddable submodule is obsolete * style(xs-vat-worker): use canonical @Agoric style * feat(xs-vat-worker): TextDecoder, HandledPromise before lockdown * refactor(SwingSet): unify vat-worker filenames fixes #2202 * feat(swingset): xsnap vat manager - build xsnap bootstrap bundles - bytes to tagged array and back - setBundle, importBundle - syscall - delivery success symbol is ok, not deliverDone - Use Tagged type consistently; don't constrain tag to be string. - clean up logging: use parentLog(), trace(), ... - static typing for doProcess: capture dispatch while it's known to be not null - silence parentLog, workerLog for xsnap - no, handleSyscall doesn't return Tagged - inherit stdout, stderr in xsnap - vatid arg on doNotify is no more * fix: crank 1 comment in vat-target.js * fix: supply groupCollapsed etc. in console-shim for SES * fix(xsnap): handle edge cases in sending replies to e, ? * refactor: avoid 2nd round trip to xsnap - manager: prune commandResult - supervisor: factor out "transport" logic as `ManagerPort`, separate from vat-worker `makeWorker()` - ManagerPort.handler provides `{ result?: ArrayBuffer }` idiom based on Promise<Tagged> - testLog uses ManagerPort.send - clean up redundant 'ok' tag in doMessage, doNotify - refactor: tagged -> item for consistency * feat(xsnap worker): pass console log messages to manager - prune 'starting xsnap' log msg (per code review) - handle rejection in ManagerPort.handler * fix(xsnap): build args * refactor(xsnap): fold in what's left of xs-vat-worker - prune obsolete locate.js * chore(xsnap): move lockdown-shim out of src/ to avoid tsc errors move lockdown-shim.js and the rest of the SES bootstrap files from src/ to lib/ to avoid many tsc errors of the form... ``` Error: ../../node_modules/ses/src/error/assert.js(24,20): error TS2304: Cannot find name 'StringablePayload'. ``` * docs(xsnap): document XS handleCommand async idiom * refactor: build XS bundles with Kernel bundles * fix(xsnap worker): update syscall API to use .resolve() * chore(xsnap): provide non-trivial console in start compartment add TODO re other console methods with pointer to #2146
The
packages/SwingSet/src/kernel/vatManager/
directory currently contains the following files:and they could do with a renaming/cleanup pass. @dckc is likely to be working here in the next week, which might be a good time to do the cleanup.
factory.js
is the entry point: it exposes a function (to the kernel) to create a new vat-manager of a particular type, with some set of options. Vat-managers of all types present a common API to the kernel for delivering messages to the vats they manage.transcript.js
,deliver.js
, andsyscall.js
are libraries used by multiple manager types.We currently have three types of vat-managers (and XS will be a fourth):
Worker
is the facility by which new threads are created, similar to how web browsers provideServiceWorker
andWebWorker
. The kernel thread usespostMessage
to send deliveries to the worker thread.xsnap
library to spawn and communicate with the child.Each type of vat-manager is defined in a separate file:
localVatManager.js
,nodeWorker.js
, andworker-subprocess-node.js
.The manager types which run the worker in a child process or thread all need some code for the child to first execute, known as a "supervisor". The Node.js Subprocess type puts this in
subprocessSupervisor.js
. The Node.js Worker type puts it innodeWorkerSupervisor.js
, and requires an additional file namednodeWorkerSupervisorCJS.js
because you cannot start a worker from an ES6 Module -format file (sonodeWorkerSupervisorCJS.js
is CJS-format and loads first, and it then can import the module-format code fromnodeWorkerSupervisor.js
).The new XS-via-xsnap will require several pieces of code to be
eval()
ed in the child process. The first will set up the SES environment (portions of the SES-shim, and code to invokelockdown()
). The second will establish the supervisor, and install a command handler that accepts requests to create new Compartments and load vat code into them. Both must be delivered as single strings (actually byte arrays). These will be created by callingrollup()
on files that live in thevatManager/
directory, and sending the resulting single string in an xsnapevaluate
command.So our current files are:
I think the new filenames should be:
Also note that
rollup
takes a non-trivial amount of time, and is especially noticeable when running unit tests that create dozens of vats or kernel instances in a single program. We can improve this by building the two supervisor bundles ahead of time, and stashing them in memory until needed. Look atbuildKernelBundles
insrc/initializeSwingset.js
and examples of its use in e.g.test/test-promises.js
and follow the pattern there.The text was updated successfully, but these errors were encountered: