@overkill-dev/run 0.0.58 → 0.0.60
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/case-execution.d.ts +2 -2
- package/engine/case-execution.d.ts.map +1 -1
- package/engine/case-execution.js +3 -3
- package/engine/case-execution.js.map +1 -1
- package/engine/engine.d.ts +2 -2
- package/engine/engine.d.ts.map +1 -1
- package/engine/execution-supervision.d.ts +3 -3
- package/engine/execution-supervision.d.ts.map +1 -1
- package/engine/execution-supervision.js +4 -4
- package/engine/execution-supervision.js.map +1 -1
- package/engine/execution-test-plan-cases.js +4 -4
- package/engine/execution-test-plan-cases.js.map +1 -1
- package/engine/execution.d.ts +2 -2
- package/engine/execution.d.ts.map +1 -1
- package/engine/execution.js +2 -2
- package/engine/execution.js.map +1 -1
- package/engine/reporter-dispatcher.d.ts +2 -2
- package/engine/reporter-dispatcher.d.ts.map +1 -1
- package/engine/run-timings.d.ts +7 -0
- package/engine/run-timings.d.ts.map +1 -1
- package/engine/run-timings.js +1 -0
- package/engine/run-timings.js.map +1 -1
- package/engine/test-body-resource-attachment.d.ts +1 -0
- package/engine/test-body-resource-attachment.d.ts.map +1 -1
- package/engine/test-body-resource-attachment.js +1 -0
- package/engine/test-body-resource-attachment.js.map +1 -1
- package/package.json +5 -1
- package/packages/engine/engine.entry-point.d.ts +1 -1
- package/packages/engine/engine.entry-point.d.ts.map +1 -1
- package/packages/engine/engine.entry-point.js +2 -2
- package/packages/engine/engine.entry-point.js.map +1 -1
- package/packages/reporter-line/reporter-line.entry-point.js +5 -0
- package/packages/reporter-line/reporter-line.entry-point.js.map +1 -1
- package/packages/run/run.entry-point.d.ts +4 -3
- package/packages/run/run.entry-point.d.ts.map +1 -1
- package/packages/run/run.entry-point.js +3 -3
- package/packages/run/run.entry-point.js.map +1 -1
- package/readme.md +15 -1
- package/reporters/progress-reporter.js +6 -0
- package/reporters/progress-reporter.js.map +1 -0
- package/reporters/tree-reporter.js +111 -0
- package/reporters/tree-reporter.js.map +1 -0
- package/resources/resource-graph.d.ts +1 -0
- package/resources/resource-graph.d.ts.map +1 -1
- package/resources/resource-graph.js +2 -2
- package/resources/resource-graph.js.map +1 -1
- package/run/default-run-engine.js +2 -2
- package/run/default-run-engine.js.map +1 -1
- package/run/execution-plan-resolution.js +356 -0
- package/run/execution-plan-resolution.js.map +1 -0
- package/run/permission-denial-runtime-policy.js +12 -2
- package/run/permission-denial-runtime-policy.js.map +1 -1
- package/run/placement-trace.d.ts +83 -40
- package/run/placement-trace.d.ts.map +1 -1
- package/run/placement-trace.js +80 -0
- package/run/placement-trace.js.map +1 -1
- package/run/resource-lifecycle-boundaries.js +8 -4
- package/run/resource-lifecycle-boundaries.js.map +1 -1
- package/run/resource-lifecycle-state.d.ts +9 -1
- 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 +3 -1
- package/run/resource-lifecycle-timing.js.map +1 -1
- package/run/resource-lifecycle.js +37 -5
- package/run/resource-lifecycle.js.map +1 -1
- package/run/resource-ownership-plan.d.ts +30 -0
- package/run/resource-ownership-plan.d.ts.map +1 -0
- package/run/resource-usage.d.ts +3 -3
- package/run/resource-usage.d.ts.map +1 -1
- package/run/resource-usage.js +1 -1
- package/run/resource-usage.js.map +1 -1
- package/run/run-collected-planning.js +9 -1
- package/run/run-collected-planning.js.map +1 -1
- package/run/run-empty-shard.js +3 -3
- package/run/run-empty-shard.js.map +1 -1
- package/run/run-errors.d.ts +54 -0
- package/run/run-errors.d.ts.map +1 -1
- package/run/run-errors.js +61 -0
- package/run/run-errors.js.map +1 -1
- package/run/run-if-main.d.ts +3 -3
- package/run/run-if-main.d.ts.map +1 -1
- package/run/run-if-main.js +2 -2
- package/run/run-if-main.js.map +1 -1
- package/run/run-isolated-process.js +4 -4
- package/run/run-isolated-process.js.map +1 -1
- package/run/run-local-execution.js +1 -1
- package/run/run-local-execution.js.map +1 -1
- package/run/run-local-resolution.js +2 -2
- package/run/run-local-resolution.js.map +1 -1
- package/run/run-orchestrator-dependencies.d.ts +2 -2
- package/run/run-orchestrator-dependencies.d.ts.map +1 -1
- package/run/run-orchestrator.js +2 -2
- package/run/run-orchestrator.js.map +1 -1
- package/run/run-support.js +1 -1
- package/run/run-support.js.map +1 -1
- package/run/run-timing-collection.d.ts +2 -2
- package/run/run-timing-collection.d.ts.map +1 -1
- package/run/run-timing-collection.js +28 -22
- package/run/run-timing-collection.js.map +1 -1
- package/run/run-types.d.ts +3 -2
- package/run/run-types.d.ts.map +1 -1
- package/run/run-types.js +3 -4
- package/run/run-types.js.map +1 -1
- package/run/supervised-child-process.d.ts +2 -2
- package/run/supervised-child-process.d.ts.map +1 -1
- package/run/supervised-child-process.js +1 -1
- package/run/supervised-child-process.js.map +1 -1
- package/run/supervised-child.entry-point.js +2 -2
- package/run/supervised-child.entry-point.js.map +1 -1
- package/run/supervised-child.js +4 -4
- package/run/supervised-child.js.map +1 -1
- package/run/supervised-protocol.js.map +1 -1
- package/run/supervised-run-collection.js +3 -3
- package/run/supervised-run-collection.js.map +1 -1
- package/run/supervised-run-runtime.js +5 -5
- package/run/supervised-run-runtime.js.map +1 -1
- package/run/supervised-run.js +8 -8
- package/run/supervised-run.js.map +1 -1
- package/run/work-unit-planning.js +16 -3
- package/run/work-unit-planning.js.map +1 -1
- package/run/worker-pool-collection.js +2 -2
- package/run/worker-pool-collection.js.map +1 -1
- package/run/worker-pool-compatible-batching.js +0 -10
- package/run/worker-pool-compatible-batching.js.map +1 -1
- package/run/worker-pool-dispatch-state.js.map +1 -1
- package/run/worker-pool-execution.js +52 -55
- package/run/worker-pool-execution.js.map +1 -1
- package/run/worker-pool-hedge-dispatch.js +1 -1
- package/run/worker-pool-hedge-dispatch.js.map +1 -1
- package/run/worker-pool-hedged-arbitration.js +53 -26
- package/run/worker-pool-hedged-arbitration.js.map +1 -1
- package/run/worker-pool-host-protocol.js.map +1 -1
- package/run/worker-pool-host-task.js +9 -0
- package/run/worker-pool-host-task.js.map +1 -1
- package/run/worker-pool-host.entry-point.js +15 -15
- package/run/worker-pool-host.entry-point.js.map +1 -1
- package/run/worker-pool-lanes.js +16 -9
- package/run/worker-pool-lanes.js.map +1 -1
- package/run/worker-pool-lease-selection.js.map +1 -1
- package/run/worker-pool-output.js +1 -1
- package/run/worker-pool-output.js.map +1 -1
- package/run/worker-pool-pending-splitting.js +4 -2
- package/run/worker-pool-pending-splitting.js.map +1 -1
- package/run/worker-pool-placement-planning.js +24 -3
- package/run/worker-pool-placement-planning.js.map +1 -1
- package/run/worker-pool-protocol.js +19 -0
- package/run/worker-pool-protocol.js.map +1 -1
- package/run/worker-pool-resource-lifecycle-execution.js +143 -12
- package/run/worker-pool-resource-lifecycle-execution.js.map +1 -1
- package/run/worker-pool-resource-tracking.js +1 -1
- package/run/worker-pool-resource-tracking.js.map +1 -1
- package/run/worker-pool-results.js +9 -6
- package/run/worker-pool-results.js.map +1 -1
- package/run/worker-pool-routing.js +13 -1
- package/run/worker-pool-routing.js.map +1 -1
- package/run/worker-pool-run.js +11 -7
- package/run/worker-pool-run.js.map +1 -1
- package/run/worker-pool-runtime.js +26 -22
- package/run/worker-pool-runtime.js.map +1 -1
- package/run/worker-pool-static-dispatcher.js +18 -8
- package/run/worker-pool-static-dispatcher.js.map +1 -1
- package/run/worker-pool-task-events.js +89 -26
- package/run/worker-pool-task-events.js.map +1 -1
- package/run/worker-pool-task-validation.js +1 -0
- package/run/worker-pool-task-validation.js.map +1 -1
- package/run/worker-pool-work-dispatcher.js +21 -13
- package/run/worker-pool-work-dispatcher.js.map +1 -1
- package/run/worker-pool-worker-resources.js +11 -4
- package/run/worker-pool-worker-resources.js.map +1 -1
- package/run/worker-pool-worker-timing.js +14 -7
- package/run/worker-pool-worker-timing.js.map +1 -1
- package/run/worker-pool-worker.js +29 -13
- package/run/worker-pool-worker.js.map +1 -1
- package/sbom.cdx.json +38 -4
- package/clock/overkill-clock.d.ts +0 -30
- package/clock/overkill-clock.d.ts.map +0 -1
- package/clock/overkill-clock.js +0 -53
- package/clock/overkill-clock.js.map +0 -1
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { runtimeIdentityKey, workIdentityKey } from "../engine/identity.js";
|
|
2
|
+
import { resourceDependencyScopeAllowed } from "../resources/resource-graph.js";
|
|
3
|
+
import { caseResourceOwnershipBoundaries, resourceScopes } from "./resource-lifecycle-boundaries.js";
|
|
4
|
+
import { collectedRunCaseEntries } from "./collected-run-plan.js";
|
|
5
|
+
import { hardConstraintKeys } from "./work-unit-resource-constraints.js";
|
|
6
|
+
function stableJson(value) {
|
|
7
|
+
if (value === null || typeof value !== 'object') {
|
|
8
|
+
return JSON.stringify(value);
|
|
9
|
+
}
|
|
10
|
+
if (Array.isArray(value)) {
|
|
11
|
+
return `[${value.map(stableJson).join(',')}]`;
|
|
12
|
+
}
|
|
13
|
+
const keys = Object.keys(value).toSorted(function compareKeys(left, right) {
|
|
14
|
+
return left.localeCompare(right);
|
|
15
|
+
});
|
|
16
|
+
return `{${keys
|
|
17
|
+
.map(function entry(key) {
|
|
18
|
+
return `${JSON.stringify(key)}:${stableJson(Reflect.get(value, key))}`;
|
|
19
|
+
})
|
|
20
|
+
.join(',')}}`;
|
|
21
|
+
}
|
|
22
|
+
function nonEmpty(values, message) {
|
|
23
|
+
const first = values[0];
|
|
24
|
+
if (first === undefined) {
|
|
25
|
+
throw new Error(message);
|
|
26
|
+
}
|
|
27
|
+
return [first, ...values.slice(1)];
|
|
28
|
+
}
|
|
29
|
+
function mapWith(values, key, value) {
|
|
30
|
+
const updatedValues = new Map(values);
|
|
31
|
+
updatedValues.set(key, value);
|
|
32
|
+
return updatedValues;
|
|
33
|
+
}
|
|
34
|
+
function uniqueWork(work) {
|
|
35
|
+
const workByKey = new Map(work.map(function workEntry(item) {
|
|
36
|
+
return [workIdentityKey(item), item];
|
|
37
|
+
}));
|
|
38
|
+
return Array.from(workByKey.values());
|
|
39
|
+
}
|
|
40
|
+
const resourceScopeNames = resourceScopes;
|
|
41
|
+
function isResourceScope(scope) {
|
|
42
|
+
return resourceScopeNames.has(scope);
|
|
43
|
+
}
|
|
44
|
+
function resourceScope(resource) {
|
|
45
|
+
return isResourceScope(resource.scope) ? resource.scope : null;
|
|
46
|
+
}
|
|
47
|
+
function resourceFacts(resource) {
|
|
48
|
+
const scope = resourceScope(resource);
|
|
49
|
+
return scope === null ? null : { name: resource.name, scope };
|
|
50
|
+
}
|
|
51
|
+
function resourceDefinitionEnvelope(resource) {
|
|
52
|
+
return {
|
|
53
|
+
dependencies: resource.dependencies.toSorted(function compareDependencies(left, right) {
|
|
54
|
+
return left.localeCompare(right);
|
|
55
|
+
}),
|
|
56
|
+
handleTransport: resource.handleTransport,
|
|
57
|
+
requirements: resource.requirements,
|
|
58
|
+
scenarios: resource.scenarios,
|
|
59
|
+
scope: resource.scope
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function runtimeSummaryForId(runtimes, runtimeId) {
|
|
63
|
+
return runtimes.find(function runtimeNameMatches(runtime) {
|
|
64
|
+
return runtime.name === runtimeId.name;
|
|
65
|
+
}) ?? null;
|
|
66
|
+
}
|
|
67
|
+
function recordResourceDefinitions(entry, resources) {
|
|
68
|
+
const updatedResources = new Map(resources);
|
|
69
|
+
for (const resource of entry.testCase.resourceAttachments.resourceGraph) {
|
|
70
|
+
const definitions = new Map(updatedResources.get(resource.name));
|
|
71
|
+
const envelope = stableJson(resourceDefinitionEnvelope(resource));
|
|
72
|
+
const definition = definitions.get(envelope) ?? { resource, work: [] };
|
|
73
|
+
definitions.set(envelope, { resource, work: [...definition.work, entry.workId] });
|
|
74
|
+
updatedResources.set(resource.name, definitions);
|
|
75
|
+
}
|
|
76
|
+
return updatedResources;
|
|
77
|
+
}
|
|
78
|
+
function recordRuntimeDefinition(entry, runtimeId, runtimes) {
|
|
79
|
+
const runtime = runtimeSummaryForId(entry.testCase.resourceAttachments.runtimeGraphs, runtimeId);
|
|
80
|
+
if (runtime === null) {
|
|
81
|
+
return runtimes;
|
|
82
|
+
}
|
|
83
|
+
const runtimeKey = runtimeIdentityKey(runtimeId);
|
|
84
|
+
const existing = runtimes.get(runtimeKey);
|
|
85
|
+
const definitions = new Map(existing?.definitions);
|
|
86
|
+
const envelope = stableJson(runtime);
|
|
87
|
+
definitions.set(envelope, [...definitions.get(envelope) ?? [], entry.workId]);
|
|
88
|
+
return mapWith(runtimes, runtimeKey, { definitions, runtime: runtimeId });
|
|
89
|
+
}
|
|
90
|
+
function resourceDefinitionConflict(name, definitions) {
|
|
91
|
+
const values = Array.from(definitions.values());
|
|
92
|
+
const facts = values.flatMap(function definitionFacts(definition) {
|
|
93
|
+
const factsForResource = resourceFacts(definition.resource);
|
|
94
|
+
return factsForResource === null ? [] : [factsForResource];
|
|
95
|
+
});
|
|
96
|
+
const work = uniqueWork(values.flatMap(function definitionWork(definition) {
|
|
97
|
+
return definition.work;
|
|
98
|
+
}));
|
|
99
|
+
return definitions.size <= 1 || facts.length === 0 || work.length === 0 ? [] : [{
|
|
100
|
+
definitions: nonEmpty(facts, 'Resource definition conflict requires resource facts.'),
|
|
101
|
+
kind: 'resource-definition',
|
|
102
|
+
name,
|
|
103
|
+
work: nonEmpty(work, 'Resource definition conflict requires work.')
|
|
104
|
+
}];
|
|
105
|
+
}
|
|
106
|
+
function runtimeDefinitionConflict(record) {
|
|
107
|
+
const work = uniqueWork(Array.from(record.definitions.values()).flat());
|
|
108
|
+
return record.definitions.size <= 1 ? [] : [{
|
|
109
|
+
kind: 'runtime-definition',
|
|
110
|
+
runtime: record.runtime,
|
|
111
|
+
work: nonEmpty(work, 'Runtime definition conflict requires work.')
|
|
112
|
+
}];
|
|
113
|
+
}
|
|
114
|
+
function identityConflicts(plan) {
|
|
115
|
+
let resources = new Map();
|
|
116
|
+
let runtimes = new Map();
|
|
117
|
+
for (const entry of collectedRunCaseEntries(plan)) {
|
|
118
|
+
resources = recordResourceDefinitions(entry, resources);
|
|
119
|
+
for (const runtimeId of entry.workId.runtimes) {
|
|
120
|
+
runtimes = recordRuntimeDefinition(entry, runtimeId, runtimes);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return [
|
|
124
|
+
...Array
|
|
125
|
+
.from(resources, function resourceConflict([name, definitions]) {
|
|
126
|
+
return resourceDefinitionConflict(name, definitions);
|
|
127
|
+
})
|
|
128
|
+
.flat(),
|
|
129
|
+
...Array.from(runtimes.values()).flatMap(runtimeDefinitionConflict)
|
|
130
|
+
];
|
|
131
|
+
}
|
|
132
|
+
function dependencyConflictRecord(resource, dependency) {
|
|
133
|
+
const resourceValue = resourceFacts(resource);
|
|
134
|
+
const dependencyValue = resourceFacts(dependency);
|
|
135
|
+
if (resourceValue === null || dependencyValue === null) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return resourceDependencyScopeAllowed(resourceValue, dependencyValue)
|
|
139
|
+
? null
|
|
140
|
+
: { dependency: dependencyValue, resource: resourceValue };
|
|
141
|
+
}
|
|
142
|
+
function recordResourceDependencyConflicts(entry, resource, resources, conflicts) {
|
|
143
|
+
let updatedConflicts = conflicts;
|
|
144
|
+
for (const dependencyName of resource.dependencies) {
|
|
145
|
+
const dependency = resources.get(dependencyName);
|
|
146
|
+
const record = dependency === undefined ? null : dependencyConflictRecord(resource, dependency);
|
|
147
|
+
if (record !== null) {
|
|
148
|
+
const key = stableJson(record);
|
|
149
|
+
const existing = updatedConflicts.get(key);
|
|
150
|
+
updatedConflicts = mapWith(updatedConflicts, key, {
|
|
151
|
+
...record,
|
|
152
|
+
work: [...existing?.work ?? [], entry.workId]
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return updatedConflicts;
|
|
157
|
+
}
|
|
158
|
+
function recordDependencyConflicts(entry, conflicts) {
|
|
159
|
+
const resources = new Map(entry.testCase.resourceAttachments.resourceGraph.map(function resourceEntry(resource) {
|
|
160
|
+
return [resource.name, resource];
|
|
161
|
+
}));
|
|
162
|
+
let updatedConflicts = conflicts;
|
|
163
|
+
for (const resource of resources.values()) {
|
|
164
|
+
updatedConflicts = recordResourceDependencyConflicts(entry, resource, resources, updatedConflicts);
|
|
165
|
+
}
|
|
166
|
+
return updatedConflicts;
|
|
167
|
+
}
|
|
168
|
+
function dependencyScopeConflicts(plan) {
|
|
169
|
+
let conflicts = new Map();
|
|
170
|
+
for (const entry of collectedRunCaseEntries(plan)) {
|
|
171
|
+
conflicts = recordDependencyConflicts(entry, conflicts);
|
|
172
|
+
}
|
|
173
|
+
return Array.from(conflicts.values(), function dependencyConflict(conflict) {
|
|
174
|
+
return {
|
|
175
|
+
dependency: conflict.dependency,
|
|
176
|
+
kind: 'resource-dependency-scope',
|
|
177
|
+
resource: conflict.resource,
|
|
178
|
+
work: nonEmpty(uniqueWork(conflict.work), 'Resource dependency conflict requires work.')
|
|
179
|
+
};
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
function caseBoundaryRecords(entry) {
|
|
183
|
+
return caseResourceOwnershipBoundaries({
|
|
184
|
+
id: entry.id,
|
|
185
|
+
resourceAttachments: entry.testCase.resourceAttachments,
|
|
186
|
+
workId: entry.workId
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
const sharedResourceScopes = new Set(['per-file', 'per-run', 'per-suite']);
|
|
190
|
+
function isSharedBoundary(boundary) {
|
|
191
|
+
return sharedResourceScopes.has(boundary.scope);
|
|
192
|
+
}
|
|
193
|
+
function recordSharedBoundaries(entry, boundaries) {
|
|
194
|
+
return caseBoundaryRecords(entry).reduce(function addSharedBoundary(updatedBoundaries, boundary) {
|
|
195
|
+
if (!isSharedBoundary(boundary)) {
|
|
196
|
+
return updatedBoundaries;
|
|
197
|
+
}
|
|
198
|
+
const record = updatedBoundaries.get(boundary.key) ?? { boundary, work: [] };
|
|
199
|
+
return mapWith(updatedBoundaries, boundary.key, {
|
|
200
|
+
boundary,
|
|
201
|
+
work: [...record.work, entry.workId]
|
|
202
|
+
});
|
|
203
|
+
}, boundaries);
|
|
204
|
+
}
|
|
205
|
+
function sharedBoundaryWork(plan) {
|
|
206
|
+
let boundaries = new Map();
|
|
207
|
+
for (const entry of collectedRunCaseEntries(plan)) {
|
|
208
|
+
boundaries = recordSharedBoundaries(entry, boundaries);
|
|
209
|
+
}
|
|
210
|
+
return Array.from(boundaries.values(), function boundaryRecord(record) {
|
|
211
|
+
return { boundary: record.boundary, work: uniqueWork(record.work) };
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
function unitsByWork(units) {
|
|
215
|
+
return new Map(units.flatMap(function unitWorkEntries(unit) {
|
|
216
|
+
return unit.work.map(function unitWorkEntry(work) {
|
|
217
|
+
return [workIdentityKey(work), unit];
|
|
218
|
+
});
|
|
219
|
+
}));
|
|
220
|
+
}
|
|
221
|
+
function boundaryUnits(boundary, units) {
|
|
222
|
+
const unitsById = new Map(boundary.work.flatMap(function boundaryUnit(work) {
|
|
223
|
+
const unit = units.get(workIdentityKey(work));
|
|
224
|
+
return unit === undefined ? [] : [[stableJson(unit.id), unit]];
|
|
225
|
+
}));
|
|
226
|
+
return Array.from(unitsById.values());
|
|
227
|
+
}
|
|
228
|
+
function projectionConflicts(plan, units, workerCount) {
|
|
229
|
+
const indexedUnits = unitsByWork(units);
|
|
230
|
+
return sharedBoundaryWork(plan).flatMap(function boundaryConflict(record) {
|
|
231
|
+
const owners = boundaryUnits(record, indexedUnits);
|
|
232
|
+
const usesFreshWorker = owners.some(function unitUsesFreshWorker(unit) {
|
|
233
|
+
return unit.workerLifecycle === 'fresh-worker-per-unit';
|
|
234
|
+
});
|
|
235
|
+
const spansUnitsWithoutOneReusableLane = owners.length > 1 && (workerCount > 1 || usesFreshWorker);
|
|
236
|
+
const needsProjection = record.boundary.scope === 'per-run' || spansUnitsWithoutOneReusableLane;
|
|
237
|
+
if (!needsProjection || record.boundary.handleTransport === 'projected') {
|
|
238
|
+
return [];
|
|
239
|
+
}
|
|
240
|
+
return [{
|
|
241
|
+
boundaryKey: record.boundary.key,
|
|
242
|
+
kind: 'resource-projection-required',
|
|
243
|
+
resource: {
|
|
244
|
+
name: record.boundary.resourceName,
|
|
245
|
+
scope: record.boundary.scope
|
|
246
|
+
},
|
|
247
|
+
work: nonEmpty(record.work, 'Resource projection conflict requires work.')
|
|
248
|
+
}];
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
function lifecycleConflicts(units) {
|
|
252
|
+
const unitsByConstraint = new Map();
|
|
253
|
+
for (const unit of units) {
|
|
254
|
+
for (const constraint of hardConstraintKeys(unit.resourceConstraints)) {
|
|
255
|
+
const constrainedUnits = unitsByConstraint.get(constraint) ?? [];
|
|
256
|
+
constrainedUnits.push(unit);
|
|
257
|
+
unitsByConstraint.set(constraint, constrainedUnits);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return Array
|
|
261
|
+
.from(unitsByConstraint, function lifecycleConflict([constraint, constrainedUnits]) {
|
|
262
|
+
const lifecycleSet = new Set(constrainedUnits.map(function unitLifecycle(unit) {
|
|
263
|
+
return unit.workerLifecycle;
|
|
264
|
+
}));
|
|
265
|
+
const lifecycles = Array.from(lifecycleSet);
|
|
266
|
+
return lifecycles.length <= 1 ? [] : [{
|
|
267
|
+
constraint,
|
|
268
|
+
kind: 'worker-lifecycle',
|
|
269
|
+
lifecycles: nonEmpty(lifecycles, 'Worker lifecycle conflict requires lifecycles.'),
|
|
270
|
+
units: nonEmpty(constrainedUnits.map(function conflictingUnit(unit) {
|
|
271
|
+
return unit.id;
|
|
272
|
+
}), 'Worker lifecycle conflict requires units.')
|
|
273
|
+
}];
|
|
274
|
+
})
|
|
275
|
+
.flat();
|
|
276
|
+
}
|
|
277
|
+
function workerCapacityConflict(input) {
|
|
278
|
+
if (input.workerCount.resolved >= input.requiredLifecycleLanes) {
|
|
279
|
+
return [];
|
|
280
|
+
}
|
|
281
|
+
const lifecycleSet = new Set(input.units.map(function unitLifecycle(unit) {
|
|
282
|
+
return unit.workerLifecycle;
|
|
283
|
+
}));
|
|
284
|
+
const lifecycles = Array.from(lifecycleSet);
|
|
285
|
+
return [{
|
|
286
|
+
available: input.workerCount.resolved,
|
|
287
|
+
kind: 'worker-capacity',
|
|
288
|
+
lifecycles: nonEmpty(lifecycles, 'Worker capacity conflict requires lifecycles.'),
|
|
289
|
+
required: input.requiredLifecycleLanes
|
|
290
|
+
}];
|
|
291
|
+
}
|
|
292
|
+
function conflictKey(conflict) {
|
|
293
|
+
return `${conflict.kind}:${stableJson(conflict)}`;
|
|
294
|
+
}
|
|
295
|
+
function sortedConflicts(conflicts) {
|
|
296
|
+
return conflicts.toSorted(function compareConflicts(left, right) {
|
|
297
|
+
return conflictKey(left).localeCompare(conflictKey(right));
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
export function collectedPlanCompatibilityConflicts(plan) {
|
|
301
|
+
return sortedConflicts([...identityConflicts(plan), ...dependencyScopeConflicts(plan)]);
|
|
302
|
+
}
|
|
303
|
+
export function executionPlanCompatibilityConflicts(input) {
|
|
304
|
+
return sortedConflicts([
|
|
305
|
+
...collectedPlanCompatibilityConflicts(input.selectedPlan),
|
|
306
|
+
...projectionConflicts(input.selectedPlan, input.units, input.workerCount.resolved),
|
|
307
|
+
...lifecycleConflicts(input.units),
|
|
308
|
+
...workerCapacityConflict(input)
|
|
309
|
+
]);
|
|
310
|
+
}
|
|
311
|
+
function singleReuseLane(units, lanes) {
|
|
312
|
+
const lane = lanes[0];
|
|
313
|
+
const allUnitsReuseWorkers = units.every(function unitReusesWorker(unit) {
|
|
314
|
+
return unit.workerLifecycle === 'reuse';
|
|
315
|
+
});
|
|
316
|
+
return lanes.length === 1 && lane !== undefined && allUnitsReuseWorkers
|
|
317
|
+
? lane
|
|
318
|
+
: null;
|
|
319
|
+
}
|
|
320
|
+
function infrastructureOwner() {
|
|
321
|
+
return { id: 'resource-owner', kind: 'infrastructure-worker' };
|
|
322
|
+
}
|
|
323
|
+
function ownerPlacement(record, ownerUnits, reusableLane) {
|
|
324
|
+
if (record.boundary.scope === 'per-run') {
|
|
325
|
+
return reusableLane === null
|
|
326
|
+
? infrastructureOwner()
|
|
327
|
+
: { kind: 'executor-lane', lane: reusableLane.id };
|
|
328
|
+
}
|
|
329
|
+
const onlyUnit = ownerUnits[0];
|
|
330
|
+
if (ownerUnits.length === 1 && onlyUnit !== undefined) {
|
|
331
|
+
return { kind: 'work-unit', unit: onlyUnit.id };
|
|
332
|
+
}
|
|
333
|
+
return reusableLane === null
|
|
334
|
+
? infrastructureOwner()
|
|
335
|
+
: { kind: 'executor-lane', lane: reusableLane.id };
|
|
336
|
+
}
|
|
337
|
+
export function createResourceOwnershipPlan(input) {
|
|
338
|
+
const indexedUnits = unitsByWork(input.units);
|
|
339
|
+
const reusableLane = singleReuseLane(input.units, input.lanes);
|
|
340
|
+
const owners = sharedBoundaryWork(input.selectedPlan)
|
|
341
|
+
.map(function plannedOwner(record) {
|
|
342
|
+
const ownerUnits = boundaryUnits(record, indexedUnits);
|
|
343
|
+
return {
|
|
344
|
+
boundaryKey: record.boundary.key,
|
|
345
|
+
placement: ownerPlacement(record, ownerUnits, reusableLane),
|
|
346
|
+
resourceName: record.boundary.resourceName,
|
|
347
|
+
scope: record.boundary.scope,
|
|
348
|
+
work: nonEmpty(record.work, 'Resource owner requires work.')
|
|
349
|
+
};
|
|
350
|
+
})
|
|
351
|
+
.toSorted(function compareOwners(left, right) {
|
|
352
|
+
return left.boundaryKey.localeCompare(right.boundaryKey);
|
|
353
|
+
});
|
|
354
|
+
return { owners };
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=execution-plan-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-plan-resolution.js","sourceRoot":"","sources":["../../../../source/run/execution-plan-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,10 +15,20 @@ const permissionDiagnosticsCapabilities = {
|
|
|
15
15
|
function permissionDiagnosticsPhase(loadComplete) {
|
|
16
16
|
return loadComplete ? 'out-of-test' : 'load';
|
|
17
17
|
}
|
|
18
|
+
function permissionWasDropped(message) {
|
|
19
|
+
return typeof message === 'object' && message !== null && Reflect.get(message, 'drop') === true;
|
|
20
|
+
}
|
|
21
|
+
function ignorePermissionDropDiagnostics(recordDiagnostic) {
|
|
22
|
+
return function recordPermissionDenial(message) {
|
|
23
|
+
if (!permissionWasDropped(message)) {
|
|
24
|
+
recordDiagnostic(message);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
18
28
|
export function createPermissionDiagnosticsSubscriptions(activeCaseStorage, phase, recordError) {
|
|
19
29
|
return Object.entries(permissionDiagnosticsCapabilities).map(function subscribeToPermissionChannel([name, capability]) {
|
|
20
30
|
const channel = diagnosticsChannel.channel(name);
|
|
21
|
-
const listener = function recordDiagnostic(message) {
|
|
31
|
+
const listener = ignorePermissionDropDiagnostics(function recordDiagnostic(message) {
|
|
22
32
|
const activeCase = activeCaseStorage.getStore();
|
|
23
33
|
recordError(permissionDeniedRunnerErrorFromDiagnostic({
|
|
24
34
|
channel: name,
|
|
@@ -32,7 +42,7 @@ export function createPermissionDiagnosticsSubscriptions(activeCaseStorage, phas
|
|
|
32
42
|
hook: null,
|
|
33
43
|
phase: activeCase === undefined ? phase() : 'body'
|
|
34
44
|
}));
|
|
35
|
-
};
|
|
45
|
+
});
|
|
36
46
|
channel.subscribe(listener);
|
|
37
47
|
return {
|
|
38
48
|
unsubscribe() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission-denial-runtime-policy.js","sourceRoot":"","sources":["../../../../source/run/permission-denial-runtime-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAA4B,MAAM,uBAAuB,CAAC;AAClF,OAAO,EACH,yCAAyC,EAG5C,MAAM,yBAAyB,CAAC;AAkBjC,MAAM,iCAAiC,GAAqC;IACxE,6BAA6B,EAAE,eAAe;IAC9C,2BAA2B,EAAE,QAAQ;IACrC,0BAA0B,EAAE,SAAS;IACrC,iCAAiC,EAAE,WAAW;IAC9C,2BAA2B,EAAE,KAAK;IAClC,qCAAqC,EAAE,eAAe;IACtD,4BAA4B,EAAE,MAAM;IACpC,8BAA8B,EAAE,QAAQ;CAC3C,CAAC;AAEF,SAAS,0BAA0B,CAAC,YAAqB;IACrD,OAAO,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,wCAAwC,CACpD,iBAAiE,EACjE,KAA6C,EAC7C,WAAyC;IAEzC,OAAO,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,CAAC,SAAS,4BAA4B,CAC9F,CAAE,IAAI,EAAE,UAAU,CAAE;QAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,SAAS,gBAAgB,CAAC,OAAgB;
|
|
1
|
+
{"version":3,"file":"permission-denial-runtime-policy.js","sourceRoot":"","sources":["../../../../source/run/permission-denial-runtime-policy.ts"],"names":[],"mappings":"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"}
|
package/run/placement-trace.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import type { WorkId } from '../engine/identity.ts';
|
|
1
2
|
import type { NonEmptyReadonlyArray } from '../assertion-protocol/assertion-node-shape.ts';
|
|
2
3
|
import type { PlacementLane, WorkUnitId } from './run-types.ts';
|
|
3
4
|
import type { WarmLaneAffinityKeyKind } from './worker-pool-warm-lane-affinity.ts';
|
|
5
|
+
export type PlacementAttemptId = `attempt-${number}`;
|
|
6
|
+
export type PlacementWorkerId = `${number}:${number}`;
|
|
4
7
|
export type PlacementTrace = {
|
|
5
8
|
readonly entries: readonly PlacementTraceEntry[];
|
|
6
9
|
};
|
|
@@ -9,15 +12,72 @@ export type DynamicWorkUnitId = {
|
|
|
9
12
|
readonly parent: WorkUnitId;
|
|
10
13
|
};
|
|
11
14
|
export type TraceWorkUnitId = DynamicWorkUnitId | WorkUnitId;
|
|
15
|
+
export type PlacementAttemptReason = {
|
|
16
|
+
readonly kind: 'hedge';
|
|
17
|
+
readonly primaryAttempt: PlacementAttemptId;
|
|
18
|
+
} | {
|
|
19
|
+
readonly kind: 'initial';
|
|
20
|
+
} | {
|
|
21
|
+
readonly kind: 'recovery';
|
|
22
|
+
readonly previousAttempt: PlacementAttemptId;
|
|
23
|
+
};
|
|
24
|
+
type PlacementExecutionInterruptionCause = 'hard-timeout' | 'host-failure' | 'run-stopped';
|
|
25
|
+
type PlacementPolicyInterruptionCause = 'hedge-cancelled' | 'runtime-policy' | 'worker-crash';
|
|
26
|
+
export type PlacementAttemptInterruptionCause = PlacementExecutionInterruptionCause | PlacementPolicyInterruptionCause;
|
|
27
|
+
export type PlacementRecoveryDecision = {
|
|
28
|
+
readonly abandonedWork: NonEmptyReadonlyArray<WorkId>;
|
|
29
|
+
readonly kind: 'abandon';
|
|
30
|
+
} | {
|
|
31
|
+
readonly abandonedWork: NonEmptyReadonlyArray<WorkId>;
|
|
32
|
+
readonly kind: 'partial';
|
|
33
|
+
readonly retryWork: NonEmptyReadonlyArray<WorkId>;
|
|
34
|
+
} | {
|
|
35
|
+
readonly kind: 'retry';
|
|
36
|
+
readonly retryWork: NonEmptyReadonlyArray<WorkId>;
|
|
37
|
+
};
|
|
12
38
|
export type PlacementTraceEntry = {
|
|
13
|
-
readonly
|
|
39
|
+
readonly activeAttempt: PlacementAttemptId | null;
|
|
14
40
|
readonly kind: 'worker-crashed';
|
|
15
|
-
readonly
|
|
41
|
+
readonly lane: PlacementLane['id'];
|
|
42
|
+
readonly workerId: PlacementWorkerId | null;
|
|
43
|
+
} | {
|
|
44
|
+
readonly attempt: PlacementAttemptId;
|
|
45
|
+
readonly cause: PlacementAttemptInterruptionCause;
|
|
46
|
+
readonly decision: PlacementRecoveryDecision;
|
|
47
|
+
readonly kind: 'recovery-decided';
|
|
16
48
|
} | {
|
|
17
|
-
readonly
|
|
18
|
-
readonly
|
|
19
|
-
readonly kind: '
|
|
49
|
+
readonly attempt: PlacementAttemptId;
|
|
50
|
+
readonly cause: PlacementAttemptInterruptionCause;
|
|
51
|
+
readonly kind: 'attempt-interrupted';
|
|
52
|
+
} | {
|
|
53
|
+
readonly attempt: PlacementAttemptId;
|
|
54
|
+
readonly durationMicroseconds: number;
|
|
55
|
+
readonly kind: 'attempt-completed';
|
|
56
|
+
} | {
|
|
57
|
+
readonly attempt: PlacementAttemptId;
|
|
58
|
+
readonly kind: 'attempt-assigned';
|
|
59
|
+
readonly lane: PlacementLane['id'];
|
|
60
|
+
readonly reason: PlacementAttemptReason;
|
|
20
61
|
readonly unit: TraceWorkUnitId;
|
|
62
|
+
readonly work: NonEmptyReadonlyArray<WorkId>;
|
|
63
|
+
} | {
|
|
64
|
+
readonly attempt: PlacementAttemptId;
|
|
65
|
+
readonly kind: 'attempt-started';
|
|
66
|
+
readonly workerId: PlacementWorkerId;
|
|
67
|
+
} | {
|
|
68
|
+
readonly attempts: NonEmptyReadonlyArray<PlacementAttemptId>;
|
|
69
|
+
readonly envelopeId: string;
|
|
70
|
+
readonly kind: 'batch-completed' | 'batch-started';
|
|
71
|
+
readonly lane: PlacementLane['id'];
|
|
72
|
+
} | {
|
|
73
|
+
readonly authoritativeAttempt: PlacementAttemptId;
|
|
74
|
+
readonly conflictingAttempt: PlacementAttemptId;
|
|
75
|
+
readonly kind: 'hedge-conflict';
|
|
76
|
+
} | {
|
|
77
|
+
readonly authoritativeAttempt: PlacementAttemptId;
|
|
78
|
+
readonly discardedAttempt: PlacementAttemptId;
|
|
79
|
+
readonly kind: 'hedge-resolved';
|
|
80
|
+
readonly outcome: 'cancelled' | 'matched';
|
|
21
81
|
} | {
|
|
22
82
|
readonly baselineUnit: TraceWorkUnitId;
|
|
23
83
|
readonly candidateUnits: NonEmptyReadonlyArray<TraceWorkUnitId>;
|
|
@@ -30,41 +90,24 @@ export type PlacementTraceEntry = {
|
|
|
30
90
|
readonly children: NonEmptyReadonlyArray<DynamicWorkUnitId>;
|
|
31
91
|
readonly kind: 'unit-split';
|
|
32
92
|
readonly parent: WorkUnitId;
|
|
33
|
-
} | {
|
|
34
|
-
readonly durationMicroseconds: number;
|
|
35
|
-
readonly kind: 'unit-completed';
|
|
36
|
-
readonly unit: TraceWorkUnitId;
|
|
37
|
-
readonly workerId: string;
|
|
38
|
-
} | {
|
|
39
|
-
readonly envelopeId: string;
|
|
40
|
-
readonly kind: 'batch-completed';
|
|
41
|
-
readonly lane: PlacementLane['id'];
|
|
42
|
-
readonly units: NonEmptyReadonlyArray<TraceWorkUnitId>;
|
|
43
|
-
readonly workerId: string;
|
|
44
|
-
} | {
|
|
45
|
-
readonly envelopeId: string;
|
|
46
|
-
readonly kind: 'batch-started';
|
|
47
|
-
readonly lane: PlacementLane['id'];
|
|
48
|
-
readonly units: NonEmptyReadonlyArray<TraceWorkUnitId>;
|
|
49
|
-
readonly workerId: string;
|
|
50
|
-
} | {
|
|
51
|
-
readonly fromLane: PlacementLane['id'];
|
|
52
|
-
readonly kind: 'unit-reassigned';
|
|
53
|
-
readonly toLane: PlacementLane['id'];
|
|
54
|
-
readonly unit: TraceWorkUnitId;
|
|
55
|
-
} | {
|
|
56
|
-
readonly kind: 'hedged-duplicate-discarded';
|
|
57
|
-
readonly unit: TraceWorkUnitId;
|
|
58
|
-
readonly workerId: string;
|
|
59
|
-
} | {
|
|
60
|
-
readonly kind: 'hedged-duplicate-started';
|
|
61
|
-
readonly unit: TraceWorkUnitId;
|
|
62
|
-
readonly workerId: string;
|
|
63
|
-
} | {
|
|
64
|
-
readonly kind: 'unit-started';
|
|
65
|
-
readonly lane: PlacementLane['id'];
|
|
66
|
-
readonly unit: TraceWorkUnitId;
|
|
67
|
-
readonly workerId: string;
|
|
68
93
|
};
|
|
94
|
+
type PlacementAttemptLifecycleEntryKind = 'attempt-assigned' | 'attempt-completed' | 'attempt-interrupted';
|
|
95
|
+
type PlacementAttemptOutcomeEntryKind = 'attempt-started' | 'recovery-decided';
|
|
96
|
+
type PlacementAttemptEntryKind = PlacementAttemptLifecycleEntryKind | PlacementAttemptOutcomeEntryKind;
|
|
97
|
+
export type PlacementDecisionEntry = Exclude<PlacementTraceEntry, {
|
|
98
|
+
readonly kind: PlacementAttemptEntryKind;
|
|
99
|
+
}>;
|
|
100
|
+
export type PlacementTraceRecorder = {
|
|
101
|
+
readonly assignAttempt: (unit: TraceWorkUnitId, work: NonEmptyReadonlyArray<WorkId>, lane: PlacementLane['id'], reason: PlacementAttemptReason) => PlacementAttemptId;
|
|
102
|
+
readonly completeAttempt: (attempt: PlacementAttemptId, durationMicroseconds: number) => void;
|
|
103
|
+
readonly decideRecovery: (attempt: PlacementAttemptId, cause: PlacementAttemptInterruptionCause, decision: PlacementRecoveryDecision) => void;
|
|
104
|
+
readonly entries: () => readonly PlacementTraceEntry[];
|
|
105
|
+
readonly finish: () => PlacementTrace;
|
|
106
|
+
readonly interruptAttempt: (attempt: PlacementAttemptId, cause: PlacementAttemptInterruptionCause) => void;
|
|
107
|
+
readonly recordDecision: (entry: PlacementDecisionEntry) => void;
|
|
108
|
+
readonly startAttempt: (attempt: PlacementAttemptId, workerId: PlacementWorkerId) => void;
|
|
109
|
+
};
|
|
110
|
+
export declare function createPlacementTraceRecorder(): PlacementTraceRecorder;
|
|
69
111
|
export declare function traceUnitKey(unit: TraceWorkUnitId): string;
|
|
112
|
+
export {};
|
|
70
113
|
//# sourceMappingURL=placement-trace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placement-trace.d.ts","sourceRoot":"","sources":["../../../../source/run/placement-trace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAEnF,MAAM,MAAM,cAAc,GAAG;
|
|
1
|
+
{"version":3,"file":"placement-trace.d.ts","sourceRoot":"","sources":["../../../../source/run/placement-trace.ts"],"names":[],"mappings":"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"}
|