Skip to content

Commit

Permalink
feat(swingset): introduce 'xs-worker-no-gc' for forward compat
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelfig committed Jun 24, 2021
1 parent 70ad8b4 commit e46cd88
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 13 deletions.
1 change: 1 addition & 0 deletions packages/SwingSet/src/initializeSwingset.js
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,7 @@ export async function initializeSwingset(
case 'nodeWorker':
case 'node-subprocess':
case 'xs-worker':
case 'xs-worker-no-gc':
config.defaultManagerType = defaultManagerType;
break;
case undefined:
Expand Down
28 changes: 19 additions & 9 deletions packages/SwingSet/src/kernel/vatManager/factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ export function makeVatManagerFactory({
assertKnownOptions(managerOptions, [
'enablePipelining',
'managerType',
'gcEveryCrank',
'setup',
'bundle',
'metered',
Expand Down Expand Up @@ -89,15 +90,16 @@ export function makeVatManagerFactory({
enableSetup,
} = managerOptions;

if (metered && managerType !== 'local' && managerType !== 'xs-worker') {
console.warn(
`TODO: support metered with ${managerType}; using local as work-around`,
);
if (
metered &&
managerType !== 'local' &&
managerType !== 'xs-worker' &&
managerType !== 'xs-worker-no-gc'
) {
console.warn(`TODO: support metered with ${managerType}`);
}
if (setup && managerType !== 'local') {
console.warn(
`TODO: stop using setup() with ${managerType}; using local as work-around`,
);
console.warn(`TODO: stop using setup() with ${managerType}`);
}
if (managerType === 'local' || enableSetup) {
if (setup) {
Expand Down Expand Up @@ -134,11 +136,19 @@ export function makeVatManagerFactory({
);
}

if (managerType === 'xs-worker') {
if (managerType === 'xs-worker' || managerType === 'xs-worker-no-gc') {
const transformedOptions = {
...managerOptions,
managerType: 'xs-worker',
};
if (managerOptions.gcEveryCrank === undefined) {
// Explicitly enable/disable gcEveryCrank.
transformedOptions.gcEveryCrank = managerType !== 'xs-worker-no-gc';
}
return xsWorkerFactory.createFromBundle(
vatID,
bundle,
managerOptions,
transformedOptions,
vatSyscallHandler,
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ export function makeXsSubprocessFactory({
virtualObjectCacheSize,
enableDisavow,
enableVatstore,
gcEveryCrank = true,
name,
metered,
compareSyscalls,
Expand Down Expand Up @@ -130,6 +131,7 @@ export function makeXsSubprocessFactory({
virtualObjectCacheSize,
enableDisavow,
enableVatstore,
gcEveryCrank,
]);
if (bundleReply[0] === 'dispatchReady') {
parentLog(vatID, `bundle loaded. dispatch ready.`);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ function makeWorker(port) {
* @param {unknown} virtualObjectCacheSize
* @param {boolean} enableDisavow
* @param {boolean} enableVatstore
* @param {boolean} [gcEveryCrank]
* @returns { Promise<Tagged> }
*/
async function setBundle(
Expand All @@ -156,6 +157,7 @@ function makeWorker(port) {
virtualObjectCacheSize,
enableDisavow,
enableVatstore,
gcEveryCrank,
) {
/** @type { (vso: VatSyscallObject) => VatSyscallResult } */
function syscallToManager(vatSyscallObject) {
Expand Down Expand Up @@ -192,7 +194,7 @@ function makeWorker(port) {
waitUntilQuiescent,
// FIXME(mfig): Here is where GC-per-crank is silently disabled.
// We need to do a better analysis of the tradeoffs.
gcAndFinalize: makeGcAndFinalize(false && globalThis.gc),
gcAndFinalize: makeGcAndFinalize(gcEveryCrank && globalThis.gc),
});

const ls = makeLiveSlots(
Expand Down Expand Up @@ -236,13 +238,15 @@ function makeWorker(port) {
assert(!dispatch, 'cannot setBundle again');
const enableDisavow = !!args[4];
const enableVatstore = !!args[5];
const gcEveryCrank = args[6] === undefined ? true : !!args[6];
return setBundle(
args[0],
args[1],
args[2],
args[3],
enableDisavow,
enableVatstore,
gcEveryCrank,
);
}
case 'deliver': {
Expand Down
3 changes: 2 additions & 1 deletion packages/SwingSet/src/types.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@
* TODO: liveSlotsConsole...
* See validateManagerOptions() in factory.js
*
* @typedef { 'local' | 'nodeWorker' | 'node-subprocess' | 'xs-worker' } ManagerType
* @typedef { 'local' | 'nodeWorker' | 'node-subprocess' | 'xs-worker' | 'xs-worker-no-gc' } ManagerType
* @typedef {{
* enablePipelining?: boolean,
* managerType: ManagerType,
* gcEveryCrank?: boolean,
* metered?: boolean,
* enableDisavow?: boolean,
* useTranscript?: boolean,
Expand Down
2 changes: 1 addition & 1 deletion packages/solo/solo-config.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"bootstrap": "bootstrap",
"defaultManagerType": "xs-worker",
"defaultManagerType": "xs-worker-no-gc",
"vats": {
"spawner": {
"sourceSpec": "./src/vat-spawner.js"
Expand Down
2 changes: 1 addition & 1 deletion packages/vats/decentral-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"sourceSpec": "@agoric/zoe/contractFacet"
}
},
"defaultManagerType": "xs-worker",
"defaultManagerType": "xs-worker-no-gc",
"vats": {
"bank": {
"sourceSpec": "./src/vat-bank.js"
Expand Down

0 comments on commit e46cd88

Please sign in to comment.