@elaraai/e3-types 1.0.77 → 1.0.79
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/dist/src/dataflow.d.ts +10 -6
- package/dist/src/dataflow.d.ts.map +1 -1
- package/dist/src/dataflow.js.map +1 -1
- package/dist/src/execution.d.ts +17 -0
- package/dist/src/execution.d.ts.map +1 -1
- package/dist/src/index.d.ts +4 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/runner.d.ts +35 -9
- package/dist/src/runner.d.ts.map +1 -1
- package/dist/src/runner.js +46 -13
- package/dist/src/runner.js.map +1 -1
- package/dist/src/runner.spec.js +50 -1
- package/dist/src/runner.spec.js.map +1 -1
- package/dist/src/stream.d.ts +97 -0
- package/dist/src/stream.d.ts.map +1 -0
- package/dist/src/stream.js +134 -0
- package/dist/src/stream.js.map +1 -0
- package/dist/src/stream.spec.d.ts +6 -0
- package/dist/src/stream.spec.d.ts.map +1 -0
- package/dist/src/stream.spec.js +60 -0
- package/dist/src/stream.spec.js.map +1 -0
- package/dist/src/task.d.ts +183 -17
- package/dist/src/task.d.ts.map +1 -1
- package/dist/src/task.js +302 -20
- package/dist/src/task.js.map +1 -1
- package/dist/src/task.spec.d.ts +6 -0
- package/dist/src/task.spec.d.ts.map +1 -0
- package/dist/src/task.spec.js +169 -0
- package/dist/src/task.spec.js.map +1 -0
- package/package.json +2 -2
- package/src/dataflow.ts +10 -6
- package/src/execution.ts +18 -0
- package/src/index.ts +21 -0
- package/src/runner.spec.ts +56 -1
- package/src/runner.ts +45 -13
- package/src/stream.spec.ts +88 -0
- package/src/stream.ts +170 -0
- package/src/task.spec.ts +208 -0
- package/src/task.ts +336 -21
package/dist/src/task.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* Input and output types are inferred from the package's structure at the
|
|
15
15
|
* specified paths - the task just references locations, not types.
|
|
16
16
|
*/
|
|
17
|
-
import { StructType, StringType, ArrayType, BlobType, BooleanType, IntegerType, OptionType, decodeBeast2For, encodeBeast2For, none } from '@elaraai/east';
|
|
17
|
+
import { StructType, StringType, ArrayType, BlobType, BooleanType, IntegerType, OptionType, decodeBeast2For, encodeBeast2For, none, variant } from '@elaraai/east';
|
|
18
18
|
import { TreePathType } from './structure.js';
|
|
19
19
|
import { RunnerType } from './runner.js';
|
|
20
20
|
/**
|
|
@@ -130,6 +130,13 @@ export const TASK_KIND_PARTITION = 'partition';
|
|
|
130
130
|
* capability. The spec rides {@link TaskObjectType}'s `metadata` slot as a
|
|
131
131
|
* beast2-encoded {@link StreamTaskMetadataType}. */
|
|
132
132
|
export const TASK_KIND_STREAM = 'stream';
|
|
133
|
+
/** Task kind of a merge unit — the runner's `merge` command over sorted
|
|
134
|
+
* partials of a partitioned task's keyed output (issue #770). The
|
|
135
|
+
* orchestrator writes one such task per partitioned task from the
|
|
136
|
+
* package's {@link PartitionTaskMetadataType} `mergeCommand`, and runs it
|
|
137
|
+
* as an ordinary content-addressed execution per group of partials. It
|
|
138
|
+
* carries no metadata. */
|
|
139
|
+
export const TASK_KIND_MERGE = 'merge';
|
|
133
140
|
/**
|
|
134
141
|
* Metadata of a {@link TASK_KIND_PARTITION} task.
|
|
135
142
|
*
|
|
@@ -160,17 +167,29 @@ export const PartitionTaskMetadataType = StructType({
|
|
|
160
167
|
* `encodeEastIR` bundle of the per-key merge `(Key, Value, Value) -> Value`
|
|
161
168
|
* for a Dict output; `none` otherwise.
|
|
162
169
|
*
|
|
163
|
-
* Its presence (or {@link mergeSets}) selects the
|
|
164
|
-
* partials
|
|
165
|
-
*
|
|
166
|
-
*
|
|
170
|
+
* Its presence (or {@link mergeSets}) selects the MERGE-TREE assembly:
|
|
171
|
+
* partials whose key ranges overlap are merged by the task's own runner, in
|
|
172
|
+
* a tree of merge executions ({@link mergeCommand}) folding equal keys with
|
|
173
|
+
* this function; disjoint partials are spliced; the orchestrator never
|
|
174
|
+
* decodes a partial. Appended after `targetPartitionBytes` (BEAST2 encodes
|
|
167
175
|
* struct fields positionally) with a dual decoder — see
|
|
168
176
|
* {@link decodePartitionTaskMetadata}.
|
|
169
177
|
*/
|
|
170
178
|
merge: OptionType(BlobType),
|
|
171
|
-
/** Whether a Set output assembles by
|
|
172
|
-
* {@link merge}, which needs no
|
|
179
|
+
/** Whether a Set output assembles by the merge tree, keeping one of equal
|
|
180
|
+
* elements (`--union`). The Set twin of {@link merge}, which needs no
|
|
181
|
+
* function. */
|
|
173
182
|
mergeSets: BooleanType,
|
|
183
|
+
/**
|
|
184
|
+
* `encodeEastIR` bundle of the merge command `(input_paths, output_path) ->
|
|
185
|
+
* argv` — `mergeCommandIr` over the task's runner, in `function` mode with
|
|
186
|
+
* {@link merge} and `union` mode with {@link mergeSets} — that the
|
|
187
|
+
* orchestrator's merge units execute; `none` in splice and combine modes.
|
|
188
|
+
* Built at export, so the merge unit task is a package object like any
|
|
189
|
+
* other and nothing is synthesized at run time. Appended LAST with a
|
|
190
|
+
* triple decoder — see {@link decodePartitionTaskMetadata}.
|
|
191
|
+
*/
|
|
192
|
+
mergeCommand: OptionType(BlobType),
|
|
174
193
|
});
|
|
175
194
|
/**
|
|
176
195
|
* The pre-`merge` partition metadata wire shape, kept only so
|
|
@@ -183,17 +202,32 @@ const PreMergePartitionTaskMetadataType = StructType({
|
|
|
183
202
|
combine: OptionType(BlobType),
|
|
184
203
|
targetPartitionBytes: IntegerType,
|
|
185
204
|
});
|
|
205
|
+
/**
|
|
206
|
+
* The v1.0.77 partition metadata wire shape — `merge` and `mergeSets` but no
|
|
207
|
+
* `mergeCommand` — kept only so {@link decodePartitionTaskMetadata} can read
|
|
208
|
+
* tasks exported by that SDK; their merge units cannot run.
|
|
209
|
+
*/
|
|
210
|
+
const PreMergeCommandPartitionTaskMetadataType = StructType({
|
|
211
|
+
partitions: IntegerType,
|
|
212
|
+
by: OptionType(BlobType),
|
|
213
|
+
combine: OptionType(BlobType),
|
|
214
|
+
targetPartitionBytes: IntegerType,
|
|
215
|
+
merge: OptionType(BlobType),
|
|
216
|
+
mergeSets: BooleanType,
|
|
217
|
+
});
|
|
186
218
|
/** Encode a {@link PartitionTaskMetadataType} value for `TaskObject.metadata`. */
|
|
187
219
|
export const encodePartitionTaskMetadata = encodeBeast2For(PartitionTaskMetadataType);
|
|
188
220
|
const decodeCurrentPartitionMetadata = decodeBeast2For(PartitionTaskMetadataType);
|
|
221
|
+
const decodePreMergeCommandPartitionMetadata = decodeBeast2For(PreMergeCommandPartitionTaskMetadataType);
|
|
189
222
|
const decodePreMergePartitionMetadata = decodeBeast2For(PreMergePartitionTaskMetadataType);
|
|
190
223
|
/**
|
|
191
224
|
* Decode a `TaskObject.metadata` blob of a {@link TASK_KIND_PARTITION} task,
|
|
192
|
-
* tolerating the
|
|
225
|
+
* tolerating the two older wire formats: the v1.0.77 shape without
|
|
226
|
+
* `mergeCommand`, and the pre-`merge` shape.
|
|
193
227
|
*
|
|
194
228
|
* @param data - the metadata blob
|
|
195
|
-
* @returns the decoded metadata, with `
|
|
196
|
-
*
|
|
229
|
+
* @returns the decoded metadata, with `mergeCommand` (and, for the oldest
|
|
230
|
+
* bytes, `merge`/`mergeSets`) defaulted off
|
|
197
231
|
*/
|
|
198
232
|
export function decodePartitionTaskMetadata(data) {
|
|
199
233
|
try {
|
|
@@ -201,32 +235,280 @@ export function decodePartitionTaskMetadata(data) {
|
|
|
201
235
|
}
|
|
202
236
|
catch (err) {
|
|
203
237
|
try {
|
|
204
|
-
return { ...
|
|
238
|
+
return { ...decodePreMergeCommandPartitionMetadata(data), mergeCommand: none };
|
|
205
239
|
}
|
|
206
240
|
catch {
|
|
207
|
-
|
|
241
|
+
try {
|
|
242
|
+
return { ...decodePreMergePartitionMetadata(data), merge: none, mergeSets: false, mergeCommand: none };
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
throw err; // no known shape — surface the current-format error
|
|
246
|
+
}
|
|
208
247
|
}
|
|
209
248
|
}
|
|
210
249
|
}
|
|
211
250
|
/**
|
|
212
251
|
* Metadata of a {@link TASK_KIND_STREAM} task.
|
|
213
252
|
*
|
|
214
|
-
* The task's wire `inputs` are laid out `[function_ir, stream?,
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
* the body's (Null) return
|
|
253
|
+
* The task's wire `inputs` are laid out `[function_ir, merge_ir?, stream?,
|
|
254
|
+
* ...inputs]` — `merge_ir` only in `function` merge mode; the compiled body
|
|
255
|
+
* takes one trailing `emit` parameter beyond the wire inputs, and the runner
|
|
256
|
+
* writes the `-o` file from the emit sink instead of the body's (Null) return
|
|
257
|
+
* value.
|
|
218
258
|
*/
|
|
219
259
|
export const StreamTaskMetadataType = StructType({
|
|
220
|
-
/** Whether
|
|
221
|
-
* no streamed input). */
|
|
260
|
+
/** Whether the first input after the IRs is the streamed input (producer
|
|
261
|
+
* tasks have no streamed input). */
|
|
222
262
|
stream: BooleanType,
|
|
223
263
|
/** The output collection kind the emit sink writes: `"array"`, `"set"`, or
|
|
224
264
|
* `"dict"` — element/key/value types come from the body IR's emit
|
|
225
265
|
* parameter. */
|
|
226
266
|
emit: StringType,
|
|
267
|
+
/**
|
|
268
|
+
* How the emit sink treats equal keys, a `StreamMergeMode`: `"none"` —
|
|
269
|
+
* a duplicate key is an error; `"function"` — wire input 1 is the merge IR
|
|
270
|
+
* `(K, V, V) -> V`, folding equal Dict keys; `"union"` — equal Set elements
|
|
271
|
+
* collapse. Appended LAST (BEAST2 encodes struct fields positionally) with a
|
|
272
|
+
* dual decoder — see {@link decodeStreamTaskMetadata}.
|
|
273
|
+
*/
|
|
274
|
+
merge: StringType,
|
|
275
|
+
});
|
|
276
|
+
/**
|
|
277
|
+
* The pre-`merge` stream metadata wire shape, kept only so
|
|
278
|
+
* {@link decodeStreamTaskMetadata} can read tasks exported before folding
|
|
279
|
+
* emit sinks existed.
|
|
280
|
+
*/
|
|
281
|
+
const PreMergeStreamTaskMetadataType = StructType({
|
|
282
|
+
stream: BooleanType,
|
|
283
|
+
emit: StringType,
|
|
227
284
|
});
|
|
228
285
|
/** Encode a {@link StreamTaskMetadataType} value for `TaskObject.metadata`. */
|
|
229
286
|
export const encodeStreamTaskMetadata = encodeBeast2For(StreamTaskMetadataType);
|
|
230
|
-
|
|
231
|
-
|
|
287
|
+
const decodeCurrentStreamMetadata = decodeBeast2For(StreamTaskMetadataType);
|
|
288
|
+
const decodePreMergeStreamMetadata = decodeBeast2For(PreMergeStreamTaskMetadataType);
|
|
289
|
+
/**
|
|
290
|
+
* Decode a `TaskObject.metadata` blob of a {@link TASK_KIND_STREAM} task,
|
|
291
|
+
* tolerating the pre-`merge` wire format (dual-decode migration).
|
|
292
|
+
*
|
|
293
|
+
* @param data - the metadata blob
|
|
294
|
+
* @returns the decoded metadata, with `merge` defaulted to `"none"` for older
|
|
295
|
+
* bytes
|
|
296
|
+
*/
|
|
297
|
+
export function decodeStreamTaskMetadata(data) {
|
|
298
|
+
try {
|
|
299
|
+
return decodeCurrentStreamMetadata(data);
|
|
300
|
+
}
|
|
301
|
+
catch (err) {
|
|
302
|
+
try {
|
|
303
|
+
return { ...decodePreMergeStreamMetadata(data), merge: 'none' };
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
throw err; // no known shape — surface the current-format error
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// =============================================================================
|
|
311
|
+
// Partition plan
|
|
312
|
+
// =============================================================================
|
|
313
|
+
/** A carve position: a segment index and an element offset within it. */
|
|
314
|
+
const SplitPointType = StructType({ seg: IntegerType, offset: IntegerType });
|
|
315
|
+
/**
|
|
316
|
+
* The plan of one merged component's fan-in (issue #770): the partials whose
|
|
317
|
+
* key ranges overlap, and the key ranges its merge units run over, as the
|
|
318
|
+
* hashes of the range blobs the units take as their input.
|
|
319
|
+
*
|
|
320
|
+
* @remarks
|
|
321
|
+
* The ranges are a pure function of the partials and the task's
|
|
322
|
+
* `targetPartitionBytes` — the boundary keys are fences of the largest
|
|
323
|
+
* partial — so a re-run whose partials are the same objects plans the same
|
|
324
|
+
* ranges; recording them lets it skip the planning probes, and because
|
|
325
|
+
* every unit's inputs are then the same objects, every merge unit
|
|
326
|
+
* cache-hits.
|
|
327
|
+
*/
|
|
328
|
+
export const MergeRangePlanType = StructType({
|
|
329
|
+
/** The component's partial hashes, in partition order. */
|
|
330
|
+
partials: ArrayType(StringType),
|
|
331
|
+
/** The hashes of the component's range blobs — `Struct{from: Option<K>,
|
|
332
|
+
* to: Option<K>}` over the output's key type — in key order; one open
|
|
333
|
+
* range for a component that merges whole. */
|
|
334
|
+
ranges: ArrayType(StringType),
|
|
335
|
+
});
|
|
336
|
+
/**
|
|
337
|
+
* The plan of a partitioned execution (issue #770): the partitioned inputs,
|
|
338
|
+
* where each partition starts in every one of them, the carved slices, and
|
|
339
|
+
* the ranged fan-in of each merged component.
|
|
340
|
+
*
|
|
341
|
+
* @remarks
|
|
342
|
+
* The step interpreter writes it to the object store as the run goes —
|
|
343
|
+
* after the map step with the carved slices, and again after the reduce
|
|
344
|
+
* step has planned each component's merge ranges — and points the `plan`
|
|
345
|
+
* sidecar of the execution's `(taskHash, inputsHash)` directory at it, so a
|
|
346
|
+
* re-plan or a resume that computes the same `partitions`/`boundaries`/
|
|
347
|
+
* `splits` reuses the slices instead of carving them again, partition by
|
|
348
|
+
* partition, and a component of the same partials reuses its ranges.
|
|
349
|
+
*/
|
|
350
|
+
export const PartitionPlanType = StructType({
|
|
351
|
+
/** Partitioned input hashes, wire order. */
|
|
352
|
+
partitions: ArrayType(StringType),
|
|
353
|
+
/** First segment index of each partition of the primary; boundaries[0] = 0. */
|
|
354
|
+
boundaries: ArrayType(IntegerType),
|
|
355
|
+
/** Per secondary (partitions[1..]): the split point of every partition plus the end; length boundaries.length + 1. */
|
|
356
|
+
splits: ArrayType(ArrayType(SplitPointType)),
|
|
357
|
+
/** slices[input][partition] object hashes; empty until carved. */
|
|
358
|
+
slices: ArrayType(ArrayType(StringType)),
|
|
359
|
+
/** The ranged fan-in of each merged component, once its ranges are
|
|
360
|
+
* planned. Appended LAST (BEAST2 encodes struct fields positionally) with
|
|
361
|
+
* a dual decoder — see {@link decodePartitionPlan}. */
|
|
362
|
+
merges: ArrayType(MergeRangePlanType),
|
|
363
|
+
});
|
|
364
|
+
/**
|
|
365
|
+
* The pre-`merges` plan wire shape, kept only so {@link decodePartitionPlan}
|
|
366
|
+
* can read plans a run recorded before the fan-in ran per key range.
|
|
367
|
+
*/
|
|
368
|
+
const PreMergesPartitionPlanType = StructType({
|
|
369
|
+
partitions: ArrayType(StringType),
|
|
370
|
+
boundaries: ArrayType(IntegerType),
|
|
371
|
+
splits: ArrayType(ArrayType(SplitPointType)),
|
|
372
|
+
slices: ArrayType(ArrayType(StringType)),
|
|
373
|
+
});
|
|
374
|
+
/** Encode a {@link PartitionPlanType} value for the object store. */
|
|
375
|
+
export const encodePartitionPlan = encodeBeast2For(PartitionPlanType);
|
|
376
|
+
const decodeCurrentPlan = decodeBeast2For(PartitionPlanType);
|
|
377
|
+
const decodePreMergesPlan = decodeBeast2For(PreMergesPartitionPlanType);
|
|
378
|
+
/**
|
|
379
|
+
* Decode a {@link PartitionPlanType} object, tolerating the pre-`merges`
|
|
380
|
+
* wire shape (dual-decode migration): an older plan decodes with no recorded
|
|
381
|
+
* merge ranges, so its partition slices are reused and its ranges planned.
|
|
382
|
+
*
|
|
383
|
+
* @param data - the plan object's bytes
|
|
384
|
+
* @returns the decoded plan
|
|
385
|
+
*/
|
|
386
|
+
export function decodePartitionPlan(data) {
|
|
387
|
+
try {
|
|
388
|
+
return decodeCurrentPlan(data);
|
|
389
|
+
}
|
|
390
|
+
catch (err) {
|
|
391
|
+
try {
|
|
392
|
+
return { ...decodePreMergesPlan(data), merges: [] };
|
|
393
|
+
}
|
|
394
|
+
catch {
|
|
395
|
+
throw err; // no known shape — surface the current-format error
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Extracts the shape a `by` projection reads — see {@link ProjectionShape} —
|
|
401
|
+
* or `null` for any other (unaccepted) shape.
|
|
402
|
+
*
|
|
403
|
+
* @param ir - the projection's function IR, `(Key) -> Projection`
|
|
404
|
+
* @returns the shape, or `null` when the body is not an accepted projection
|
|
405
|
+
*/
|
|
406
|
+
export function partitionProjectionShape(ir) {
|
|
407
|
+
const param = ir.value.parameters[0]?.value.name;
|
|
408
|
+
if (param === undefined)
|
|
409
|
+
return null;
|
|
410
|
+
// Chase wrappers to the expression the body evaluates to.
|
|
411
|
+
const unwrap = (node) => {
|
|
412
|
+
for (;;) {
|
|
413
|
+
if (node.type === 'Block') {
|
|
414
|
+
const statements = node.value.statements;
|
|
415
|
+
if (statements.length === 0)
|
|
416
|
+
return node;
|
|
417
|
+
node = statements[statements.length - 1];
|
|
418
|
+
}
|
|
419
|
+
else if (node.type === 'Return') {
|
|
420
|
+
node = node.value.value;
|
|
421
|
+
}
|
|
422
|
+
else if (node.type === 'As' || node.type === 'WrapRecursive' || node.type === 'UnwrapRecursive') {
|
|
423
|
+
node = node.value.value;
|
|
424
|
+
}
|
|
425
|
+
else {
|
|
426
|
+
return node;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
const isParam = (node) => node.type === 'Variable' && node.value.name === param;
|
|
431
|
+
const fieldOf = (node) => node.type === 'GetField' && isParam(unwrap(node.value.struct)) ? node.value.field : null;
|
|
432
|
+
// Walks a GetField chain down to the parameter: `key.a.b` → ['a', 'b'].
|
|
433
|
+
const pathOf = (node) => {
|
|
434
|
+
const path = [];
|
|
435
|
+
let cur = node;
|
|
436
|
+
while (cur.type === 'GetField') {
|
|
437
|
+
path.unshift(cur.value.field);
|
|
438
|
+
cur = unwrap(cur.value.struct);
|
|
439
|
+
}
|
|
440
|
+
return isParam(cur) && path.length > 0 ? path : null;
|
|
441
|
+
};
|
|
442
|
+
const body = unwrap(ir.value.body);
|
|
443
|
+
if (isParam(body))
|
|
444
|
+
return { kind: 'fields', names: [] };
|
|
445
|
+
const chain = pathOf(body);
|
|
446
|
+
if (chain !== null) {
|
|
447
|
+
// A one-step chain is a top-level field read — the `fields` family.
|
|
448
|
+
return chain.length === 1 ? { kind: 'fields', names: chain } : { kind: 'path', names: chain };
|
|
449
|
+
}
|
|
450
|
+
if (body.type === 'Struct') {
|
|
451
|
+
const fields = [];
|
|
452
|
+
for (const { value } of body.value.fields) {
|
|
453
|
+
const f = fieldOf(unwrap(value));
|
|
454
|
+
if (f === null)
|
|
455
|
+
return null;
|
|
456
|
+
fields.push(f);
|
|
457
|
+
}
|
|
458
|
+
return { kind: 'fields', names: fields };
|
|
459
|
+
}
|
|
460
|
+
return null;
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* The East type of a projected key — the type {@link projectKey} values have,
|
|
464
|
+
* and the one to build their comparator for: the key type itself for the
|
|
465
|
+
* identity, a struct of the named leading fields in declared order, or the
|
|
466
|
+
* type at the end of a nested first-field path.
|
|
467
|
+
*
|
|
468
|
+
* @param shape - the projection's shape
|
|
469
|
+
* @param keyType - the partitioned dataset's key type
|
|
470
|
+
* @returns the projected key type
|
|
471
|
+
* @throws {Error} When the shape reads a field the key type does not have.
|
|
472
|
+
*
|
|
473
|
+
* @example
|
|
474
|
+
* ```ts
|
|
475
|
+
* const cmp = compareFor(projectedKeyType(shape, keyTypeValue));
|
|
476
|
+
* cmp(projectKey(shape, a), projectKey(shape, b));
|
|
477
|
+
* ```
|
|
478
|
+
*/
|
|
479
|
+
export function projectedKeyType(shape, keyType) {
|
|
480
|
+
if (shape.names.length === 0)
|
|
481
|
+
return keyType;
|
|
482
|
+
const fieldType = (level, name) => {
|
|
483
|
+
const field = level.type === 'Struct' ? level.value.find((f) => f.name === name) : undefined;
|
|
484
|
+
if (field === undefined) {
|
|
485
|
+
throw new Error(`partition projection reads field '${name}' of a key level that has no such field`);
|
|
486
|
+
}
|
|
487
|
+
return field.type;
|
|
488
|
+
};
|
|
489
|
+
if (shape.kind === 'path')
|
|
490
|
+
return shape.names.reduce(fieldType, keyType);
|
|
491
|
+
return variant('Struct', shape.names.map((name) => ({ name, type: fieldType(keyType, name) })));
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Projects a partition key through a `by` shape, without compiling the
|
|
495
|
+
* projection: the key itself for the identity, a struct of the named leading
|
|
496
|
+
* fields built field by field in declared order, or the value at the end of a
|
|
497
|
+
* nested first-field path.
|
|
498
|
+
*
|
|
499
|
+
* @param shape - the projection's shape
|
|
500
|
+
* @param key - a key of the partitioned dataset
|
|
501
|
+
* @returns the projected key, a value of {@link projectedKeyType}
|
|
502
|
+
*/
|
|
503
|
+
export function projectKey(shape, key) {
|
|
504
|
+
if (shape.names.length === 0)
|
|
505
|
+
return key;
|
|
506
|
+
if (shape.kind === 'path') {
|
|
507
|
+
return shape.names.reduce((level, name) => level[name], key);
|
|
508
|
+
}
|
|
509
|
+
const projected = {};
|
|
510
|
+
for (const name of shape.names)
|
|
511
|
+
projected[name] = key[name];
|
|
512
|
+
return projected;
|
|
513
|
+
}
|
|
232
514
|
//# sourceMappingURL=task.js.map
|
package/dist/src/task.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/task.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAe,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/task.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.spec.d.ts","sourceRoot":"","sources":["../../src/task.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Partition and stream task wire helpers (issue #770): the partition
|
|
7
|
+
* metadata's merge fields and its triple decoder, the stream metadata's
|
|
8
|
+
* `merge` mode and its dual decoder, the partition plan round trip, and the
|
|
9
|
+
* `by` projection shapes the orchestrator evaluates by reading key fields
|
|
10
|
+
* instead of compiling the projection.
|
|
11
|
+
*/
|
|
12
|
+
import { describe, it } from 'node:test';
|
|
13
|
+
import assert from 'node:assert/strict';
|
|
14
|
+
import { ArrayType, BlobType, BooleanType, East, IntegerType, OptionType, StringType, StructType, compareFor, encodeBeast2For, encodeEastIR, isTypeValueEqual, none, some, toEastTypeValue, variant } from '@elaraai/east';
|
|
15
|
+
import { decodePartitionPlan, decodePartitionTaskMetadata, decodeStreamTaskMetadata, encodePartitionPlan, encodePartitionTaskMetadata, encodeStreamTaskMetadata, partitionProjectionShape, projectKey, projectedKeyType, } from './task.js';
|
|
16
|
+
import { mergeCommandIr } from './stream.js';
|
|
17
|
+
describe('PartitionTaskMetadataType', () => {
|
|
18
|
+
const mergeIr = encodeEastIR(East.function([IntegerType, StringType, StringType], StringType, (_$, _key, acc, value) => acc.concat(value)).toIR());
|
|
19
|
+
const mergeCommand = encodeEastIR(mergeCommandIr(variant('east_c', { platforms: ['east-c-std'] }), 'function'));
|
|
20
|
+
/** The metadata with every blob as a plain Uint8Array — the decoder hands
|
|
21
|
+
* back Buffers, whose prototype strict deep equality would reject. */
|
|
22
|
+
function plain(meta) {
|
|
23
|
+
const blob = (option) => option.type === 'some' ? some(new Uint8Array(option.value)) : none;
|
|
24
|
+
return { ...meta, by: blob(meta.by), combine: blob(meta.combine), merge: blob(meta.merge), mergeCommand: blob(meta.mergeCommand) };
|
|
25
|
+
}
|
|
26
|
+
it('round-trips the merge fields and the merge command', () => {
|
|
27
|
+
const meta = {
|
|
28
|
+
partitions: 1n, by: none, combine: none, targetPartitionBytes: 1024n,
|
|
29
|
+
merge: some(mergeIr), mergeSets: false, mergeCommand: some(mergeCommand),
|
|
30
|
+
};
|
|
31
|
+
assert.deepEqual(plain(decodePartitionTaskMetadata(encodePartitionTaskMetadata(meta))), meta);
|
|
32
|
+
});
|
|
33
|
+
it('decodes v1.0.77 metadata, exported before merge commands, with mergeCommand none', () => {
|
|
34
|
+
const shape = StructType({
|
|
35
|
+
partitions: IntegerType, by: OptionType(BlobType), combine: OptionType(BlobType), targetPartitionBytes: IntegerType,
|
|
36
|
+
merge: OptionType(BlobType), mergeSets: BooleanType,
|
|
37
|
+
});
|
|
38
|
+
const legacy = encodeBeast2For(shape)({ partitions: 2n, by: none, combine: none, targetPartitionBytes: 512n, merge: some(mergeIr), mergeSets: false });
|
|
39
|
+
assert.deepEqual(plain(decodePartitionTaskMetadata(legacy)), {
|
|
40
|
+
partitions: 2n, by: none, combine: none, targetPartitionBytes: 512n, merge: some(mergeIr), mergeSets: false, mergeCommand: none,
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
it('decodes metadata exported before merge assembly with every merge field off', () => {
|
|
44
|
+
const shape = StructType({ partitions: IntegerType, by: OptionType(BlobType), combine: OptionType(BlobType), targetPartitionBytes: IntegerType });
|
|
45
|
+
const legacy = encodeBeast2For(shape)({ partitions: 1n, by: none, combine: none, targetPartitionBytes: 256n });
|
|
46
|
+
assert.deepEqual(decodePartitionTaskMetadata(legacy), {
|
|
47
|
+
partitions: 1n, by: none, combine: none, targetPartitionBytes: 256n, merge: none, mergeSets: false, mergeCommand: none,
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
it('throws for bytes of no known metadata shape', () => {
|
|
51
|
+
assert.throws(() => decodePartitionTaskMetadata(encodeBeast2For(IntegerType)(7n)));
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('StreamTaskMetadataType', () => {
|
|
55
|
+
it('round-trips the merge mode', () => {
|
|
56
|
+
const meta = { stream: true, emit: 'dict', merge: 'function' };
|
|
57
|
+
assert.deepEqual(decodeStreamTaskMetadata(encodeStreamTaskMetadata(meta)), meta);
|
|
58
|
+
});
|
|
59
|
+
it('decodes metadata exported before merge modes as merge none', () => {
|
|
60
|
+
const legacy = encodeBeast2For(StructType({ stream: BooleanType, emit: StringType }))({ stream: false, emit: 'set' });
|
|
61
|
+
assert.deepEqual(decodeStreamTaskMetadata(legacy), { stream: false, emit: 'set', merge: 'none' });
|
|
62
|
+
});
|
|
63
|
+
it('throws for bytes of no known metadata shape', () => {
|
|
64
|
+
assert.throws(() => decodeStreamTaskMetadata(encodeBeast2For(IntegerType)(7n)));
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe('PartitionPlanType', () => {
|
|
68
|
+
it('round-trips a plan, before and after its slices are carved and its merge ranges planned', () => {
|
|
69
|
+
const plan = {
|
|
70
|
+
partitions: ['a'.repeat(64), 'b'.repeat(64)],
|
|
71
|
+
boundaries: [0n, 4n, 9n],
|
|
72
|
+
splits: [[{ seg: 0n, offset: 0n }, { seg: 3n, offset: 17n }, { seg: 8n, offset: 0n }, { seg: 12n, offset: 0n }]],
|
|
73
|
+
slices: [],
|
|
74
|
+
merges: [],
|
|
75
|
+
};
|
|
76
|
+
assert.deepEqual(decodePartitionPlan(encodePartitionPlan(plan)), plan);
|
|
77
|
+
const carved = { ...plan, slices: [['c'.repeat(64), 'd'.repeat(64), 'e'.repeat(64)], ['f'.repeat(64), '0'.repeat(64), '1'.repeat(64)]] };
|
|
78
|
+
assert.deepEqual(decodePartitionPlan(encodePartitionPlan(carved)), carved);
|
|
79
|
+
const merged = {
|
|
80
|
+
...carved,
|
|
81
|
+
merges: [{ partials: ['2'.repeat(64), '3'.repeat(64)], ranges: ['4'.repeat(64), '5'.repeat(64)] }],
|
|
82
|
+
};
|
|
83
|
+
assert.deepEqual(decodePartitionPlan(encodePartitionPlan(merged)), merged);
|
|
84
|
+
});
|
|
85
|
+
it('decodes a plan recorded before merge ranges existed, with none', () => {
|
|
86
|
+
// The pre-`merges` wire shape, encoded directly.
|
|
87
|
+
const PreMergesPlanType = StructType({
|
|
88
|
+
partitions: ArrayType(StringType),
|
|
89
|
+
boundaries: ArrayType(IntegerType),
|
|
90
|
+
splits: ArrayType(ArrayType(StructType({ seg: IntegerType, offset: IntegerType }))),
|
|
91
|
+
slices: ArrayType(ArrayType(StringType)),
|
|
92
|
+
});
|
|
93
|
+
const older = encodeBeast2For(PreMergesPlanType)({
|
|
94
|
+
partitions: ['a'.repeat(64)],
|
|
95
|
+
boundaries: [0n, 2n],
|
|
96
|
+
splits: [],
|
|
97
|
+
slices: [['b'.repeat(64), 'c'.repeat(64)]],
|
|
98
|
+
});
|
|
99
|
+
assert.deepEqual(decodePartitionPlan(older), {
|
|
100
|
+
partitions: ['a'.repeat(64)],
|
|
101
|
+
boundaries: [0n, 2n],
|
|
102
|
+
splits: [],
|
|
103
|
+
slices: [['b'.repeat(64), 'c'.repeat(64)]],
|
|
104
|
+
merges: [],
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
describe('partition projections', () => {
|
|
109
|
+
const AtType = StructType({ day: IntegerType, hour: IntegerType });
|
|
110
|
+
const KeyType = StructType({ region: StringType, at: AtType, sku: StringType });
|
|
111
|
+
const keyTypeValue = toEastTypeValue(KeyType);
|
|
112
|
+
const keys = [
|
|
113
|
+
{ region: 'eu', at: { day: 2n, hour: 7n }, sku: 'b' },
|
|
114
|
+
{ region: 'eu', at: { day: 2n, hour: 7n }, sku: 'a' },
|
|
115
|
+
{ region: 'eu', at: { day: 1n, hour: 9n }, sku: 'c' },
|
|
116
|
+
{ region: 'ap', at: { day: 3n, hour: 0n }, sku: 'a' },
|
|
117
|
+
];
|
|
118
|
+
/** A `by` projection over the key, compiled, and its shape. */
|
|
119
|
+
function projection(by) {
|
|
120
|
+
const bundle = East.function([KeyType], undefined, by).toIR();
|
|
121
|
+
return {
|
|
122
|
+
compiled: bundle.compile([]),
|
|
123
|
+
shape: partitionProjectionShape(bundle.ir),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/** Whether two comparisons agree in sign. */
|
|
127
|
+
const sameSign = (a, b) => Math.sign(a) === Math.sign(b);
|
|
128
|
+
it('reads the identity, a leading field, a struct literal of leading fields and a nested first-field path', () => {
|
|
129
|
+
assert.deepEqual(projection(($, key) => key).shape, { kind: 'fields', names: [] });
|
|
130
|
+
assert.deepEqual(projection(($, key) => key.region).shape, { kind: 'fields', names: ['region'] });
|
|
131
|
+
assert.deepEqual(projection(($, key) => ({ region: key.region, at: key.at })).shape, { kind: 'fields', names: ['region', 'at'] });
|
|
132
|
+
assert.deepEqual(projection(($, key) => key.at.day).shape, { kind: 'path', names: ['at', 'day'] });
|
|
133
|
+
});
|
|
134
|
+
it('returns null for a projection that computes', () => {
|
|
135
|
+
assert.equal(projection(($, key) => key.region.concat('-')).shape, null);
|
|
136
|
+
});
|
|
137
|
+
it('projects the identity to the key itself', () => {
|
|
138
|
+
const shape = { kind: 'fields', names: [] };
|
|
139
|
+
assert.ok(isTypeValueEqual(projectedKeyType(shape, keyTypeValue), keyTypeValue));
|
|
140
|
+
assert.equal(projectKey(shape, keys[0]), keys[0]);
|
|
141
|
+
});
|
|
142
|
+
it('projects a struct literal of leading fields exactly as the compiled projection does', () => {
|
|
143
|
+
const { compiled, shape } = projection(($, key) => ({ region: key.region, at: key.at }));
|
|
144
|
+
assert.ok(isTypeValueEqual(projectedKeyType(shape, keyTypeValue), toEastTypeValue(StructType({ region: StringType, at: AtType }))));
|
|
145
|
+
for (const key of keys)
|
|
146
|
+
assert.deepEqual(projectKey(shape, key), compiled(key));
|
|
147
|
+
});
|
|
148
|
+
it('projects a nested first-field path exactly as the compiled projection does', () => {
|
|
149
|
+
const { compiled, shape } = projection(($, key) => key.at.day);
|
|
150
|
+
assert.ok(isTypeValueEqual(projectedKeyType(shape, keyTypeValue), toEastTypeValue(IntegerType)));
|
|
151
|
+
for (const key of keys)
|
|
152
|
+
assert.equal(projectKey(shape, key), compiled(key));
|
|
153
|
+
});
|
|
154
|
+
it('orders a single leading field as the compiled projection does', () => {
|
|
155
|
+
const { compiled, shape } = projection(($, key) => key.region);
|
|
156
|
+
const cmp = compareFor(projectedKeyType(shape, keyTypeValue));
|
|
157
|
+
const cmpCompiled = compareFor(StringType);
|
|
158
|
+
for (const a of keys) {
|
|
159
|
+
for (const b of keys) {
|
|
160
|
+
assert.ok(sameSign(cmp(projectKey(shape, a), projectKey(shape, b)), cmpCompiled(compiled(a), compiled(b))));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
it('throws when a shape reads a field the key type does not have', () => {
|
|
165
|
+
assert.throws(() => projectedKeyType({ kind: 'fields', names: ['store'] }, keyTypeValue), /field 'store'/);
|
|
166
|
+
assert.throws(() => projectedKeyType({ kind: 'path', names: ['at', 'minute'] }, keyTypeValue), /field 'minute'/);
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=task.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.spec.js","sourceRoot":"","sources":["../../src/task.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elaraai/e3-types",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.79",
|
|
4
4
|
"description": "Shared type definitions for e3 (East Execution Engine)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"directory": "libs/e3/packages/e3-types"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
|
-
"@elaraai/east": "1.0.
|
|
21
|
+
"@elaraai/east": "1.0.79"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/node": "^22.0.0",
|