@overkill-dev/run 0.0.56 → 0.0.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/engine/test-body-resource-attachment.d.ts +15 -0
- package/engine/test-body-resource-attachment.d.ts.map +1 -1
- package/engine/test-body-resource-attachment.js +16 -0
- package/engine/test-body-resource-attachment.js.map +1 -1
- package/package.json +14 -4
- package/packages/engine/engine.entry-point.d.ts +1 -1
- package/packages/engine/engine.entry-point.d.ts.map +1 -1
- package/packages/run/run.entry-point.d.ts +2 -1
- package/packages/run/run.entry-point.d.ts.map +1 -1
- package/readme.md +16 -1
- package/reporters/human-reporter-rendering.js +1 -1
- package/reporters/human-reporter-rendering.js.map +1 -1
- package/reporters/line-reporter.js +5 -2
- package/reporters/line-reporter.js.map +1 -1
- package/reporters/run-summary-rendering.js +80 -0
- package/reporters/run-summary-rendering.js.map +1 -0
- package/resources/resource-definition-brand.d.ts +2 -0
- package/resources/resource-definition-brand.d.ts.map +1 -0
- package/resources/resource-definition-brand.js +2 -0
- package/resources/resource-definition-brand.js.map +1 -0
- package/resources/resource-definition-shape.d.ts +3 -0
- package/resources/resource-definition-shape.d.ts.map +1 -1
- package/resources/resource-definition-types.d.ts +104 -0
- package/resources/resource-definition-types.d.ts.map +1 -0
- package/resources/resource-definition.js +52 -0
- package/resources/resource-definition.js.map +1 -0
- package/resources/resource-graph.d.ts +3 -3
- package/resources/resource-graph.d.ts.map +1 -1
- package/resources/resource-graph.js.map +1 -1
- package/resources/resource-scenario-binding.d.ts +37 -0
- package/resources/resource-scenario-binding.d.ts.map +1 -0
- package/resources/resource-scenario-binding.js +99 -0
- package/resources/resource-scenario-binding.js.map +1 -0
- package/resources/resource-scenario.d.ts +31 -0
- package/resources/resource-scenario.d.ts.map +1 -0
- package/resources/resource-scenario.js +68 -0
- package/resources/resource-scenario.js.map +1 -0
- package/resources/resource-session.d.ts +3 -2
- package/resources/resource-session.d.ts.map +1 -1
- package/resources/resources.d.ts +46 -76
- package/resources/resources.d.ts.map +1 -1
- package/resources/resources.js +90 -10
- package/resources/resources.js.map +1 -1
- package/resources/runtime-definition.d.ts +11 -2
- package/resources/runtime-definition.d.ts.map +1 -1
- package/resources/runtime-definition.js +66 -0
- package/resources/runtime-definition.js.map +1 -1
- package/resources/runtime-matrix-definition.d.ts +25 -6
- package/resources/runtime-matrix-definition.d.ts.map +1 -1
- package/resources/runtime-matrix-definition.js +226 -4
- package/resources/runtime-matrix-definition.js.map +1 -1
- package/run/command-line-runner.d.ts.map +1 -1
- package/run/command-line-runner.js +10 -5
- package/run/command-line-runner.js.map +1 -1
- package/run/duration-history.d.ts +10 -1
- package/run/duration-history.d.ts.map +1 -1
- package/run/duration-history.js +2 -2
- package/run/duration-history.js.map +1 -1
- package/run/node-child-process-starters.js +1 -1
- package/run/node-child-process-starters.js.map +1 -1
- package/run/resource-lifecycle-boundaries.js +182 -0
- package/run/resource-lifecycle-boundaries.js.map +1 -0
- package/run/resource-lifecycle-cache-identity.js +65 -0
- package/run/resource-lifecycle-cache-identity.js.map +1 -0
- package/run/resource-lifecycle-composition.d.ts +2 -0
- package/run/resource-lifecycle-composition.d.ts.map +1 -1
- package/run/resource-lifecycle-composition.js +48 -11
- package/run/resource-lifecycle-composition.js.map +1 -1
- package/run/resource-lifecycle-projection.js +48 -0
- package/run/resource-lifecycle-projection.js.map +1 -0
- package/run/resource-lifecycle-session-acquirer.js +182 -0
- package/run/resource-lifecycle-session-acquirer.js.map +1 -0
- package/run/resource-lifecycle-startup-budget.js +82 -0
- package/run/resource-lifecycle-startup-budget.js.map +1 -0
- package/run/resource-lifecycle-state.d.ts +2 -0
- package/run/resource-lifecycle-state.d.ts.map +1 -1
- package/run/resource-lifecycle-state.js.map +1 -1
- package/run/resource-lifecycle-timing.js +85 -0
- package/run/resource-lifecycle-timing.js.map +1 -0
- package/run/resource-lifecycle.js +133 -237
- package/run/resource-lifecycle.js.map +1 -1
- package/run/run-collected-planning.js +34 -6
- package/run/run-collected-planning.js.map +1 -1
- package/run/run-collected-resolution.js +4 -2
- package/run/run-collected-resolution.js.map +1 -1
- package/run/run-collection-error-result.js +2 -2
- package/run/run-collection-error-result.js.map +1 -1
- package/run/run-config-schema.d.ts +7 -0
- package/run/run-config-schema.d.ts.map +1 -1
- package/run/run-config-schema.js +4 -0
- package/run/run-config-schema.js.map +1 -1
- package/run/run-config.d.ts.map +1 -1
- package/run/run-config.js +4 -4
- package/run/run-config.js.map +1 -1
- package/run/run-empty-shard.js +2 -2
- package/run/run-empty-shard.js.map +1 -1
- package/run/run-facts.js +5 -1
- package/run/run-facts.js.map +1 -1
- package/run/run-if-main-facts.js +2 -1
- package/run/run-if-main-facts.js.map +1 -1
- package/run/run-in-process-execution.js +3 -3
- package/run/run-in-process-execution.js.map +1 -1
- package/run/run-input-resolution.js +6 -0
- package/run/run-input-resolution.js.map +1 -1
- package/run/run-isolated-process.js +39 -24
- package/run/run-isolated-process.js.map +1 -1
- package/run/run-local-execution.js +12 -3
- package/run/run-local-execution.js.map +1 -1
- package/run/run-local-resolution.js +6 -2
- package/run/run-local-resolution.js.map +1 -1
- package/run/run-orchestrator-dependencies.d.ts +2 -0
- package/run/run-orchestrator-dependencies.d.ts.map +1 -1
- package/run/run-orchestrator-dependencies.js.map +1 -1
- package/run/run-support.js +14 -6
- package/run/run-support.js.map +1 -1
- package/run/run-timing-collection.d.ts +43 -0
- package/run/run-timing-collection.d.ts.map +1 -0
- package/run/run-timing-collection.js +173 -8
- package/run/run-timing-collection.js.map +1 -1
- package/run/run-types.d.ts +13 -3
- package/run/run-types.d.ts.map +1 -1
- package/run/run-types.js.map +1 -1
- package/run/run-validation.js +2 -0
- package/run/run-validation.js.map +1 -1
- package/run/run.js +31 -20
- package/run/run.js.map +1 -1
- package/run/supervised-child-process.d.ts +1 -0
- package/run/supervised-child-process.d.ts.map +1 -1
- package/run/supervised-child-process.js +5 -0
- package/run/supervised-child-process.js.map +1 -1
- package/run/supervised-child.js +3 -2
- package/run/supervised-child.js.map +1 -1
- package/run/supervised-protocol.js +14 -0
- package/run/supervised-protocol.js.map +1 -1
- package/run/supervised-run-collection.js +123 -0
- package/run/supervised-run-collection.js.map +1 -0
- package/run/supervised-run-runtime.js +8 -13
- package/run/supervised-run-runtime.js.map +1 -1
- package/run/supervised-run.js +74 -106
- package/run/supervised-run.js.map +1 -1
- package/run/work-unit-planning.js +4 -2
- package/run/work-unit-planning.js.map +1 -1
- package/run/work-unit-resource-constraints.js +23 -6
- package/run/work-unit-resource-constraints.js.map +1 -1
- package/run/worker-pool-collection.js +46 -20
- package/run/worker-pool-collection.js.map +1 -1
- package/run/worker-pool-command.js +68 -0
- package/run/worker-pool-command.js.map +1 -0
- package/run/worker-pool-dispatch-state.js +2 -4
- package/run/worker-pool-dispatch-state.js.map +1 -1
- package/run/worker-pool-execution.js +48 -73
- package/run/worker-pool-execution.js.map +1 -1
- package/run/worker-pool-hedge-dispatch.js +2 -1
- package/run/worker-pool-hedge-dispatch.js.map +1 -1
- package/run/worker-pool-host-process-starter.js +13 -0
- package/run/worker-pool-host-process-starter.js.map +1 -0
- package/run/worker-pool-host-process.js +53 -79
- package/run/worker-pool-host-process.js.map +1 -1
- package/run/worker-pool-host-protocol.js.map +1 -1
- package/run/worker-pool-host-signal.js +21 -0
- package/run/worker-pool-host-signal.js.map +1 -0
- package/run/worker-pool-host-task.js +55 -0
- package/run/worker-pool-host-task.js.map +1 -0
- package/run/worker-pool-lanes.js +51 -24
- package/run/worker-pool-lanes.js.map +1 -1
- package/run/worker-pool-lifecycle-lanes.js +4 -56
- package/run/worker-pool-lifecycle-lanes.js.map +1 -1
- package/run/worker-pool-placement-planning.js +9 -4
- package/run/worker-pool-placement-planning.js.map +1 -1
- package/run/worker-pool-protocol.js +2 -0
- package/run/worker-pool-protocol.js.map +1 -0
- package/run/worker-pool-resource-lifecycle-execution.js +155 -0
- package/run/worker-pool-resource-lifecycle-execution.js.map +1 -0
- package/run/worker-pool-routing.js +6 -3
- package/run/worker-pool-routing.js.map +1 -1
- package/run/worker-pool-run.js +74 -19
- package/run/worker-pool-run.js.map +1 -1
- package/run/worker-pool-runtime.js +87 -20
- package/run/worker-pool-runtime.js.map +1 -1
- package/run/worker-pool-task-events.js +3 -0
- package/run/worker-pool-task-events.js.map +1 -1
- package/run/worker-pool-task-validation.js +11 -0
- package/run/worker-pool-task-validation.js.map +1 -0
- package/run/worker-pool-work-dispatcher.js +27 -21
- package/run/worker-pool-work-dispatcher.js.map +1 -1
- package/run/worker-pool-worker-resources.js +99 -0
- package/run/worker-pool-worker-resources.js.map +1 -0
- package/run/worker-pool-worker-timing.js +63 -0
- package/run/worker-pool-worker-timing.js.map +1 -0
- package/run/worker-pool-worker.js +93 -32
- package/run/worker-pool-worker.js.map +1 -1
- package/sbom.cdx.json +9 -9
- package/reporters/run-fact-summary.js +0 -20
- package/reporters/run-fact-summary.js.map +0 -1
- package/reporters/run-timing-summary.js +0 -11
- package/reporters/run-timing-summary.js.map +0 -1
|
@@ -2,7 +2,7 @@ import { workIdentityKey } from "../engine/identity.js";
|
|
|
2
2
|
import { collectedRunCaseEntries } from "./collected-run-plan.js";
|
|
3
3
|
import { selectDurationHistoryPlacement } from "./duration-history.js";
|
|
4
4
|
import { workUnitsFromCollectedPlan } from "./work-unit-planning.js";
|
|
5
|
-
import {
|
|
5
|
+
import { resolveWorkerCount, workerPoolLanesForCount, workerPoolPlacementAssignments } from "./worker-pool-lanes.js";
|
|
6
6
|
|
|
7
7
|
function collectedEntriesByWorkKey(collectedPlan) {
|
|
8
8
|
return new Map(collectedRunCaseEntries(collectedPlan).map(function toEntry(entry) {
|
|
@@ -26,18 +26,23 @@ export function createWorkerPoolPlacementResolution(input) {
|
|
|
26
26
|
const durationHistory = input.assignmentPolicy === 'duration-history-balanced'
|
|
27
27
|
? selectDurationHistoryPlacement(units, input.durationHistoryIndex, input.nowMilliseconds)
|
|
28
28
|
: { facts: null, unitDuration: null };
|
|
29
|
-
const
|
|
29
|
+
const laneInput = {
|
|
30
30
|
assignmentPolicy: input.assignmentPolicy,
|
|
31
31
|
availableParallelism: input.availableParallelism,
|
|
32
|
+
profileMaximum: input.profileMaximumWorkers,
|
|
33
|
+
requestedWorkers: input.requestedWorkers,
|
|
32
34
|
units
|
|
33
|
-
}
|
|
35
|
+
};
|
|
36
|
+
const workerCount = resolveWorkerCount(laneInput);
|
|
37
|
+
const lanes = workerPoolLanesForCount(workerCount.resolved);
|
|
34
38
|
return {
|
|
35
39
|
durationHistory: durationHistory.facts,
|
|
36
40
|
placementPlan: {
|
|
37
41
|
assignments: workerPoolPlacementAssignments(units, lanes, input.assignmentPolicy, durationHistory.unitDuration),
|
|
38
42
|
lanes,
|
|
39
43
|
units
|
|
40
|
-
}
|
|
44
|
+
},
|
|
45
|
+
workerCount
|
|
41
46
|
};
|
|
42
47
|
}
|
|
43
48
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-pool-placement-planning.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-placement-planning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACH,uBAAuB,EAC1B,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-pool-placement-planning.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-placement-planning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACH,uBAAuB,EAC1B,MAAM,yBAAyB,CAAC;AAajC,OAAO,EACH,8BAA8B,EAGjC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACH,0BAA0B,EAC7B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACH,kBAAkB,EAClB,uBAAuB,EACvB,8BAA8B,EAEjC,MAAM,wBAAwB,CAAC;AAEA;AAkChC,SAAS,yBAAyB,CAC9B,aAA+B;IAE/B,OAAO,IAAI,GAAG,CACV,uBAAuB,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,KAAK;QAC7D,OAAO,CAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAE,CAAC;IACpD,CAAC,CAAC,CACL,CAAC;AACN,CAAC;AAED,MAAM,UAAU,oCAAoC,CAChD,aAA+B,EAC/B,KAA6B;IAE7B,MAAM,OAAO,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;IAEzD,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,gBAAgB,CAAC,IAAI;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,cAAc,CAAC,IAAI;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YAEjD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC5E,CAAC;YAED,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,mCAAmC,CAC/C,KAAyC;IAEzC,MAAM,KAAK,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,KAAK,CAAC,gBAAgB,KAAK,2BAA2B;QAC1E,CAAC,CAAC,8BAA8B,CAAC,KAAK,EAAE,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,eAAe,CAAC;QAC1F,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAwB;QACnC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,cAAc,EAAE,KAAK,CAAC,qBAAqB;QAC3C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,KAAK;KACR,CAAC;IACF,MAAM,WAAW,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,uBAAuB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE5D,OAAO;QACH,eAAe,EAAE,eAAe,CAAC,KAAK;QACtC,aAAa,EAAE;YACX,WAAW,EAAE,8BAA8B,CACvC,KAAK,EACL,KAAK,EACL,KAAK,CAAC,gBAAgB,EACtB,eAAe,CAAC,YAAY,CAC/B;YACD,KAAK;YACL,KAAK;SACR;QACD,WAAW;KACd,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-pool-protocol.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-protocol.ts"],"names":[],"mappings":"AAyCA,MAAM,CAAC,MAAM,8BAA8B,GAAG,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { MessageChannel as NodeMessageChannel } from 'node:worker_threads';
|
|
2
|
+
import { workIdentityKey } from "../engine/identity.js";
|
|
3
|
+
import { createBatchRunCommand, createRunCommand, firstPlanUnit, placementRunWork } from "./worker-pool-command.js";
|
|
4
|
+
import { workerPoolRunResourceOwnerLane } from "./worker-pool-protocol.js";
|
|
5
|
+
import { collectedPlanNeedsRunResourceOwner } from "./worker-pool-runtime.js";
|
|
6
|
+
function portTransferList(port) {
|
|
7
|
+
return [port];
|
|
8
|
+
}
|
|
9
|
+
function freshSignal() {
|
|
10
|
+
const controller = new AbortController();
|
|
11
|
+
return controller.signal;
|
|
12
|
+
}
|
|
13
|
+
function isWorkerPoolRunResourceOutput(value) {
|
|
14
|
+
return value !== null &&
|
|
15
|
+
typeof value === 'object' &&
|
|
16
|
+
Object.hasOwn(value, 'projectedResources') &&
|
|
17
|
+
Object.hasOwn(value, 'runnerErrors');
|
|
18
|
+
}
|
|
19
|
+
function isWorkerPoolDisposeResourceOutput(value) {
|
|
20
|
+
return value !== null &&
|
|
21
|
+
typeof value === 'object' &&
|
|
22
|
+
Object.hasOwn(value, 'runnerErrors');
|
|
23
|
+
}
|
|
24
|
+
function resourceTaskChannel() {
|
|
25
|
+
const { port1, port2 } = new NodeMessageChannel();
|
|
26
|
+
return {
|
|
27
|
+
close() {
|
|
28
|
+
port2.close();
|
|
29
|
+
},
|
|
30
|
+
port: port1
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function recordResourceRunnerErrors(runtime, errors) {
|
|
34
|
+
if (errors.length > 0) {
|
|
35
|
+
runtime.runState.recordRunnerErrors(errors);
|
|
36
|
+
runtime.terminalFailure.write(true);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function recordResourceLifecycleFailure(runtime, message, cause) {
|
|
40
|
+
if (runtime.terminalFailure.read()) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
runtime.runState.recordRunnerError({
|
|
44
|
+
attributedTo: null,
|
|
45
|
+
attributedToWork: null,
|
|
46
|
+
cause,
|
|
47
|
+
diagnostics: [],
|
|
48
|
+
message,
|
|
49
|
+
subtype: 'runtime-policy'
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
export function createWorkerPoolBatchRunCommand(runtime, members) {
|
|
53
|
+
return {
|
|
54
|
+
...createBatchRunCommand(runtime, members)
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export function workerPoolWorkHasStarted(startedCases, work) {
|
|
58
|
+
return startedCases.has(workIdentityKey(work));
|
|
59
|
+
}
|
|
60
|
+
async function acquireRunResourceOutput(runtime, plan, work) {
|
|
61
|
+
const channel = resourceTaskChannel();
|
|
62
|
+
try {
|
|
63
|
+
return await runtime.pool.run({
|
|
64
|
+
assignedWork: work,
|
|
65
|
+
boundaryUseCounts: [],
|
|
66
|
+
command: createRunCommand(runtime, firstPlanUnit(plan)),
|
|
67
|
+
kind: 'acquire-run-resources',
|
|
68
|
+
lane: workerPoolRunResourceOwnerLane,
|
|
69
|
+
lifecycle: runtime.lifecycle,
|
|
70
|
+
port: channel.port
|
|
71
|
+
}, {
|
|
72
|
+
name: 'runTask',
|
|
73
|
+
signal: freshSignal(),
|
|
74
|
+
transferList: portTransferList(channel.port)
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
channel.close();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function acquireRunResources(runtime, plan) {
|
|
82
|
+
const work = placementRunWork(plan);
|
|
83
|
+
const output = await acquireRunResourceOutput(runtime, plan, work);
|
|
84
|
+
if (!isWorkerPoolRunResourceOutput(output)) {
|
|
85
|
+
throw new Error('Worker-pool run resource task returned an invalid result.');
|
|
86
|
+
}
|
|
87
|
+
recordResourceRunnerErrors(runtime, output.runnerErrors);
|
|
88
|
+
return { projectedResources: output.projectedResources, runResourceOwner: true, runWork: work };
|
|
89
|
+
}
|
|
90
|
+
async function runDisposalTaskOutput(runtime, lane, kind) {
|
|
91
|
+
const channel = resourceTaskChannel();
|
|
92
|
+
try {
|
|
93
|
+
return await runtime.pool.run({
|
|
94
|
+
kind,
|
|
95
|
+
lane,
|
|
96
|
+
lifecycle: runtime.lifecycle,
|
|
97
|
+
port: channel.port
|
|
98
|
+
}, {
|
|
99
|
+
name: 'runTask',
|
|
100
|
+
signal: freshSignal(),
|
|
101
|
+
transferList: portTransferList(channel.port)
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
channel.close();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async function runDisposalTask(runtime, lane, kind) {
|
|
109
|
+
const output = await runDisposalTaskOutput(runtime, lane, kind);
|
|
110
|
+
if (!isWorkerPoolDisposeResourceOutput(output)) {
|
|
111
|
+
throw new Error('Worker-pool resource disposal returned an invalid result.');
|
|
112
|
+
}
|
|
113
|
+
recordResourceRunnerErrors(runtime, output.runnerErrors);
|
|
114
|
+
}
|
|
115
|
+
async function disposeRunResources(runtime) {
|
|
116
|
+
try {
|
|
117
|
+
await runDisposalTask(runtime, workerPoolRunResourceOwnerLane, 'dispose-run-resources');
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
recordResourceLifecycleFailure(runtime, 'Worker-pool run resource disposal failed.', error);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async function disposeLaneLifecycles(runtime, plan) {
|
|
124
|
+
await Promise.all(plan.lanes.map(async function disposeLane(lane) {
|
|
125
|
+
try {
|
|
126
|
+
await runDisposalTask(runtime, lane.id, 'dispose-lane-lifecycle');
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
recordResourceLifecycleFailure(runtime, 'Worker-pool lane resource disposal failed.', error);
|
|
130
|
+
}
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
export function collectedPlanNeedsLaneResourceLifecycle(runtime) {
|
|
134
|
+
return runtime.collectedPlan.files.some(function fileHasLaneResource(file) {
|
|
135
|
+
return file.cases.some(function caseHasLaneResource(testCase) {
|
|
136
|
+
return testCase.resourceAttachments.resourceGraph.some(function isLaneResource(resource) {
|
|
137
|
+
return resource.scope !== 'per-run';
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
export async function acquireWorkerPoolResourceLifecycle(runtime, placementPlan) {
|
|
143
|
+
return collectedPlanNeedsRunResourceOwner(runtime.resolvedRun)
|
|
144
|
+
? await acquireRunResources(runtime, placementPlan)
|
|
145
|
+
: { projectedResources: { resources: [] }, runResourceOwner: false, runWork: placementRunWork(placementPlan) };
|
|
146
|
+
}
|
|
147
|
+
export async function disposeWorkerPoolResourceLifecycles(runtime, placementPlan, resourceLifecycle) {
|
|
148
|
+
if (!runtime.terminalFailure.read() && collectedPlanNeedsLaneResourceLifecycle(runtime)) {
|
|
149
|
+
await disposeLaneLifecycles(runtime, placementPlan);
|
|
150
|
+
}
|
|
151
|
+
if (resourceLifecycle.runResourceOwner) {
|
|
152
|
+
await disposeRunResources(runtime);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=worker-pool-resource-lifecycle-execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-pool-resource-lifecycle-execution.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-resource-lifecycle-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createResourceUsageFromSamples } from "./resource-usage.js";
|
|
2
|
+
import { isWorkerPoolTaskKind } from "./worker-pool-task-validation.js";
|
|
2
3
|
function routeForLifecycle(routes, workerLifecycle) {
|
|
3
4
|
const route = routes.find(function hasWorkerLifecycle(candidate) {
|
|
4
5
|
return candidate.workerLifecycle === workerLifecycle;
|
|
@@ -20,20 +21,22 @@ function routeForLane(routes, lane) {
|
|
|
20
21
|
function isWorkerPoolTask(value) {
|
|
21
22
|
return typeof value === 'object' &&
|
|
22
23
|
value !== null &&
|
|
23
|
-
|
|
24
|
-
(Reflect.get(value, 'kind') === 'collect' || Reflect.get(value, 'kind') === 'run');
|
|
24
|
+
isWorkerPoolTaskKind(Reflect.get(value, 'kind'));
|
|
25
25
|
}
|
|
26
26
|
function taskWorkerLifecycle(task) {
|
|
27
27
|
if (!isWorkerPoolTask(task)) {
|
|
28
28
|
throw new Error('Worker-pool received an invalid task.');
|
|
29
29
|
}
|
|
30
|
+
if (task.kind === 'dispose-lane-lifecycle' || task.kind === 'dispose-run-resources') {
|
|
31
|
+
return 'reuse';
|
|
32
|
+
}
|
|
30
33
|
return task.command.workerLifecycle;
|
|
31
34
|
}
|
|
32
35
|
function taskLane(task) {
|
|
33
36
|
if (!isWorkerPoolTask(task)) {
|
|
34
37
|
throw new Error('Worker-pool received an invalid task.');
|
|
35
38
|
}
|
|
36
|
-
return task.kind === '
|
|
39
|
+
return task.kind === 'collect' ? null : task.lane;
|
|
37
40
|
}
|
|
38
41
|
function routeForTask(routes, task) {
|
|
39
42
|
const lane = taskLane(task);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-pool-routing.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-routing.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-pool-routing.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-routing.ts"],"names":[],"mappings":"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"}
|
package/run/worker-pool-run.js
CHANGED
|
@@ -4,8 +4,20 @@ import { executeWorkerPoolUnits } from "./worker-pool-execution.js";
|
|
|
4
4
|
import { reportRunStart, startPoolResourceTracking } from "./worker-pool-resource-tracking.js";
|
|
5
5
|
import { createEmptyWorkerPoolResult, finishWorkerPoolRun } from "./worker-pool-results.js";
|
|
6
6
|
import { createWorkerPoolRuntime, workerPoolPlacementPlan } from "./worker-pool-runtime.js";
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const emptyWorkerPoolTimingMetadata = Object.freeze({
|
|
8
|
+
label: null,
|
|
9
|
+
processId: null,
|
|
10
|
+
resource: null,
|
|
11
|
+
workerId: null
|
|
12
|
+
});
|
|
13
|
+
export async function collectWorkerPoolRun(command, dependencies, timing = null) {
|
|
14
|
+
return await collectInWorkerPool({
|
|
15
|
+
command,
|
|
16
|
+
createdPool: null,
|
|
17
|
+
dependencies,
|
|
18
|
+
runState: createSupervisedRunState(),
|
|
19
|
+
timing
|
|
20
|
+
});
|
|
9
21
|
}
|
|
10
22
|
async function releaseRuntimePool(runtime) {
|
|
11
23
|
runtime.pool.setHostOutputSink?.(null);
|
|
@@ -13,16 +25,23 @@ async function releaseRuntimePool(runtime) {
|
|
|
13
25
|
await runtime.pool.destroy();
|
|
14
26
|
}
|
|
15
27
|
}
|
|
28
|
+
async function releaseTimedRuntimePool(runtime, timing) {
|
|
29
|
+
if (runtime.destroyPool) {
|
|
30
|
+
await (timing?.measureAsync('worker-pool.shutdown', emptyWorkerPoolTimingMetadata, async function releaseTimedWorkerPoolRuntime() {
|
|
31
|
+
await releaseRuntimePool(runtime);
|
|
32
|
+
}) ?? releaseRuntimePool(runtime));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
await releaseRuntimePool(runtime);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
16
38
|
async function finishExecution(runtime, resolvedRun, startedAtMilliseconds, startedAtMicroseconds) {
|
|
17
39
|
await reportRunStart(runtime, startedAtMilliseconds);
|
|
18
40
|
await startPoolResourceTracking(runtime);
|
|
19
41
|
return await finishWorkerPoolRun(runtime, await executeWorkerPoolUnits(runtime, workerPoolPlacementPlan(resolvedRun), startedAtMilliseconds), startedAtMicroseconds);
|
|
20
42
|
}
|
|
21
|
-
async function
|
|
22
|
-
|
|
23
|
-
return await createEmptyWorkerPoolResult(resolvedRun, dependencies, state.collectionRunState);
|
|
24
|
-
}
|
|
25
|
-
const runtime = await createWorkerPoolRuntime({
|
|
43
|
+
async function createRuntime(resolvedRun, dependencies, state) {
|
|
44
|
+
return await createWorkerPoolRuntime({
|
|
26
45
|
collectionRunnerErrors: resolvedRun.collectionRunnerErrors,
|
|
27
46
|
createdPool: state.createdPool,
|
|
28
47
|
dependencies,
|
|
@@ -30,15 +49,33 @@ async function executeWorkerPoolRunWithState(resolvedRun, dependencies, state) {
|
|
|
30
49
|
return await state.finalizeResult(resolvedRun, result);
|
|
31
50
|
},
|
|
32
51
|
resolvedRun,
|
|
33
|
-
runState: state.collectionRunState
|
|
52
|
+
runState: state.collectionRunState,
|
|
53
|
+
timing: state.timing
|
|
34
54
|
});
|
|
55
|
+
}
|
|
56
|
+
async function finishExecutionWithRuntime(resolvedRun, dependencies, state, runtime) {
|
|
35
57
|
const startedAtMilliseconds = dependencies.wallClock.currentEpochMilliseconds;
|
|
36
58
|
const startedAtMicroseconds = dependencies.wallClock.currentMonotonicMicroseconds;
|
|
59
|
+
const readyAtMicroseconds = dependencies.wallClock.currentMonotonicMicroseconds;
|
|
60
|
+
state.timing?.record({
|
|
61
|
+
completedAtMicroseconds: readyAtMicroseconds,
|
|
62
|
+
kind: 'worker-pool.ready',
|
|
63
|
+
metadata: emptyWorkerPoolTimingMetadata,
|
|
64
|
+
startedAtMicroseconds: readyAtMicroseconds,
|
|
65
|
+
status: 'success'
|
|
66
|
+
});
|
|
67
|
+
return await finishExecution(runtime, resolvedRun, startedAtMilliseconds, startedAtMicroseconds);
|
|
68
|
+
}
|
|
69
|
+
async function executeWorkerPoolRunWithState(resolvedRun, dependencies, state) {
|
|
70
|
+
if (workerPoolPlacementPlan(resolvedRun).units.length === 0) {
|
|
71
|
+
return await createEmptyWorkerPoolResult(resolvedRun, dependencies, state.collectionRunState);
|
|
72
|
+
}
|
|
73
|
+
const runtime = await createRuntime(resolvedRun, dependencies, state);
|
|
37
74
|
try {
|
|
38
|
-
return await
|
|
75
|
+
return await finishExecutionWithRuntime(resolvedRun, dependencies, state, runtime);
|
|
39
76
|
}
|
|
40
77
|
finally {
|
|
41
|
-
await
|
|
78
|
+
await releaseTimedRuntimePool(runtime, state.timing);
|
|
42
79
|
}
|
|
43
80
|
}
|
|
44
81
|
export async function executeWorkerPoolRun(resolvedRun, dependencies, options) {
|
|
@@ -48,19 +85,37 @@ export async function executeWorkerPoolRun(resolvedRun, dependencies, options) {
|
|
|
48
85
|
createdPool: null
|
|
49
86
|
});
|
|
50
87
|
}
|
|
88
|
+
async function destroyCommandPool(pool, timing) {
|
|
89
|
+
if (pool !== null) {
|
|
90
|
+
await (timing?.measureAsync('worker-pool.shutdown', emptyWorkerPoolTimingMetadata, async function destroyTimedCollectionWorkerPool() {
|
|
91
|
+
await pool.destroy();
|
|
92
|
+
}) ?? pool.destroy());
|
|
93
|
+
}
|
|
94
|
+
}
|
|
51
95
|
export async function runWorkerPoolCommand(command, dependencies, createResolvedRun, options) {
|
|
52
96
|
const collectionRunState = createSupervisedRunState();
|
|
97
|
+
const timingOption = options.timing === null ? {} : { timing: options.timing };
|
|
98
|
+
const poolOptions = {
|
|
99
|
+
cwd: command.cwd,
|
|
100
|
+
hostProcess: command.hostProcess,
|
|
101
|
+
testFamily: command.testFamily,
|
|
102
|
+
...timingOption,
|
|
103
|
+
workerCount: 1,
|
|
104
|
+
workerLifecycle: command.workerLifecycle
|
|
105
|
+
};
|
|
53
106
|
const pool = command.hostProcess.kind === 'child'
|
|
54
|
-
?
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
testFamily: command.testFamily,
|
|
58
|
-
workerCount: dependencies.availableParallelism,
|
|
59
|
-
workerLifecycle: command.workerLifecycle
|
|
60
|
-
})
|
|
107
|
+
? options.timing?.measure('worker-pool.start', emptyWorkerPoolTimingMetadata, function createTimedHostedWorkerPool() {
|
|
108
|
+
return dependencies.createWorkerPool(poolOptions);
|
|
109
|
+
}) ?? dependencies.createWorkerPool(poolOptions)
|
|
61
110
|
: null;
|
|
62
111
|
try {
|
|
63
|
-
const collection = await collectInWorkerPool(
|
|
112
|
+
const collection = await collectInWorkerPool({
|
|
113
|
+
command,
|
|
114
|
+
createdPool: pool,
|
|
115
|
+
dependencies,
|
|
116
|
+
runState: collectionRunState,
|
|
117
|
+
timing: options.timing
|
|
118
|
+
});
|
|
64
119
|
return await executeWorkerPoolRunWithState(await createResolvedRun(collection), dependencies, {
|
|
65
120
|
...options,
|
|
66
121
|
collectionRunState,
|
|
@@ -68,7 +123,7 @@ export async function runWorkerPoolCommand(command, dependencies, createResolved
|
|
|
68
123
|
});
|
|
69
124
|
}
|
|
70
125
|
finally {
|
|
71
|
-
await pool
|
|
126
|
+
await destroyCommandPool(pool, options.timing);
|
|
72
127
|
}
|
|
73
128
|
}
|
|
74
129
|
//# sourceMappingURL=worker-pool-run.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-pool-run.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-run.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,wBAAwB,EAE3B,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACH,sBAAsB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,cAAc,EACd,yBAAyB,EAC5B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACH,2BAA2B,EAC3B,mBAAmB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,uBAAuB,EACvB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"worker-pool-run.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-run.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,wBAAwB,EAE3B,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACH,sBAAsB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,cAAc,EACd,yBAAyB,EAC5B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACH,2BAA2B,EAC3B,mBAAmB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,uBAAuB,EACvB,uBAAuB,EAG1B,MAAM,0BAA0B,CAAC;AAIlC,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;CACjB,CAAC,CAAC;AAcH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,OAA0B,EAC1B,YAAyC,EACzC,SAAsC,IAAI;IAE1C,OAAO,MAAM,mBAAmB,CAAC;QAC7B,OAAO;QACP,WAAW,EAAE,IAAI;QACjB,YAAY;QACZ,QAAQ,EAAE,wBAAwB,EAAE;QACpC,MAAM;KACT,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC7B,OAA6B;IAE7B,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC;IAEvC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,uBAAuB,CAClC,OAA6B,EAC7B,MAAmC;IAEnC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,CAAC,MAAM,EAAE,YAAY,CACvB,sBAAsB,EACtB,6BAA6B,EAC7B,KAAK,UAAU,6BAA6B;YACxC,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CACJ,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACJ,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAC1B,OAA6B,EAC7B,WAAwB,EACxB,qBAA6B,EAC7B,qBAA6B;IAE7B,MAAM,cAAc,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IACrD,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAEzC,OAAO,MAAM,mBAAmB,CAC5B,OAAO,EACP,MAAM,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC,EAClG,qBAAqB,CACxB,CAAC;AACN,CAAC;AAED,KAAK,UAAU,aAAa,CACxB,WAAwB,EACxB,YAAyC,EACzC,KAA+B;IAE/B,OAAO,MAAM,uBAAuB,CAAC;QACjC,sBAAsB,EAAE,WAAW,CAAC,sBAAsB;QAC1D,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY;QACZ,KAAK,CAAC,cAAc,CAAC,MAAiB;YAClC,OAAO,MAAM,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC;QACD,WAAW;QACX,QAAQ,EAAE,KAAK,CAAC,kBAAkB;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;KACvB,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,0BAA0B,CACrC,WAAwB,EACxB,YAAyC,EACzC,KAA+B,EAC/B,OAA6B;IAE7B,MAAM,qBAAqB,GAAG,YAAY,CAAC,SAAS,CAAC,wBAAwB,CAAC;IAC9E,MAAM,qBAAqB,GAAG,YAAY,CAAC,SAAS,CAAC,4BAA4B,CAAC;IAClF,MAAM,mBAAmB,GAAG,YAAY,CAAC,SAAS,CAAC,4BAA4B,CAAC;IAEhF,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;QACjB,uBAAuB,EAAE,mBAAmB;QAC5C,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,6BAA6B;QACvC,qBAAqB,EAAE,mBAAmB;QAC1C,MAAM,EAAE,SAAS;KACpB,CAAC,CAAC;IAEH,OAAO,MAAM,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;AACrG,CAAC;AAED,KAAK,UAAU,6BAA6B,CACxC,WAAwB,EACxB,YAAyC,EACzC,KAA+B;IAE/B,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,MAAM,2BAA2B,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IAEtE,IAAI,CAAC;QACD,OAAO,MAAM,0BAA0B,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACvF,CAAC;YAAS,CAAC;QACP,MAAM,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,WAAwB,EACxB,YAAyC,EACzC,OAAmC;IAEnC,OAAO,MAAM,6BAA6B,CAAC,WAAW,EAAE,YAAY,EAAE;QAClE,GAAG,OAAO;QACV,kBAAkB,EAAE,wBAAwB,EAAE;QAC9C,WAAW,EAAE,IAAI;KACpB,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC7B,IAA8B,EAC9B,MAAmC;IAEnC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,MAAM,EAAE,YAAY,CACvB,sBAAsB,EACtB,6BAA6B,EAC7B,KAAK,UAAU,gCAAgC;YAC3C,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC,CACJ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,OAA0B,EAC1B,YAAyC,EACzC,iBAAmF,EACnF,OAAmC;IAEnC,MAAM,kBAAkB,GAAG,wBAAwB,EAAE,CAAC;IACtD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IAC/E,MAAM,WAAW,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,GAAG,YAAY;QACf,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,OAAO,CAAC,eAAe;KAC3C,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,KAAK,OAAO;QAC7C,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CACrB,mBAAmB,EACnB,6BAA6B,EAC7B,SAAS,2BAA2B;YAChC,OAAO,YAAY,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACtD,CAAC,CACJ,IAAI,YAAY,CAAC,gBAAgB,CAAC,WAAW,CAAC;QAC/C,CAAC,CAAC,IAAI,CAAC;IAEX,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC;YACzC,OAAO;YACP,WAAW,EAAE,IAAI;YACjB,YAAY;YACZ,QAAQ,EAAE,kBAAkB;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB,CAAC,CAAC;QAEH,OAAO,MAAM,6BAA6B,CACtC,MAAM,iBAAiB,CAAC,UAAU,CAAC,EACnC,YAAY,EACZ;YACI,GAAG,OAAO;YACV,kBAAkB;YAClB,WAAW,EAAE,IAAI;SACpB,CACJ,CAAC;IACN,CAAC;YAAS,CAAC;QACP,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;AACL,CAAC"}
|
|
@@ -3,7 +3,9 @@ import { createStoredRunValue } from "./supervised-run-state.js";
|
|
|
3
3
|
import { loadTinypoolConstructor } from "./tinypool-node-compatibility.js";
|
|
4
4
|
import { runTask as workerPoolWorkerEntryPoint } from "./worker-pool-worker.js";
|
|
5
5
|
import { createRoutedPool } from "./worker-pool-routing.js";
|
|
6
|
+
import { emptyTimingSpanMetadata } from "./run-timing-collection.js";
|
|
6
7
|
const Tinypool = loadTinypoolConstructor();
|
|
8
|
+
const workerPoolRunResourceOwnerLane = 'run-resource-owner';
|
|
7
9
|
function workerPoolEntryPointHref(worker) {
|
|
8
10
|
const entryPointWorkerName = worker.name;
|
|
9
11
|
const workerPoolEntryPointUrl = new URL('./worker-pool-worker.ts', import.meta.url);
|
|
@@ -81,28 +83,94 @@ function placementLaneLifecycles(plan) {
|
|
|
81
83
|
});
|
|
82
84
|
return laneLifecycles;
|
|
83
85
|
}
|
|
84
|
-
function workerPoolOptions(
|
|
86
|
+
function workerPoolOptions(input) {
|
|
87
|
+
const timingOption = input.timing === null ? {} : { timing: input.timing };
|
|
85
88
|
return {
|
|
86
|
-
cwd: resolvedRun.cwd,
|
|
87
|
-
hostProcess: copiedHostProcess(execution),
|
|
88
|
-
testFamily: execution.testFamily,
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
cwd: input.resolvedRun.cwd,
|
|
90
|
+
hostProcess: copiedHostProcess(input.execution),
|
|
91
|
+
testFamily: input.execution.testFamily,
|
|
92
|
+
...timingOption,
|
|
93
|
+
workerCount: input.workerCount,
|
|
94
|
+
workerLifecycle: input.workerLifecycle
|
|
91
95
|
};
|
|
92
96
|
}
|
|
93
97
|
function createEmptyExecutionPool(input, execution) {
|
|
94
98
|
return {
|
|
95
99
|
destroyPool: input.createdPool === null,
|
|
96
|
-
pool: input.createdPool ?? input.
|
|
100
|
+
pool: input.createdPool ?? input.timing?.measure('worker-pool.start', emptyTimingSpanMetadata(), function createTimedEmptyWorkerPool() {
|
|
101
|
+
return input.dependencies.createWorkerPool(workerPoolOptions({
|
|
102
|
+
execution,
|
|
103
|
+
resolvedRun: input.resolvedRun,
|
|
104
|
+
timing: input.timing ?? null,
|
|
105
|
+
workerCount: 0,
|
|
106
|
+
workerLifecycle: execution.workerLifecycle
|
|
107
|
+
}));
|
|
108
|
+
}) ?? input.dependencies.createWorkerPool(workerPoolOptions({
|
|
109
|
+
execution,
|
|
110
|
+
resolvedRun: input.resolvedRun,
|
|
111
|
+
timing: input.timing ?? null,
|
|
112
|
+
workerCount: 0,
|
|
113
|
+
workerLifecycle: execution.workerLifecycle
|
|
114
|
+
}))
|
|
97
115
|
};
|
|
98
116
|
}
|
|
117
|
+
function createExecutionWorkerPool(input, execution, workerCount, workerLifecycle) {
|
|
118
|
+
const options = workerPoolOptions({
|
|
119
|
+
execution,
|
|
120
|
+
resolvedRun: input.resolvedRun,
|
|
121
|
+
timing: input.timing ?? null,
|
|
122
|
+
workerCount,
|
|
123
|
+
workerLifecycle
|
|
124
|
+
});
|
|
125
|
+
return input.timing?.measure('worker-pool.start', emptyTimingSpanMetadata(), function createTimedWorkerPool() {
|
|
126
|
+
return input.dependencies.createWorkerPool(options);
|
|
127
|
+
}) ?? input.dependencies.createWorkerPool(options);
|
|
128
|
+
}
|
|
129
|
+
export function workerPoolCollectedPlan(resolvedRun) {
|
|
130
|
+
if (resolvedRun.plan.kind !== 'worker-pool') {
|
|
131
|
+
throw new Error('Worker-pool execution requires a worker-pool collected plan.');
|
|
132
|
+
}
|
|
133
|
+
return resolvedRun.plan.collectedPlan;
|
|
134
|
+
}
|
|
135
|
+
export function collectedPlanNeedsRunResourceOwner(resolvedRun) {
|
|
136
|
+
return workerPoolCollectedPlan(resolvedRun).files.some(function fileHasRunResource(file) {
|
|
137
|
+
return file.cases.some(function caseHasRunResource(testCase) {
|
|
138
|
+
return testCase.resourceAttachments.resourceGraph.some(function isRunResource(resource) {
|
|
139
|
+
return resource.scope === 'per-run';
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
function runResourceOwnerRoutes(input, execution, needsRunResourceOwner) {
|
|
145
|
+
if (!needsRunResourceOwner) {
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
return [
|
|
149
|
+
{
|
|
150
|
+
lane: workerPoolRunResourceOwnerLane,
|
|
151
|
+
pool: createExecutionWorkerPool(input, execution, 1, 'reuse'),
|
|
152
|
+
workerLifecycle: 'reuse'
|
|
153
|
+
}
|
|
154
|
+
];
|
|
155
|
+
}
|
|
156
|
+
function shareableSingleLaneLifecycle(placementPlan, laneLifecycles, needsRunResourceOwner) {
|
|
157
|
+
const [lane] = placementPlan.lanes;
|
|
158
|
+
if (placementPlan.lanes.length !== 1 || lane === undefined) {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
const workerLifecycle = laneLifecycles.get(lane.id);
|
|
162
|
+
return workerLifecycle !== undefined && (!needsRunResourceOwner || workerLifecycle === 'reuse')
|
|
163
|
+
? workerLifecycle
|
|
164
|
+
: null;
|
|
165
|
+
}
|
|
99
166
|
function createLaneExecutionPool(input, execution, placementPlan) {
|
|
100
167
|
const laneLifecycles = placementLaneLifecycles(placementPlan);
|
|
101
|
-
const
|
|
102
|
-
|
|
168
|
+
const needsRunResourceOwner = collectedPlanNeedsRunResourceOwner(input.resolvedRun);
|
|
169
|
+
const singleLaneLifecycle = shareableSingleLaneLifecycle(placementPlan, laneLifecycles, needsRunResourceOwner);
|
|
170
|
+
if (singleLaneLifecycle !== null) {
|
|
103
171
|
return {
|
|
104
|
-
destroyPool:
|
|
105
|
-
pool: input.createdPool
|
|
172
|
+
destroyPool: input.createdPool === null,
|
|
173
|
+
pool: input.createdPool ?? createExecutionWorkerPool(input, execution, 1, singleLaneLifecycle)
|
|
106
174
|
};
|
|
107
175
|
}
|
|
108
176
|
const routes = placementPlan.lanes.map(function toRoute(lane) {
|
|
@@ -111,14 +179,15 @@ function createLaneExecutionPool(input, execution, placementPlan) {
|
|
|
111
179
|
throw new Error('Placement lane has no assigned worker lifecycle.');
|
|
112
180
|
}
|
|
113
181
|
return {
|
|
114
|
-
pool: input.dependencies.createWorkerPool(workerPoolOptions(input.resolvedRun, execution, 1, workerLifecycle)),
|
|
115
182
|
lane: lane.id,
|
|
183
|
+
pool: createExecutionWorkerPool(input, execution, 1, workerLifecycle),
|
|
116
184
|
workerLifecycle
|
|
117
185
|
};
|
|
118
186
|
});
|
|
187
|
+
const ownerRoutes = runResourceOwnerRoutes(input, execution, needsRunResourceOwner);
|
|
119
188
|
return {
|
|
120
189
|
destroyPool: true,
|
|
121
|
-
pool: createRoutedPool(routes)
|
|
190
|
+
pool: createRoutedPool([...routes, ...ownerRoutes])
|
|
122
191
|
};
|
|
123
192
|
}
|
|
124
193
|
function createExecutionPool(input, placementPlan) {
|
|
@@ -128,12 +197,6 @@ function createExecutionPool(input, placementPlan) {
|
|
|
128
197
|
}
|
|
129
198
|
return createLaneExecutionPool(input, execution, placementPlan);
|
|
130
199
|
}
|
|
131
|
-
export function workerPoolCollectedPlan(resolvedRun) {
|
|
132
|
-
if (resolvedRun.plan.kind !== 'worker-pool') {
|
|
133
|
-
throw new Error('Worker-pool execution requires a worker-pool collected plan.');
|
|
134
|
-
}
|
|
135
|
-
return resolvedRun.plan.collectedPlan;
|
|
136
|
-
}
|
|
137
200
|
function createPoolResourceUsageTracker(pool, resolvedRun, dependencies) {
|
|
138
201
|
if (!resolvedRun.facts.execution.resourceUsagePolicy.measure) {
|
|
139
202
|
return null;
|
|
@@ -188,7 +251,11 @@ export async function createWorkerPoolRuntime(input) {
|
|
|
188
251
|
resolvedRun,
|
|
189
252
|
runState,
|
|
190
253
|
taskResults,
|
|
191
|
-
terminalFailure: createStoredRunValue(false)
|
|
254
|
+
terminalFailure: createStoredRunValue(false),
|
|
255
|
+
timing: input.timing ?? null,
|
|
256
|
+
lifecycle: {
|
|
257
|
+
token: dependencies.createSeed().toString()
|
|
258
|
+
}
|
|
192
259
|
};
|
|
193
260
|
}
|
|
194
261
|
//# sourceMappingURL=worker-pool-runtime.js.map
|