From 6c20799b92748813c39004c67cfdabd5b51e07fe Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Mon, 8 Jan 2024 09:49:32 +0000 Subject: [PATCH 1/3] Extra traces inside of runJS to find out where time is being used. --- packages/server/src/jsRunner.ts | 64 +++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 26 deletions(-) diff --git a/packages/server/src/jsRunner.ts b/packages/server/src/jsRunner.ts index a9dcd506d7..f041f211fb 100644 --- a/packages/server/src/jsRunner.ts +++ b/packages/server/src/jsRunner.ts @@ -12,36 +12,48 @@ export function init() { const perRequestLimit = env.JS_PER_REQUEST_TIME_LIMIT_MS let track: TrackerFn = f => f() if (perRequestLimit) { - const bbCtx = context.getCurrentContext() - if (bbCtx) { - if (!bbCtx.jsExecutionTracker) { - bbCtx.jsExecutionTracker = - timers.ExecutionTimeTracker.withLimit(perRequestLimit) + tracer.trace("runJS.setupTracker", {}, span => { + const bbCtx = context.getCurrentContext() + if (bbCtx) { + if (!bbCtx.jsExecutionTracker) { + bbCtx.jsExecutionTracker = + timers.ExecutionTimeTracker.withLimit(perRequestLimit) + } + span?.addTags({ + js: { + limitMS: bbCtx.jsExecutionTracker.limitMs, + elapsedMS: bbCtx.jsExecutionTracker.elapsedMS, + }, + }) + // We call checkLimit() here to prevent paying the cost of creating + // a new VM context below when we don't need to. + bbCtx.jsExecutionTracker.checkLimit() + track = bbCtx.jsExecutionTracker.track.bind( + bbCtx.jsExecutionTracker + ) } - span?.addTags({ - js: { - limitMS: bbCtx.jsExecutionTracker.limitMs, - elapsedMS: bbCtx.jsExecutionTracker.elapsedMS, - }, - }) - // We call checkLimit() here to prevent paying the cost of creating - // a new VM context below when we don't need to. - bbCtx.jsExecutionTracker.checkLimit() - track = bbCtx.jsExecutionTracker.track.bind(bbCtx.jsExecutionTracker) - } + }) } - ctx = { - ...ctx, - alert: undefined, - setInterval: undefined, - setTimeout: undefined, - } - vm.createContext(ctx) + ctx = tracer.trace("runJS.ctxClone", {}, span => { + return { + ...ctx, + alert: undefined, + setInterval: undefined, + setTimeout: undefined, + } + }) + + tracer.trace("runJS.vm.createContext", {}, span => { + vm.createContext(ctx) + }) + return track(() => - vm.runInNewContext(js, ctx, { - timeout: env.JS_PER_EXECUTION_TIME_LIMIT_MS, - }) + tracer.trace("runJS.vm.runInNewContext", {}, span => + vm.runInNewContext(js, ctx, { + timeout: env.JS_PER_EXECUTION_TIME_LIMIT_MS, + }) + ) ) }) }) From d5850d59de4224843dd8444571a30a53186ea74a Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Mon, 8 Jan 2024 09:52:07 +0000 Subject: [PATCH 2/3] Add bool to show when execution tracker gets created. --- packages/server/src/jsRunner.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/server/src/jsRunner.ts b/packages/server/src/jsRunner.ts index f041f211fb..6fde3ab82a 100644 --- a/packages/server/src/jsRunner.ts +++ b/packages/server/src/jsRunner.ts @@ -12,10 +12,13 @@ export function init() { const perRequestLimit = env.JS_PER_REQUEST_TIME_LIMIT_MS let track: TrackerFn = f => f() if (perRequestLimit) { - tracer.trace("runJS.setupTracker", {}, span => { + tracer.trace("runJS.setupTracker", {}, span => { const bbCtx = context.getCurrentContext() if (bbCtx) { if (!bbCtx.jsExecutionTracker) { + span?.addTags({ + createdExecutionTracker: true, + }) bbCtx.jsExecutionTracker = timers.ExecutionTimeTracker.withLimit(perRequestLimit) } From 024c3ec3ae7fab74c519eb9474043bb9d267d502 Mon Sep 17 00:00:00 2001 From: Budibase Staging Release Bot <> Date: Mon, 8 Jan 2024 15:51:36 +0000 Subject: [PATCH 3/3] Bump version to 2.14.4 --- lerna.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerna.json b/lerna.json index d6fa262685..386fbe425a 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.14.3", + "version": "2.14.4", "npmClient": "yarn", "packages": [ "packages/*",