@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
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { isResourceStartupTimeoutError } from "./resource-lifecycle-startup-budget.js";
|
|
2
|
+
function timingKind(phase) {
|
|
3
|
+
return phase === 'acquire' ? 'resource.acquire' : 'resource.dispose';
|
|
4
|
+
}
|
|
5
|
+
function failedTimingStatus(error, operation) {
|
|
6
|
+
if (isResourceStartupTimeoutError(error)) {
|
|
7
|
+
return 'timeout';
|
|
8
|
+
}
|
|
9
|
+
return operation.signal.aborted ? 'cancelled' : 'failure';
|
|
10
|
+
}
|
|
11
|
+
function nonNegativeMicroseconds(value) {
|
|
12
|
+
return Math.max(0, Math.trunc(value));
|
|
13
|
+
}
|
|
14
|
+
function writeResourceTiming(options, completed) {
|
|
15
|
+
const metadata = {
|
|
16
|
+
label: null,
|
|
17
|
+
processId: options.processId,
|
|
18
|
+
resource: completed.operation.resource,
|
|
19
|
+
workerId: options.workerId
|
|
20
|
+
};
|
|
21
|
+
if (options.target.kind === 'parent') {
|
|
22
|
+
options.target.record({
|
|
23
|
+
completedAtMicroseconds: completed.completedAtMicroseconds,
|
|
24
|
+
kind: timingKind(completed.operation.phase),
|
|
25
|
+
metadata,
|
|
26
|
+
startedAtMicroseconds: completed.startedAtMicroseconds,
|
|
27
|
+
status: completed.status
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
options.target.emit({
|
|
32
|
+
durationMicroseconds: nonNegativeMicroseconds(completed.completedAtMicroseconds - completed.startedAtMicroseconds),
|
|
33
|
+
kind: timingKind(completed.operation.phase),
|
|
34
|
+
...metadata,
|
|
35
|
+
startOffsetMicroseconds: null,
|
|
36
|
+
status: completed.status
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function recordResourceTiming(options, completed) {
|
|
41
|
+
try {
|
|
42
|
+
writeResourceTiming(options, completed);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function currentTime(clock) {
|
|
48
|
+
try {
|
|
49
|
+
return clock.currentMonotonicMicroseconds;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function finishResourceTiming(options, operation, startedAtMicroseconds, status) {
|
|
56
|
+
const completedAtMicroseconds = currentTime(options.clock);
|
|
57
|
+
if (startedAtMicroseconds !== null && completedAtMicroseconds !== null) {
|
|
58
|
+
recordResourceTiming(options, {
|
|
59
|
+
completedAtMicroseconds,
|
|
60
|
+
operation,
|
|
61
|
+
startedAtMicroseconds,
|
|
62
|
+
status
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async function measureResourceLifecycle(options, operation, work) {
|
|
67
|
+
const startedAtMicroseconds = currentTime(options.clock);
|
|
68
|
+
try {
|
|
69
|
+
const value = await work();
|
|
70
|
+
finishResourceTiming(options, operation, startedAtMicroseconds, 'success');
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
finishResourceTiming(options, operation, startedAtMicroseconds, failedTimingStatus(error, operation));
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export function createResourceLifecycleTiming(options) {
|
|
79
|
+
return {
|
|
80
|
+
async measure(operation, work) {
|
|
81
|
+
return await measureResourceLifecycle(options, operation, work);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=resource-lifecycle-timing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-lifecycle-timing.js","sourceRoot":"","sources":["../../../../source/run/resource-lifecycle-timing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,74 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { combinedResourceEntries, composedResourceSession, directResourceEntries, resourceMapFromEntries, stepRuntimeGraphs } from "./resource-lifecycle-composition.js";
|
|
1
|
+
import { assertResourceDependencyScopes, callableResourceDefinition, createResourceGraph } from "../resources/resource-graph.js";
|
|
2
|
+
import { combinedResourceEntries, composedResourceSession, directResourceEntries, lifecycleScenarioBindings, resourceMapFromEntries, stepRuntimeGraphs } from "./resource-lifecycle-composition.js";
|
|
4
3
|
import { currentLifecycleCase, runWithLifecycleCase, runWithManagedLifecycle } from "./resource-lifecycle-state.js";
|
|
5
4
|
import { resourceWrapperErrorFromUnknown, resourceWrapperLifecycleError } from "./resource-lifecycle-error.js";
|
|
6
5
|
import { managedResourceSession } from "./resource-lifecycle-managed-session.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
'per-file',
|
|
10
|
-
'per-run',
|
|
11
|
-
'per-suite',
|
|
12
|
-
'shared-per-worker'
|
|
13
|
-
]);
|
|
14
|
-
function isResourceScope(scope) {
|
|
15
|
-
return resourceScopes.has(scope);
|
|
16
|
-
}
|
|
17
|
-
function isProjectionScalar(value) {
|
|
18
|
-
return value === null ||
|
|
19
|
-
typeof value === 'string' ||
|
|
20
|
-
typeof value === 'boolean' ||
|
|
21
|
-
typeof value === 'number' && Number.isFinite(value);
|
|
22
|
-
}
|
|
23
|
-
function isProjectionObject(value) {
|
|
24
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
25
|
-
}
|
|
26
|
-
function isProjectionPayload(value) {
|
|
27
|
-
if (isProjectionScalar(value)) {
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
if (Array.isArray(value)) {
|
|
31
|
-
return value.every(isProjectionPayload);
|
|
32
|
-
}
|
|
33
|
-
return isProjectionObject(value) &&
|
|
34
|
-
Object.values(value).every(isProjectionPayload);
|
|
35
|
-
}
|
|
36
|
-
function resourceHasProjection(resource) {
|
|
37
|
-
return typeof resource.serializeHandle === 'function' &&
|
|
38
|
-
typeof resource.deserializeHandle === 'function';
|
|
39
|
-
}
|
|
40
|
-
function projectedHandle(resource, ownerHandle, dependencyContext) {
|
|
41
|
-
if (!resourceHasProjection(resource)) {
|
|
42
|
-
return ownerHandle;
|
|
43
|
-
}
|
|
44
|
-
const context = { dependencies: dependencyContext };
|
|
45
|
-
const payload = resource.serializeHandle(ownerHandle, context);
|
|
46
|
-
if (!isProjectionPayload(payload)) {
|
|
47
|
-
throw resourceWrapperLifecycleError(`Resource "${resource.name}" returned a non-JSON projection payload.`, payload);
|
|
48
|
-
}
|
|
49
|
-
return resource.deserializeHandle(payload, context);
|
|
50
|
-
}
|
|
51
|
-
function suiteBoundary(testCase) {
|
|
52
|
-
return JSON.stringify(testCase.id.suite);
|
|
53
|
-
}
|
|
54
|
-
function resourceBoundaryForCase(resourceName, scope, testCase) {
|
|
55
|
-
return scope === 'shared-per-worker'
|
|
56
|
-
? { key: `worker:${resourceName}`, scope }
|
|
57
|
-
: { key: `case:${workIdentityKey(testCase.workId)}:${resourceName}`, scope };
|
|
58
|
-
}
|
|
59
|
-
function resourceBoundary(resourceName, scope, testCase) {
|
|
60
|
-
const file = testCase.id.file ?? '<no-file>';
|
|
61
|
-
if (scope === 'per-run') {
|
|
62
|
-
return { key: `run:${resourceName}`, scope };
|
|
63
|
-
}
|
|
64
|
-
if (scope === 'per-file') {
|
|
65
|
-
return { key: `file:${file}:${resourceName}`, scope };
|
|
66
|
-
}
|
|
67
|
-
if (scope === 'per-suite') {
|
|
68
|
-
return { key: `suite:${file}:${suiteBoundary(testCase)}:${resourceName}`, scope };
|
|
69
|
-
}
|
|
70
|
-
return resourceBoundaryForCase(resourceName, scope, testCase);
|
|
71
|
-
}
|
|
6
|
+
import { caseResourceBoundaryKeys, resourceLifecycleBoundaryUseCounts, resourceScopes } from "./resource-lifecycle-boundaries.js";
|
|
7
|
+
import { createManagedResourceAcquirer, createManagedStores, resourceProjectionRecordsFromStores, managedResourceHandle } from "./resource-lifecycle-session-acquirer.js";
|
|
72
8
|
function currentRunningCase() {
|
|
73
9
|
const testCase = currentLifecycleCase();
|
|
74
10
|
if (testCase === null) {
|
|
@@ -76,172 +12,60 @@ function currentRunningCase() {
|
|
|
76
12
|
}
|
|
77
13
|
return testCase;
|
|
78
14
|
}
|
|
79
|
-
function
|
|
80
|
-
return Array.from(new Set(testCase.resourceAttachments.resourceGraph.flatMap(function toBoundary(resource) {
|
|
81
|
-
return isResourceScope(resource.scope)
|
|
82
|
-
? [resourceBoundary(resource.name, resource.scope, testCase).key]
|
|
83
|
-
: [];
|
|
84
|
-
})));
|
|
85
|
-
}
|
|
86
|
-
function initialBoundaryUseCounts(testCases) {
|
|
87
|
-
const counts = new Map();
|
|
88
|
-
for (const testCase of testCases) {
|
|
89
|
-
for (const boundary of caseResourceBoundaries(testCase)) {
|
|
90
|
-
counts.set(boundary, (counts.get(boundary) ?? 0) + 1);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return counts;
|
|
94
|
-
}
|
|
95
|
-
function caseKey(testCase) {
|
|
96
|
-
return workIdentityKey(testCase.workId);
|
|
97
|
-
}
|
|
98
|
-
function mutableDependencyContext() {
|
|
99
|
-
return {};
|
|
100
|
-
}
|
|
101
|
-
function createManagedStores(testCases) {
|
|
102
|
-
const acquisitions = new Map();
|
|
103
|
-
const boundaryUseCounts = new Map(initialBoundaryUseCounts(testCases));
|
|
104
|
-
const errorsByCase = new Map();
|
|
105
|
-
const records = new Map();
|
|
106
|
-
const runErrors = [];
|
|
15
|
+
function defaultLifecycleOptions(testCases, timing) {
|
|
107
16
|
return {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
},
|
|
111
|
-
|
|
112
|
-
records.delete(boundaryKey);
|
|
113
|
-
},
|
|
114
|
-
async existingAcquisition(boundaryKey) {
|
|
115
|
-
return await (acquisitions.get(boundaryKey) ?? Promise.resolve(null));
|
|
116
|
-
},
|
|
117
|
-
existingRecord(boundaryKey) {
|
|
118
|
-
return records.get(boundaryKey);
|
|
119
|
-
},
|
|
120
|
-
recordCaseError(testCase, message, cause) {
|
|
121
|
-
const key = caseKey(testCase);
|
|
122
|
-
const errors = errorsByCase.get(key) ?? [];
|
|
123
|
-
errors.push(resourceWrapperLifecycleError(message, cause).runnerError(testCase.id, testCase.workId));
|
|
124
|
-
errorsByCase.set(key, errors);
|
|
125
|
-
},
|
|
126
|
-
remainingBoundaryUses(boundaryKey) {
|
|
127
|
-
const remaining = (boundaryUseCounts.get(boundaryKey) ?? 0) - 1;
|
|
128
|
-
boundaryUseCounts.set(boundaryKey, remaining);
|
|
129
|
-
return remaining;
|
|
130
|
-
},
|
|
131
|
-
rememberAcquisition(boundaryKey, acquisition) {
|
|
132
|
-
acquisitions.set(boundaryKey, acquisition);
|
|
133
|
-
},
|
|
134
|
-
rememberRecord(boundaryKey, record) {
|
|
135
|
-
records.set(boundaryKey, record);
|
|
136
|
-
},
|
|
137
|
-
takeCaseErrors(testCase) {
|
|
138
|
-
const key = caseKey(testCase);
|
|
139
|
-
const errors = errorsByCase.get(key) ?? [];
|
|
140
|
-
errorsByCase.delete(key);
|
|
141
|
-
return errors;
|
|
142
|
-
},
|
|
143
|
-
takePendingRunErrors() {
|
|
144
|
-
const errors = Array.from(runErrors);
|
|
145
|
-
runErrors.length = 0;
|
|
146
|
-
return errors;
|
|
147
|
-
},
|
|
148
|
-
takeRunErrors() {
|
|
149
|
-
const errors = Array.from(runErrors);
|
|
150
|
-
runErrors.length = 0;
|
|
151
|
-
return errors;
|
|
152
|
-
}
|
|
17
|
+
boundaryUseCounts: resourceLifecycleBoundaryUseCounts(testCases),
|
|
18
|
+
caseDisposalScopes: new Set(resourceScopes),
|
|
19
|
+
projectedResources: { resources: [] },
|
|
20
|
+
timing
|
|
153
21
|
};
|
|
154
22
|
}
|
|
155
|
-
function
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const record = stores.existingRecord(boundary.key);
|
|
160
|
-
if (record !== undefined && record.descriptor !== resource) {
|
|
161
|
-
throw resourceWrapperLifecycleError(`Resource name "${resource.name}" is used by multiple descriptors in one lifecycle boundary.`, resource);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
function createManagedResourceAcquirer(stores) {
|
|
165
|
-
let acquireResource = async function acquireBeforeReady() {
|
|
166
|
-
throw resourceWrapperLifecycleError('Resource lifecycle is not ready.', null);
|
|
167
|
-
};
|
|
168
|
-
async function acquireDependencyContext(resource, testCase, signal) {
|
|
169
|
-
const context = mutableDependencyContext();
|
|
170
|
-
await Promise.all(resourceEntries(resource.dependencies).map(async function acquireDependency([key, dependency]) {
|
|
171
|
-
const record = await acquireResource(dependency, testCase, signal);
|
|
172
|
-
context[key] = record.exposedHandle;
|
|
173
|
-
}));
|
|
174
|
-
return Object.freeze(context);
|
|
23
|
+
async function disposeResourceRecord(record, signal, timing) {
|
|
24
|
+
const { dispose } = callableResourceDefinition(record.descriptor);
|
|
25
|
+
if (record.external || dispose === null) {
|
|
26
|
+
return;
|
|
175
27
|
}
|
|
176
|
-
async function
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
28
|
+
const disposeHandle = async function disposeResourceHandle() {
|
|
29
|
+
await dispose(record.ownerHandle, {
|
|
30
|
+
dependencies: record.dependencyContext,
|
|
31
|
+
scenarios: lifecycleScenarioBindings(record.descriptor),
|
|
180
32
|
signal
|
|
181
33
|
});
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
descriptor: resource,
|
|
186
|
-
exposedHandle: projectedHandle(resource, ownerHandle, dependencyContext),
|
|
187
|
-
ownerHandle
|
|
188
|
-
};
|
|
189
|
-
stores.rememberRecord(boundary.key, record);
|
|
190
|
-
return record;
|
|
191
|
-
}
|
|
192
|
-
async function acquireNewResource(resource, boundary, testCase, signal) {
|
|
193
|
-
const acquisition = startResource(resource, boundary, testCase, signal);
|
|
194
|
-
stores.rememberAcquisition(boundary.key, acquisition);
|
|
195
|
-
try {
|
|
196
|
-
return await acquisition;
|
|
197
|
-
}
|
|
198
|
-
catch (error) {
|
|
199
|
-
stores.deleteAcquisition(boundary.key);
|
|
200
|
-
throw error;
|
|
201
|
-
}
|
|
34
|
+
};
|
|
35
|
+
if (timing === null) {
|
|
36
|
+
await disposeHandle();
|
|
202
37
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
}
|
|
210
|
-
const existingAcquisition = await stores.existingAcquisition(boundary.key);
|
|
211
|
-
return existingAcquisition ?? await acquireNewResource(resource, boundary, testCase, signal);
|
|
38
|
+
else {
|
|
39
|
+
await timing.measure({
|
|
40
|
+
phase: 'dispose',
|
|
41
|
+
resource: { name: record.descriptor.name, scope: record.descriptor.scope },
|
|
42
|
+
signal
|
|
43
|
+
}, disposeHandle);
|
|
212
44
|
}
|
|
213
|
-
acquireResource = acquire;
|
|
214
|
-
return { acquire };
|
|
215
45
|
}
|
|
216
|
-
async function disposeBoundary(stores, boundaryKey, signal) {
|
|
46
|
+
async function disposeBoundary(stores, boundaryKey, signal, timing) {
|
|
217
47
|
const record = stores.existingRecord(boundaryKey);
|
|
218
48
|
if (record === undefined) {
|
|
219
49
|
return;
|
|
220
50
|
}
|
|
221
|
-
const { dispose } = callableResourceDefinition(record.descriptor);
|
|
222
51
|
stores.deleteRecord(boundaryKey);
|
|
223
52
|
stores.deleteAcquisition(boundaryKey);
|
|
224
|
-
|
|
225
|
-
await dispose(record.ownerHandle, {
|
|
226
|
-
dependencies: record.dependencyContext,
|
|
227
|
-
signal
|
|
228
|
-
});
|
|
229
|
-
}
|
|
53
|
+
await disposeResourceRecord(record, signal, timing);
|
|
230
54
|
}
|
|
231
55
|
function freshDisposalSignal() {
|
|
232
56
|
const controller = new AbortController();
|
|
233
57
|
return controller.signal;
|
|
234
58
|
}
|
|
235
|
-
async function disposeCompletedBoundary(stores, boundary) {
|
|
59
|
+
async function disposeCompletedBoundary(stores, boundary, timing) {
|
|
236
60
|
const remaining = stores.remainingBoundaryUses(boundary);
|
|
237
61
|
if (remaining <= 0) {
|
|
238
|
-
await disposeBoundary(stores, boundary, freshDisposalSignal());
|
|
62
|
+
await disposeBoundary(stores, boundary, freshDisposalSignal(), timing);
|
|
239
63
|
}
|
|
240
64
|
}
|
|
241
|
-
async function disposeCompletedBoundaries(stores, testCase) {
|
|
242
|
-
for (const boundary of
|
|
65
|
+
async function disposeCompletedBoundaries(stores, options, testCase) {
|
|
66
|
+
for (const boundary of caseResourceBoundaryKeys(testCase, options.caseDisposalScopes)) {
|
|
243
67
|
try {
|
|
244
|
-
await disposeCompletedBoundary(stores, boundary);
|
|
68
|
+
await disposeCompletedBoundary(stores, boundary, options.timing);
|
|
245
69
|
}
|
|
246
70
|
catch (error) {
|
|
247
71
|
stores.recordCaseError(testCase, 'Resource disposal failed.', error);
|
|
@@ -257,57 +81,96 @@ async function managedResourceHandles(acquirer, graph, testCase, signal) {
|
|
|
257
81
|
const handles = new Map();
|
|
258
82
|
for (const node of graph.order) {
|
|
259
83
|
const record = await acquirer.acquire(node.descriptor, testCase, signal);
|
|
260
|
-
handles.set(node.descriptor, record.
|
|
84
|
+
handles.set(node.descriptor, managedResourceHandle(record, node.descriptor));
|
|
261
85
|
}
|
|
262
86
|
return handles;
|
|
263
87
|
}
|
|
264
|
-
async function acquireComposedResourcesWithLifecycle(stores, steps, signal) {
|
|
88
|
+
async function acquireComposedResourcesWithLifecycle(stores, options, steps, signal) {
|
|
265
89
|
const testCase = currentRunningCase();
|
|
266
90
|
const directResources = resourceMapFromEntries(directResourceEntries(steps));
|
|
267
91
|
const runtimes = stepRuntimeGraphs(steps);
|
|
268
92
|
const combinedResources = combinedResourceEntries(steps, testCase.workId);
|
|
269
93
|
const graph = createResourceGraph(combinedResources);
|
|
270
|
-
const acquirer = createManagedResourceAcquirer(stores);
|
|
94
|
+
const acquirer = createManagedResourceAcquirer(stores, options);
|
|
271
95
|
assertResourceDependencyScopes(combinedResources);
|
|
272
96
|
await acquireTopLevelResources(acquirer, graph, testCase, signal);
|
|
273
97
|
const handles = await managedResourceHandles(acquirer, graph, testCase, signal);
|
|
274
98
|
return composedResourceSession(directResources, runtimes, managedResourceSession(combinedResources, handles), testCase.workId);
|
|
275
99
|
}
|
|
276
|
-
async function acquireManagedComposedResources(
|
|
100
|
+
async function acquireManagedComposedResources(request) {
|
|
277
101
|
try {
|
|
278
|
-
return await acquireComposedResourcesWithLifecycle(stores, steps, signal);
|
|
102
|
+
return await acquireComposedResourcesWithLifecycle(request.stores, request.options, request.steps, request.signal);
|
|
279
103
|
}
|
|
280
104
|
catch (error) {
|
|
281
|
-
throw resourceWrapperErrorFromUnknown(messages.acquisitionFailure, error);
|
|
105
|
+
throw resourceWrapperErrorFromUnknown(request.messages.acquisitionFailure, error);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async function acquireManagedResourceScopes(request) {
|
|
109
|
+
const combinedResources = combinedResourceEntries(request.steps, request.testCase.workId);
|
|
110
|
+
const graph = createResourceGraph(combinedResources);
|
|
111
|
+
const acquirer = createManagedResourceAcquirer(request.stores, request.options);
|
|
112
|
+
assertResourceDependencyScopes(combinedResources);
|
|
113
|
+
for (const node of graph.order) {
|
|
114
|
+
if (request.scopes.has(node.descriptor.scope)) {
|
|
115
|
+
await acquirer.acquire(node.descriptor, request.testCase, request.signal);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async function disposeAllManagedResources(stores, signal, timing) {
|
|
120
|
+
const errors = [];
|
|
121
|
+
for (const record of stores.records().toReversed()) {
|
|
122
|
+
try {
|
|
123
|
+
await disposeBoundary(stores, record.boundary.key, signal, timing);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
errors.push({
|
|
127
|
+
attributedTo: null,
|
|
128
|
+
attributedToWork: null,
|
|
129
|
+
cause: error,
|
|
130
|
+
diagnostics: [],
|
|
131
|
+
message: 'Resource disposal failed.',
|
|
132
|
+
subtype: 'runtime-policy'
|
|
133
|
+
});
|
|
134
|
+
}
|
|
282
135
|
}
|
|
136
|
+
return errors;
|
|
283
137
|
}
|
|
284
|
-
function
|
|
285
|
-
const stores = createManagedStores(
|
|
138
|
+
function createManagedLifecycleState(options) {
|
|
139
|
+
const stores = createManagedStores(options);
|
|
140
|
+
const context = { options, stores };
|
|
286
141
|
return {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
142
|
+
stores,
|
|
143
|
+
lifecycle: {
|
|
144
|
+
async acquireComposedResources(steps, signal, messages) {
|
|
145
|
+
return await acquireManagedComposedResources({ ...context, messages, signal, steps });
|
|
146
|
+
},
|
|
147
|
+
async acquireResourceScopes(steps, testCase, signal, scopes) {
|
|
148
|
+
await acquireManagedResourceScopes({ ...context, scopes, signal, steps, testCase });
|
|
149
|
+
},
|
|
150
|
+
async disposeAll(signal) {
|
|
151
|
+
return await disposeAllManagedResources(stores, signal, options.timing);
|
|
152
|
+
},
|
|
153
|
+
async runCase(testCase, run) {
|
|
154
|
+
try {
|
|
155
|
+
return await runWithLifecycleCase(testCase, run);
|
|
156
|
+
}
|
|
157
|
+
finally {
|
|
158
|
+
await disposeCompletedBoundaries(stores, options, testCase);
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
takeCaseErrors(testCase) {
|
|
162
|
+
return stores.takeCaseErrors(testCase);
|
|
163
|
+
},
|
|
164
|
+
takePendingRunErrors() {
|
|
165
|
+
return stores.takePendingRunErrors();
|
|
166
|
+
},
|
|
167
|
+
takeRunErrors() {
|
|
168
|
+
return stores.takeRunErrors();
|
|
296
169
|
}
|
|
297
|
-
},
|
|
298
|
-
takeCaseErrors(testCase) {
|
|
299
|
-
return stores.takeCaseErrors(testCase);
|
|
300
|
-
},
|
|
301
|
-
takePendingRunErrors() {
|
|
302
|
-
return stores.takePendingRunErrors();
|
|
303
|
-
},
|
|
304
|
-
takeRunErrors() {
|
|
305
|
-
return stores.takeRunErrors();
|
|
306
170
|
}
|
|
307
171
|
};
|
|
308
172
|
}
|
|
309
|
-
|
|
310
|
-
const lifecycle = createManagedLifecycle(testCases);
|
|
173
|
+
function createRuntimePolicyFromLifecycle(lifecycle) {
|
|
311
174
|
return {
|
|
312
175
|
async runCase(testCase, run) {
|
|
313
176
|
return await runWithManagedLifecycle(lifecycle, async function runWithResourceLifecycle() {
|
|
@@ -328,4 +191,37 @@ export function createResourceLifecycleRuntimePolicy(testCases) {
|
|
|
328
191
|
}
|
|
329
192
|
};
|
|
330
193
|
}
|
|
194
|
+
export function createResourceLifecycleRuntimePolicy(testCases, timing) {
|
|
195
|
+
const { lifecycle } = createManagedLifecycleState(defaultLifecycleOptions(testCases, timing));
|
|
196
|
+
return createRuntimePolicyFromLifecycle(lifecycle);
|
|
197
|
+
}
|
|
198
|
+
export function createResourceLifecycleSession(options) {
|
|
199
|
+
const { lifecycle, stores } = createManagedLifecycleState(options);
|
|
200
|
+
return {
|
|
201
|
+
async disposeAll(signal) {
|
|
202
|
+
return await lifecycle.disposeAll(signal);
|
|
203
|
+
},
|
|
204
|
+
projectionRecords() {
|
|
205
|
+
return resourceProjectionRecordsFromStores(stores);
|
|
206
|
+
},
|
|
207
|
+
runtimePolicy: createRuntimePolicyFromLifecycle(lifecycle)
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
export async function acquireResourceLifecycleScopes(request) {
|
|
211
|
+
const { lifecycle, stores } = createManagedLifecycleState(request.options);
|
|
212
|
+
await runWithManagedLifecycle(lifecycle, async function acquireSelectedScopes() {
|
|
213
|
+
for (const testCase of request.testCases) {
|
|
214
|
+
await lifecycle.acquireResourceScopes(request.stepsForCase(testCase), testCase, request.signal, request.scopes);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
return {
|
|
218
|
+
async disposeAll(disposalSignal) {
|
|
219
|
+
return await lifecycle.disposeAll(disposalSignal);
|
|
220
|
+
},
|
|
221
|
+
projectionRecords() {
|
|
222
|
+
return resourceProjectionRecordsFromStores(stores);
|
|
223
|
+
},
|
|
224
|
+
runtimePolicy: createRuntimePolicyFromLifecycle(lifecycle)
|
|
225
|
+
};
|
|
226
|
+
}
|
|
331
227
|
//# sourceMappingURL=resource-lifecycle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-lifecycle.js","sourceRoot":"","sources":["../../../../source/run/resource-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resource-lifecycle.js","sourceRoot":"","sources":["../../../../source/run/resource-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createRunShardHasher, shardCollectedRunPlanCases } from "./run-sharding.js";
|
|
2
2
|
import { orderedRunItems } from "./run-selection.js";
|
|
3
3
|
import { collectedRunCaseEntriesFromWorkUnits, createWorkerPoolPlacementResolution } from "./worker-pool-placement-planning.js";
|
|
4
|
+
import { constrainedScheduling, workResourceConstraints } from "./work-unit-resource-constraints.js";
|
|
4
5
|
function fileSetForDiscoveredFiles(files) {
|
|
5
6
|
const fileSets = new Map(files.map(function toFileSetEntry(file) {
|
|
6
7
|
return [file.file, file.fileSet];
|
|
@@ -24,6 +25,11 @@ function workerLifecycle(profile) {
|
|
|
24
25
|
? profile.execution.workerLifecycle
|
|
25
26
|
: 'reuse';
|
|
26
27
|
}
|
|
28
|
+
function profileMaximumWorkers(profile) {
|
|
29
|
+
return profile.execution.processModel === 'worker-pool'
|
|
30
|
+
? profile.execution.maxWorkers
|
|
31
|
+
: null;
|
|
32
|
+
}
|
|
27
33
|
function createPlacementResolution(input, shardHasher) {
|
|
28
34
|
if (input.planKind !== 'worker-pool') {
|
|
29
35
|
return null;
|
|
@@ -35,6 +41,8 @@ function createPlacementResolution(input, shardHasher) {
|
|
|
35
41
|
fileSetForFile: fileSetForDiscoveredFiles(input.files),
|
|
36
42
|
nowMilliseconds: input.dependencies.wallClock.currentEpochMilliseconds,
|
|
37
43
|
order: input.request.order,
|
|
44
|
+
profileMaximumWorkers: profileMaximumWorkers(input.profile),
|
|
45
|
+
requestedWorkers: input.request.workers,
|
|
38
46
|
seed: input.request.seed,
|
|
39
47
|
selectedPlan: input.collectedPlan,
|
|
40
48
|
shard: input.request.shard,
|
|
@@ -44,17 +52,37 @@ function createPlacementResolution(input, shardHasher) {
|
|
|
44
52
|
workerLifecycle: workerLifecycle(input.profile)
|
|
45
53
|
});
|
|
46
54
|
}
|
|
55
|
+
function orderedCollectedCases(input, placementPlan, shardHasher) {
|
|
56
|
+
if (placementPlan !== null) {
|
|
57
|
+
return collectedRunCaseEntriesFromWorkUnits(input.collectedPlan, placementPlan.units);
|
|
58
|
+
}
|
|
59
|
+
return orderedRunItems(shardCollectedRunPlanCases(input.collectedPlan, input.request.shard, shardHasher), input.request.order, input.request.seed);
|
|
60
|
+
}
|
|
61
|
+
function resolvedScheduling(input, orderedCases) {
|
|
62
|
+
if (input.planKind === 'worker-pool') {
|
|
63
|
+
return input.profile.execution.scheduling;
|
|
64
|
+
}
|
|
65
|
+
const constraints = workResourceConstraints(orderedCases.map(function toWorkId(entry) {
|
|
66
|
+
return entry.workId;
|
|
67
|
+
}), input.collectedPlan);
|
|
68
|
+
return constrainedScheduling(input.profile.execution.scheduling, constraints);
|
|
69
|
+
}
|
|
47
70
|
export async function createCollectedExecutionPlan(input) {
|
|
48
71
|
const shardHasher = await createRunShardHasher(input.request.shard);
|
|
49
72
|
const placementResolution = createPlacementResolution(input, shardHasher);
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
:
|
|
73
|
+
const planningFacts = placementResolution ?? {
|
|
74
|
+
durationHistory: null,
|
|
75
|
+
placementPlan: null,
|
|
76
|
+
workerCount: null
|
|
77
|
+
};
|
|
78
|
+
const { placementPlan, workerCount } = planningFacts;
|
|
79
|
+
const orderedCases = orderedCollectedCases(input, placementPlan, shardHasher);
|
|
54
80
|
return {
|
|
55
|
-
durationHistory:
|
|
81
|
+
durationHistory: planningFacts.durationHistory,
|
|
56
82
|
orderedCases,
|
|
57
|
-
placementPlan
|
|
83
|
+
placementPlan,
|
|
84
|
+
scheduling: resolvedScheduling(input, orderedCases),
|
|
85
|
+
workerCount
|
|
58
86
|
};
|
|
59
87
|
}
|
|
60
88
|
//# sourceMappingURL=run-collected-planning.js.map
|