@overkill-dev/run 0.0.42 → 0.0.44
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/assertion-protocol/source-location-forwarding.d.ts +4 -0
- package/assertion-protocol/source-location-forwarding.d.ts.map +1 -0
- package/engine/case-execution.d.ts +1 -0
- package/engine/case-execution.d.ts.map +1 -1
- package/engine/case-execution.js +112 -27
- package/engine/case-execution.js.map +1 -1
- package/engine/execution-async-leak-policy.d.ts.map +1 -1
- package/engine/execution-async-leak-policy.js +1 -0
- package/engine/execution-async-leak-policy.js.map +1 -1
- package/engine/execution-supervision.d.ts +1 -0
- package/engine/execution-supervision.d.ts.map +1 -1
- package/engine/execution-supervision.js +8 -1
- package/engine/execution-supervision.js.map +1 -1
- package/engine/execution.d.ts.map +1 -1
- package/engine/execution.js +37 -4
- package/engine/execution.js.map +1 -1
- package/engine/run-result.d.ts +11 -0
- package/engine/run-result.d.ts.map +1 -1
- package/engine/run-result.js +32 -0
- package/engine/run-result.js.map +1 -1
- package/engine/test-body-resource-attachment.d.ts.map +1 -1
- package/engine/test-body-resource-attachment.js +34 -0
- package/engine/test-body-resource-attachment.js.map +1 -1
- package/package.json +5 -3
- package/packages/engine/engine.entry-point.d.ts +54 -0
- package/packages/engine/engine.entry-point.d.ts.map +1 -0
- package/packages/engine/engine.entry-point.js +1 -0
- package/packages/engine/engine.entry-point.js.map +1 -1
- package/packages/run/command-line.entry-point.d.ts.map +1 -1
- package/packages/run/command-line.entry-point.js +3 -2
- package/packages/run/command-line.entry-point.js.map +1 -1
- package/packages/run/run.entry-point.d.ts +1 -1
- package/packages/run/run.entry-point.d.ts.map +1 -1
- package/readme.md +17 -8
- package/run/child-process-protocol.js +30 -0
- package/run/child-process-protocol.js.map +1 -0
- package/run/child-process-roles.js +13 -0
- package/run/child-process-roles.js.map +1 -0
- package/run/child-process.entry-point.js +15 -0
- package/run/child-process.entry-point.js.map +1 -0
- package/run/current-process-run-orchestrator.d.ts +1 -0
- package/run/current-process-run-orchestrator.d.ts.map +1 -1
- package/run/current-process-run-orchestrator.js +1 -0
- package/run/current-process-run-orchestrator.js.map +1 -1
- package/run/node-command-line-runner.d.ts +2 -0
- package/run/node-command-line-runner.d.ts.map +1 -1
- package/run/node-command-line-runner.js +2 -1
- package/run/node-command-line-runner.js.map +1 -1
- package/run/node-worker-pool-factory.js +13 -0
- package/run/node-worker-pool-factory.js.map +1 -0
- package/run/resource-usage.d.ts +3 -1
- package/run/resource-usage.d.ts.map +1 -1
- package/run/resource-usage.js +2 -2
- package/run/resource-usage.js.map +1 -1
- package/run/run-collected-resolution.js +7 -4
- package/run/run-collected-resolution.js.map +1 -1
- package/run/run-config-schema.d.ts +27 -195
- package/run/run-config-schema.d.ts.map +1 -1
- package/run/run-config-schema.js +27 -2
- package/run/run-config-schema.js.map +1 -1
- package/run/run-config.d.ts +29 -14
- package/run/run-config.d.ts.map +1 -1
- package/run/run-config.js +7 -10
- package/run/run-config.js.map +1 -1
- package/run/run-facts.js +2 -0
- package/run/run-facts.js.map +1 -1
- package/run/run-host-process.js +86 -0
- package/run/run-host-process.js.map +1 -0
- package/run/run-if-main.d.ts.map +1 -1
- package/run/run-if-main.js +2 -1
- package/run/run-if-main.js.map +1 -1
- package/run/run-input-resolution.js +0 -12
- package/run/run-input-resolution.js.map +1 -1
- package/run/run-isolated-command.js +7 -1
- package/run/run-isolated-command.js.map +1 -1
- package/run/run-local-resolution.js +3 -4
- package/run/run-local-resolution.js.map +1 -1
- package/run/run-orchestrator-dependencies.d.ts +19 -6
- package/run/run-orchestrator-dependencies.d.ts.map +1 -1
- package/run/run-orchestrator.d.ts +2 -1
- package/run/run-orchestrator.d.ts.map +1 -1
- package/run/run-orchestrator.entry-point.d.ts +1 -0
- package/run/run-orchestrator.entry-point.d.ts.map +1 -1
- package/run/run-orchestrator.entry-point.js +47 -40
- package/run/run-orchestrator.entry-point.js.map +1 -1
- package/run/run-orchestrator.js +5 -2
- package/run/run-orchestrator.js.map +1 -1
- package/run/run-selection.js +44 -0
- package/run/run-selection.js.map +1 -1
- package/run/run-support.js +15 -1
- package/run/run-support.js.map +1 -1
- package/run/run-types.d.ts +36 -1
- package/run/run-types.d.ts.map +1 -1
- package/run/run-types.js.map +1 -1
- package/run/run-validation.js +4 -0
- package/run/run-validation.js.map +1 -1
- package/run/supervised-child-process.d.ts +3 -3
- package/run/supervised-child-process.d.ts.map +1 -1
- package/run/supervised-child-process.js +4 -4
- package/run/supervised-child-process.js.map +1 -1
- package/run/supervised-child.entry-point.js +14 -7
- package/run/supervised-child.entry-point.js.map +1 -1
- package/run/supervised-protocol.js +9 -0
- package/run/supervised-protocol.js.map +1 -0
- package/run/supervised-run-runtime.js +8 -4
- package/run/supervised-run-runtime.js.map +1 -1
- package/run/supervised-run.js +17 -6
- package/run/supervised-run.js.map +1 -1
- package/run/tinypool-node-compatibility.js.map +1 -1
- package/run/work-distribution-config.js +42 -12
- package/run/work-distribution-config.js.map +1 -1
- package/run/work-unit-planning.js +184 -67
- package/run/work-unit-planning.js.map +1 -1
- package/run/worker-pool-collection.js +18 -6
- package/run/worker-pool-collection.js.map +1 -1
- package/run/worker-pool-execution.js +13 -4
- package/run/worker-pool-execution.js.map +1 -1
- package/run/worker-pool-host-process.js +328 -0
- package/run/worker-pool-host-process.js.map +1 -0
- package/run/worker-pool-host-protocol.js +50 -0
- package/run/worker-pool-host-protocol.js.map +1 -0
- package/run/worker-pool-host.entry-point.js +164 -0
- package/run/worker-pool-host.entry-point.js.map +1 -0
- package/run/worker-pool-lanes.js +132 -0
- package/run/worker-pool-lanes.js.map +1 -0
- package/run/worker-pool-run.js +36 -9
- package/run/worker-pool-run.js.map +1 -1
- package/run/worker-pool-runtime.js +273 -19
- package/run/worker-pool-runtime.js.map +1 -1
- package/run/worker-pool-worker-plan.js +7 -4
- package/run/worker-pool-worker-plan.js.map +1 -1
- package/sbom.cdx.json +4 -4
- package/run/supervised-child-process.entry-point.js +0 -6
- package/run/supervised-child-process.entry-point.js.map +0 -1
- package/run/supervised-protocol.d.ts +0 -49
- package/run/supervised-protocol.d.ts.map +0 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { MessageChannel as NodeMessageChannel } from 'node:worker_threads';
|
|
2
|
+
import { createWallClock } from '@enormora/wall-clock';
|
|
3
|
+
import { childProcessEnvelope, envelopeMessage } from "./child-process-protocol.js";
|
|
4
|
+
import { createNodeResourceUsageTracker } from "./resource-usage.js";
|
|
5
|
+
import { createTinypoolWorkerPool, workerPoolEntryPoint } from "./worker-pool-runtime.js";
|
|
6
|
+
import { serializeError, serializeWorkerPoolMessage, workerPoolHostCorrelationId } from "./worker-pool-host-protocol.js";
|
|
7
|
+
const sendMessage = process.send?.bind(process);
|
|
8
|
+
function createStoredValue(initialValue) {
|
|
9
|
+
let currentValue = initialValue;
|
|
10
|
+
return {
|
|
11
|
+
read() {
|
|
12
|
+
return currentValue;
|
|
13
|
+
},
|
|
14
|
+
write(value) {
|
|
15
|
+
currentValue = value;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function createActiveHostTasks() {
|
|
20
|
+
const tasks = new Map();
|
|
21
|
+
return {
|
|
22
|
+
delete(taskId) {
|
|
23
|
+
return tasks.delete(taskId);
|
|
24
|
+
},
|
|
25
|
+
get(taskId) {
|
|
26
|
+
return tasks.get(taskId);
|
|
27
|
+
},
|
|
28
|
+
set(taskId, task) {
|
|
29
|
+
tasks.set(taskId, task);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const state = {
|
|
34
|
+
activeTasks: createActiveHostTasks(),
|
|
35
|
+
commandHandling: createStoredValue(null),
|
|
36
|
+
pool: createStoredValue(null),
|
|
37
|
+
resourceUsageTracker: createStoredValue(null)
|
|
38
|
+
};
|
|
39
|
+
function send(message) {
|
|
40
|
+
sendMessage?.(childProcessEnvelope(workerPoolHostCorrelationId, message));
|
|
41
|
+
}
|
|
42
|
+
function portTransferList(port) {
|
|
43
|
+
return [port];
|
|
44
|
+
}
|
|
45
|
+
function configuredPool(hostState) {
|
|
46
|
+
const pool = hostState.pool.read();
|
|
47
|
+
if (pool === null) {
|
|
48
|
+
throw new Error('Hosted worker pool was not configured.');
|
|
49
|
+
}
|
|
50
|
+
return pool;
|
|
51
|
+
}
|
|
52
|
+
function configure(command) {
|
|
53
|
+
state.pool.write(createTinypoolWorkerPool({
|
|
54
|
+
...command.options,
|
|
55
|
+
filename: workerPoolEntryPoint
|
|
56
|
+
}));
|
|
57
|
+
send({ kind: 'configured' });
|
|
58
|
+
}
|
|
59
|
+
function forwardTaskMessage(taskId, message) {
|
|
60
|
+
send({
|
|
61
|
+
kind: 'task-message',
|
|
62
|
+
message: serializeWorkerPoolMessage(message),
|
|
63
|
+
taskId
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function taskWithHostPort(command) {
|
|
67
|
+
const { port1, port2 } = new NodeMessageChannel();
|
|
68
|
+
const controller = new AbortController();
|
|
69
|
+
state.activeTasks.set(command.taskId, { controller, port: port2 });
|
|
70
|
+
port2.on('message', function receiveTaskMessage(message) {
|
|
71
|
+
forwardTaskMessage(command.taskId, message);
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
controller,
|
|
75
|
+
port1,
|
|
76
|
+
task: {
|
|
77
|
+
...command.task,
|
|
78
|
+
port: port1
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async function runTask(command) {
|
|
83
|
+
const task = taskWithHostPort(command);
|
|
84
|
+
try {
|
|
85
|
+
send({
|
|
86
|
+
kind: 'task-result',
|
|
87
|
+
result: await configuredPool(state).run(task.task, {
|
|
88
|
+
name: 'runTask',
|
|
89
|
+
signal: task.controller.signal,
|
|
90
|
+
transferList: portTransferList(task.port1)
|
|
91
|
+
}),
|
|
92
|
+
taskId: command.taskId
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
send({
|
|
97
|
+
error: serializeError(error),
|
|
98
|
+
kind: 'task-error',
|
|
99
|
+
taskId: command.taskId
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
task.port1.close();
|
|
104
|
+
state.activeTasks.get(command.taskId)?.port.close();
|
|
105
|
+
state.activeTasks.delete(command.taskId);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function abortTask(command) {
|
|
109
|
+
state.activeTasks.get(command.taskId)?.controller.abort();
|
|
110
|
+
}
|
|
111
|
+
function startResourceTracking(command) {
|
|
112
|
+
state.resourceUsageTracker.write(createNodeResourceUsageTracker(createWallClock(), {
|
|
113
|
+
samplingIntervalMilliseconds: command.samplingIntervalMilliseconds
|
|
114
|
+
}));
|
|
115
|
+
state.resourceUsageTracker.read()?.start(function sendSample(sample) {
|
|
116
|
+
send({ kind: 'resource-sample', sample });
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function finishResourceTracking() {
|
|
120
|
+
const resourceUsageTracker = state.resourceUsageTracker.read();
|
|
121
|
+
if (resourceUsageTracker === null) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
send({
|
|
125
|
+
kind: 'resource-usage',
|
|
126
|
+
resourceUsage: resourceUsageTracker.finish()
|
|
127
|
+
});
|
|
128
|
+
state.resourceUsageTracker.write(null);
|
|
129
|
+
}
|
|
130
|
+
async function destroy() {
|
|
131
|
+
const poolToDestroy = state.pool.read();
|
|
132
|
+
state.pool.write(null);
|
|
133
|
+
finishResourceTracking();
|
|
134
|
+
await poolToDestroy?.destroy();
|
|
135
|
+
send({ kind: 'destroyed' });
|
|
136
|
+
process.disconnect?.();
|
|
137
|
+
}
|
|
138
|
+
function handleCommand(command) {
|
|
139
|
+
if (command.kind === 'configure') {
|
|
140
|
+
configure(command);
|
|
141
|
+
}
|
|
142
|
+
else if (command.kind === 'run-task') {
|
|
143
|
+
state.commandHandling.write(runTask(command));
|
|
144
|
+
}
|
|
145
|
+
else if (command.kind === 'abort-task') {
|
|
146
|
+
abortTask(command);
|
|
147
|
+
}
|
|
148
|
+
else if (command.kind === 'start-resource-tracking') {
|
|
149
|
+
startResourceTracking(command);
|
|
150
|
+
}
|
|
151
|
+
else if (command.kind === 'finish-resource-tracking') {
|
|
152
|
+
finishResourceTracking();
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
state.commandHandling.write(destroy());
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
process.on('message', function receiveHostCommand(message) {
|
|
159
|
+
const command = envelopeMessage(message, workerPoolHostCorrelationId);
|
|
160
|
+
if (command !== null) {
|
|
161
|
+
handleCommand(command);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
//# sourceMappingURL=worker-pool-host.entry-point.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-pool-host.entry-point.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-host.entry-point.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { invalidRequest } from "./run-errors.js";
|
|
2
|
+
const maximumWorkerCount = 8;
|
|
3
|
+
const mixedLifecycleCount = 2;
|
|
4
|
+
const freshWorkerLifecycle = 'fresh-worker-per-unit';
|
|
5
|
+
const reuseWorkerLifecycle = 'reuse';
|
|
6
|
+
const workerLifecycles = [reuseWorkerLifecycle, freshWorkerLifecycle];
|
|
7
|
+
function defaultWorkerCount(availableParallelism, unitCount) {
|
|
8
|
+
if (!Number.isSafeInteger(availableParallelism) || availableParallelism <= 0) {
|
|
9
|
+
invalidRequest('Available parallelism must be a positive safe integer.');
|
|
10
|
+
}
|
|
11
|
+
if (unitCount === 0) {
|
|
12
|
+
return 0;
|
|
13
|
+
}
|
|
14
|
+
return Math.min(Math.max(availableParallelism - 1, 1), maximumWorkerCount, unitCount);
|
|
15
|
+
}
|
|
16
|
+
function lifecycleCount(units, workerLifecycle) {
|
|
17
|
+
return units
|
|
18
|
+
.filter(function hasWorkerLifecycle(unit) {
|
|
19
|
+
return unit.workerLifecycle === workerLifecycle;
|
|
20
|
+
})
|
|
21
|
+
.length;
|
|
22
|
+
}
|
|
23
|
+
function hasMixedLifecycles(units) {
|
|
24
|
+
return lifecycleCount(units, freshWorkerLifecycle) > 0 &&
|
|
25
|
+
lifecycleCount(units, reuseWorkerLifecycle) > 0;
|
|
26
|
+
}
|
|
27
|
+
function firstUnitWorkerLifecycle(units) {
|
|
28
|
+
return units.reduce(function keepFirstLifecycle(firstLifecycle, unit, index) {
|
|
29
|
+
return index === 0 ? unit.workerLifecycle : firstLifecycle;
|
|
30
|
+
}, reuseWorkerLifecycle);
|
|
31
|
+
}
|
|
32
|
+
function workerCount(input) {
|
|
33
|
+
const baseWorkerCount = defaultWorkerCount(input.availableParallelism, input.units.length);
|
|
34
|
+
return hasMixedLifecycles(input.units)
|
|
35
|
+
? Math.max(baseWorkerCount, mixedLifecycleCount)
|
|
36
|
+
: baseWorkerCount;
|
|
37
|
+
}
|
|
38
|
+
function placementLane(index) {
|
|
39
|
+
const id = `worker-${index + 1}`;
|
|
40
|
+
return {
|
|
41
|
+
executor: {
|
|
42
|
+
capabilities: [],
|
|
43
|
+
capacity: 1,
|
|
44
|
+
id,
|
|
45
|
+
kind: 'local-worker'
|
|
46
|
+
},
|
|
47
|
+
id
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function workerPoolLanes(input) {
|
|
51
|
+
return Array.from({ length: workerCount(input) }, function toLane(_value, index) {
|
|
52
|
+
return placementLane(index);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function proportionalExtraLaneLifecycle(units, remainingLanes, tiedLifecycle) {
|
|
56
|
+
const freshUnits = lifecycleCount(units, freshWorkerLifecycle);
|
|
57
|
+
const reuseUnits = lifecycleCount(units, reuseWorkerLifecycle);
|
|
58
|
+
const totalUnits = freshUnits + reuseUnits;
|
|
59
|
+
const freshRemainder = remainingLanes * freshUnits / totalUnits % 1;
|
|
60
|
+
const reuseRemainder = remainingLanes * reuseUnits / totalUnits % 1;
|
|
61
|
+
if (freshRemainder !== reuseRemainder) {
|
|
62
|
+
return freshRemainder > reuseRemainder ? freshWorkerLifecycle : reuseWorkerLifecycle;
|
|
63
|
+
}
|
|
64
|
+
return tiedLifecycle;
|
|
65
|
+
}
|
|
66
|
+
function mixedLifecycleBaseLaneCounts(units, totalLaneCount) {
|
|
67
|
+
const freshUnits = lifecycleCount(units, freshWorkerLifecycle);
|
|
68
|
+
const reuseUnits = lifecycleCount(units, reuseWorkerLifecycle);
|
|
69
|
+
const remainingLanes = totalLaneCount - mixedLifecycleCount;
|
|
70
|
+
const unitCount = freshUnits + reuseUnits;
|
|
71
|
+
return {
|
|
72
|
+
freshLanes: 1 + Math.floor(remainingLanes * freshUnits / unitCount),
|
|
73
|
+
remainingLanes,
|
|
74
|
+
reuseLanes: 1 + Math.floor(remainingLanes * reuseUnits / unitCount)
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function mixedLifecycleLaneCounts(units, totalLaneCount) {
|
|
78
|
+
let { freshLanes, remainingLanes, reuseLanes } = mixedLifecycleBaseLaneCounts(units, totalLaneCount);
|
|
79
|
+
if (freshLanes + reuseLanes < totalLaneCount) {
|
|
80
|
+
const targetLifecycle = proportionalExtraLaneLifecycle(units, remainingLanes, firstUnitWorkerLifecycle(units));
|
|
81
|
+
if (targetLifecycle === freshWorkerLifecycle) {
|
|
82
|
+
freshLanes += 1;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
reuseLanes += 1;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return new Map([
|
|
89
|
+
[freshWorkerLifecycle, freshLanes],
|
|
90
|
+
[reuseWorkerLifecycle, reuseLanes]
|
|
91
|
+
]);
|
|
92
|
+
}
|
|
93
|
+
function lifecycleLaneCounts(units, totalLaneCount) {
|
|
94
|
+
if (lifecycleCount(units, freshWorkerLifecycle) === 0) {
|
|
95
|
+
return new Map([[reuseWorkerLifecycle, totalLaneCount]]);
|
|
96
|
+
}
|
|
97
|
+
if (lifecycleCount(units, reuseWorkerLifecycle) === 0) {
|
|
98
|
+
return new Map([[freshWorkerLifecycle, totalLaneCount]]);
|
|
99
|
+
}
|
|
100
|
+
return mixedLifecycleLaneCounts(units, totalLaneCount);
|
|
101
|
+
}
|
|
102
|
+
function lanesByLifecycle(lanes, units) {
|
|
103
|
+
const counts = lifecycleLaneCounts(units, lanes.length);
|
|
104
|
+
let nextLaneIndex = 0;
|
|
105
|
+
return new Map(workerLifecycles.map(function toLifecycleLanes(workerLifecycle) {
|
|
106
|
+
const laneCount = counts.get(workerLifecycle) ?? 0;
|
|
107
|
+
const lifecycleLanes = lanes.slice(nextLaneIndex, nextLaneIndex + laneCount);
|
|
108
|
+
nextLaneIndex += laneCount;
|
|
109
|
+
return [workerLifecycle, lifecycleLanes];
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
function assignedLane(lanes, unitIndex) {
|
|
113
|
+
const lane = lanes[unitIndex % lanes.length];
|
|
114
|
+
if (lane === undefined) {
|
|
115
|
+
throw new Error('Worker-pool placement requires at least one lane.');
|
|
116
|
+
}
|
|
117
|
+
return lane;
|
|
118
|
+
}
|
|
119
|
+
export function workerPoolPlacementAssignments(units, lanes) {
|
|
120
|
+
const lifecycleLanes = lanesByLifecycle(lanes, units);
|
|
121
|
+
const lifecycleIndexes = new Map();
|
|
122
|
+
return units.map(function toAssignment(unit) {
|
|
123
|
+
const lanesForUnit = lifecycleLanes.get(unit.workerLifecycle) ?? [];
|
|
124
|
+
const nextIndex = lifecycleIndexes.get(unit.workerLifecycle) ?? 0;
|
|
125
|
+
lifecycleIndexes.set(unit.workerLifecycle, nextIndex + 1);
|
|
126
|
+
return {
|
|
127
|
+
lane: assignedLane(lanesForUnit, nextIndex).id,
|
|
128
|
+
unit: unit.id
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=worker-pool-lanes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-pool-lanes.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-lanes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAQjD,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AACrD,MAAM,oBAAoB,GAAG,OAAO,CAAC;AACrC,MAAM,gBAAgB,GAAkC,CAAE,oBAAoB,EAAE,oBAAoB,CAAE,CAAC;AAavG,SAAS,kBAAkB,CAAC,oBAA4B,EAAE,SAAiB;IACvE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,oBAAoB,CAAC,IAAI,oBAAoB,IAAI,CAAC,EAAE,CAAC;QAC3E,cAAc,CAAC,wDAAwD,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QAClB,OAAO,CAAC,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,cAAc,CAAC,KAA0B,EAAE,eAAmC;IACnF,OAAO,KAAK;SACP,MAAM,CAAC,SAAS,kBAAkB,CAAC,IAAI;QACpC,OAAO,IAAI,CAAC,eAAe,KAAK,eAAe,CAAC;IACpD,CAAC,CAAC;SACD,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA0B;IAClD,OAAO,cAAc,CAAC,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC;QAClD,cAAc,CAAC,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,wBAAwB,CAAC,KAA0B;IACxD,OAAO,KAAK,CAAC,MAAM,CAAqB,SAAS,kBAAkB,CAAC,cAAc,EAAE,IAAI,EAAE,KAAK;QAC3F,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;IAC/D,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,KAA0B;IAC3C,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3F,OAAO,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC;QAClC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,mBAAmB,CAAC;QAChD,CAAC,CAAC,eAAe,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAChC,MAAM,EAAE,GAAG,UAAU,KAAK,GAAG,CAAC,EAAE,CAAC;IAEjC,OAAO;QACH,QAAQ,EAAE;YACN,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,CAAC;YACX,EAAE;YACF,IAAI,EAAE,cAAc;SACvB;QACD,EAAE;KACL,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAA0B;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK;QAC3E,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,8BAA8B,CACnC,KAA0B,EAC1B,cAAsB,EACtB,aAAiC;IAEjC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IAC3C,MAAM,cAAc,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;IAEpE,IAAI,cAAc,KAAK,cAAc,EAAE,CAAC;QACpC,OAAO,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC;IACzF,CAAC;IAED,OAAO,aAAa,CAAC;AACzB,CAAC;AAED,SAAS,4BAA4B,CACjC,KAA0B,EAC1B,cAAsB;IAEtB,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,cAAc,GAAG,mBAAmB,CAAC;IAC5D,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAE1C,OAAO;QACH,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,UAAU,GAAG,SAAS,CAAC;QACnE,cAAc;QACd,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,UAAU,GAAG,SAAS,CAAC;KACtE,CAAC;AACN,CAAC;AAED,SAAS,wBAAwB,CAC7B,KAA0B,EAC1B,cAAsB;IAEtB,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,4BAA4B,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAErG,IAAI,UAAU,GAAG,UAAU,GAAG,cAAc,EAAE,CAAC;QAC3C,MAAM,eAAe,GAAG,8BAA8B,CAAC,KAAK,EAAE,cAAc,EAAE,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;QAE/G,IAAI,eAAe,KAAK,oBAAoB,EAAE,CAAC;YAC3C,UAAU,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACJ,UAAU,IAAI,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,GAAG,CAAC;QACX,CAAE,oBAAoB,EAAE,UAAU,CAAE;QACpC,CAAE,oBAAoB,EAAE,UAAU,CAAE;KACvC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,mBAAmB,CACxB,KAA0B,EAC1B,cAAsB;IAEtB,IAAI,cAAc,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,GAAG,CAAC,CAAE,CAAE,oBAAoB,EAAE,cAAc,CAAE,CAAE,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,GAAG,CAAC,CAAE,CAAE,oBAAoB,EAAE,cAAc,CAAE,CAAE,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,wBAAwB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gBAAgB,CACrB,KAA+B,EAC/B,KAA0B;IAE1B,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,OAAO,IAAI,GAAG,CACV,gBAAgB,CAAC,GAAG,CAAC,SAAS,gBAAgB,CAAC,eAAe;QAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC,CAAC;QAE7E,aAAa,IAAI,SAAS,CAAC;QAE3B,OAAO,CAAE,eAAe,EAAE,cAAc,CAAE,CAAC;IAC/C,CAAC,CAAC,CACL,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CAAC,KAA+B,EAAE,SAAiB;IACpE,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAE7C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC1C,KAA0B,EAC1B,KAA+B;IAE/B,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA8B,CAAC;IAE/D,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,YAAY,CAAC,IAAI;QACvC,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACpE,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAElE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;QAE1D,OAAO;YACH,IAAI,EAAE,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,EAAE;YAC9C,IAAI,EAAE,IAAI,CAAC,EAAE;SAChB,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/run/worker-pool-run.js
CHANGED
|
@@ -6,20 +6,34 @@ import { createWorkerPoolRuntime, workerPoolPlacementPlan } from "./worker-pool-
|
|
|
6
6
|
export async function collectWorkerPoolRun(command, dependencies) {
|
|
7
7
|
return await collectInWorkerPool(command, dependencies, createSupervisedRunState());
|
|
8
8
|
}
|
|
9
|
-
async function
|
|
9
|
+
async function releaseRuntimePool(runtime) {
|
|
10
|
+
runtime.pool.setHostOutputSink?.(null);
|
|
11
|
+
if (runtime.destroyPool) {
|
|
12
|
+
await runtime.pool.destroy();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async function finishExecution(runtime, resolvedRun, startedAtMilliseconds) {
|
|
16
|
+
await reportRunStart(runtime, startedAtMilliseconds);
|
|
17
|
+
await startPoolResourceTracking(runtime);
|
|
18
|
+
return await finishWorkerPoolRun(runtime, await executeWorkerPoolUnits(runtime, workerPoolPlacementPlan(resolvedRun), startedAtMilliseconds), startedAtMilliseconds);
|
|
19
|
+
}
|
|
20
|
+
async function executeWorkerPoolRunWithState(resolvedRun, dependencies, collectionRunState, createdPool = null) {
|
|
10
21
|
if (workerPoolPlacementPlan(resolvedRun).units.length === 0) {
|
|
11
22
|
return await createEmptyWorkerPoolResult(resolvedRun, dependencies, collectionRunState);
|
|
12
23
|
}
|
|
13
|
-
const runtime = await createWorkerPoolRuntime(
|
|
24
|
+
const runtime = await createWorkerPoolRuntime({
|
|
25
|
+
collectionRunnerErrors: resolvedRun.collectionRunnerErrors,
|
|
26
|
+
createdPool,
|
|
27
|
+
dependencies,
|
|
28
|
+
resolvedRun,
|
|
29
|
+
runState: collectionRunState
|
|
30
|
+
});
|
|
14
31
|
const startedAtMilliseconds = dependencies.wallClock.currentTimestampInMilliseconds;
|
|
15
32
|
try {
|
|
16
|
-
await
|
|
17
|
-
startPoolResourceTracking(runtime);
|
|
18
|
-
const completedTaskRuns = await executeWorkerPoolUnits(runtime, workerPoolPlacementPlan(resolvedRun), startedAtMilliseconds);
|
|
19
|
-
return await finishWorkerPoolRun(runtime, completedTaskRuns, startedAtMilliseconds);
|
|
33
|
+
return await finishExecution(runtime, resolvedRun, startedAtMilliseconds);
|
|
20
34
|
}
|
|
21
35
|
finally {
|
|
22
|
-
await runtime
|
|
36
|
+
await releaseRuntimePool(runtime);
|
|
23
37
|
}
|
|
24
38
|
}
|
|
25
39
|
export async function executeWorkerPoolRun(resolvedRun, dependencies) {
|
|
@@ -27,7 +41,20 @@ export async function executeWorkerPoolRun(resolvedRun, dependencies) {
|
|
|
27
41
|
}
|
|
28
42
|
export async function runWorkerPoolCommand(command, dependencies, createResolvedRun) {
|
|
29
43
|
const collectionRunState = createSupervisedRunState();
|
|
30
|
-
const
|
|
31
|
-
|
|
44
|
+
const pool = command.hostProcess.kind === 'child'
|
|
45
|
+
? dependencies.createWorkerPool({
|
|
46
|
+
cwd: command.cwd,
|
|
47
|
+
hostProcess: command.hostProcess,
|
|
48
|
+
workerCount: dependencies.availableParallelism,
|
|
49
|
+
workerLifecycle: command.workerLifecycle
|
|
50
|
+
})
|
|
51
|
+
: null;
|
|
52
|
+
try {
|
|
53
|
+
const collection = await collectInWorkerPool(command, dependencies, collectionRunState, pool);
|
|
54
|
+
return await executeWorkerPoolRunWithState(createResolvedRun(collection), dependencies, collectionRunState, pool);
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
await pool?.destroy();
|
|
58
|
+
}
|
|
32
59
|
}
|
|
33
60
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"worker-pool-run.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-run.ts"],"names":[],"mappings":"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"}
|