@sixb/pipeline-worker 0.1.7 → 0.1.9

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.
@@ -10,6 +10,7 @@ export declare function executeRunStep(input: {
10
10
  readonly signal: AbortSignal;
11
11
  readonly logSession: PipelineLogSession;
12
12
  readonly outputDataset: DatasetDefinition;
13
+ readonly expectedLatestVersionId: string | null;
13
14
  readonly resolvedInputs: readonly ResolvedStepInput[];
14
15
  }): Promise<{
15
16
  readonly version: DatasetVersion;
@@ -1 +1 @@
1
- {"version":3,"file":"execute-run-step.d.ts","sourceRoot":"","sources":["../src/execute-run-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,kBAAkB,EAClB,sBAAsB,EAEvB,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAE7D,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAErF,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;IACrC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAA;IACvC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAA;IACzC,QAAQ,CAAC,cAAc,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACtD,GAAG,OAAO,CAAC;IACV,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B,CAAC,CAqED"}
1
+ {"version":3,"file":"execute-run-step.d.ts","sourceRoot":"","sources":["../src/execute-run-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,kBAAkB,EAClB,sBAAsB,EAEvB,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAE7D,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAErF,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;IACrC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAA;IACvC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAA;IACzC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/C,QAAQ,CAAC,cAAc,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACtD,GAAG,OAAO,CAAC;IACV,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B,CAAC,CAsED"}
@@ -9,6 +9,7 @@ export declare function executeSqlStep(input: {
9
9
  readonly job: PipelineJob;
10
10
  readonly signal: AbortSignal;
11
11
  readonly outputDataset: DatasetDefinition;
12
+ readonly expectedLatestVersionId: string | null;
12
13
  readonly resolvedInputs: readonly ResolvedStepInput[];
13
14
  }): Promise<{
14
15
  readonly version: DatasetVersion;
@@ -1 +1 @@
1
- {"version":3,"file":"execute-sql-step.d.ts","sourceRoot":"","sources":["../src/execute-sql-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAGjB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAwCjE,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;IACrC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAA;IACzC,QAAQ,CAAC,cAAc,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACtD,GAAG,OAAO,CAAC;IACV,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAC,CA+ED"}
1
+ {"version":3,"file":"execute-sql-step.d.ts","sourceRoot":"","sources":["../src/execute-sql-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAGjB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAwCjE,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;IACrC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAA;IACzC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/C,QAAQ,CAAC,cAAc,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACtD,GAAG,OAAO,CAAC;IACV,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAC,CAgFD"}
package/dist/index.js CHANGED
@@ -320,6 +320,7 @@ async function executeRunStep(input) {
320
320
  await step.executor.handler(context);
321
321
  throwIfAborted(signal);
322
322
  const commit = await write.commit({
323
+ expectedLatestVersionId: input.expectedLatestVersionId,
323
324
  commitMessage: `pipeline ${pipeline.id} step ${step.id} run ${job.id}`
324
325
  });
325
326
  const { outcome, ...version } = commit;
@@ -393,15 +394,16 @@ async function executeSqlStep(input) {
393
394
  });
394
395
  throwIfAborted(signal);
395
396
  const commit = await runtime.lakeStorage.sql.execute({
396
- sources: Object.fromEntries(resolvedInputs.map((input2) => [
397
- input2.name,
397
+ sources: Object.fromEntries(resolvedInputs.map((input) => [
398
+ input.name,
398
399
  {
399
- dataset: input2.dataset,
400
- versionId: input2.version.versionId
400
+ dataset: input.dataset,
401
+ versionId: input.version.versionId
401
402
  }
402
403
  ])),
403
404
  sql: step.executor.sql,
404
405
  target: outputDataset,
406
+ expectedLatestVersionId: input.expectedLatestVersionId,
405
407
  mode: step.mode,
406
408
  producer: {
407
409
  kind: "pipeline",
@@ -430,13 +432,8 @@ async function runStep(input) {
430
432
  throwIfAborted(signal);
431
433
  let resolvedInputs;
432
434
  let outputDataset;
435
+ let expectedLatestVersionId;
433
436
  try {
434
- resolvedInputs = await resolveStepInputs({
435
- runtime,
436
- pipeline,
437
- step,
438
- pipelineRunId: job.id
439
- });
440
437
  outputDataset = requireRegisteredDataset({
441
438
  dataset: runtime.datasets.getById(step.output.id),
442
439
  pipelineId: pipeline.id,
@@ -446,6 +443,13 @@ async function runStep(input) {
446
443
  datasetId: step.output.id
447
444
  });
448
445
  await runtime.lakeStorage.createDataset(outputDataset);
446
+ expectedLatestVersionId = (await runtime.lakeStorage.getLatestVersion(outputDataset.id))?.versionId ?? null;
447
+ resolvedInputs = await resolveStepInputs({
448
+ runtime,
449
+ pipeline,
450
+ step,
451
+ pipelineRunId: job.id
452
+ });
449
453
  } catch (error) {
450
454
  if (statusForFailure(signal, error) === "failed") {
451
455
  throw createPipelineStepFailure({
@@ -481,6 +485,7 @@ async function runStep(input) {
481
485
  signal,
482
486
  logSession: input.logSession,
483
487
  outputDataset,
488
+ expectedLatestVersionId,
484
489
  resolvedInputs
485
490
  });
486
491
  committedVersion = execution.version;
@@ -739,16 +744,16 @@ class PipelineWorker extends QueueWorker {
739
744
  runtime: this.context,
740
745
  run,
741
746
  signal,
742
- onRunStarted: (run2) => emitPipelineRunStarted(this.host.events, run2, durableExecution.correlationId),
743
- onRunFinished: (run2) => emitPipelineRunFinished(this.host.events, run2, durableExecution.correlationId),
744
- onRunFailed: (error, run2, failure) => {
747
+ onRunStarted: (run) => emitPipelineRunStarted(this.host.events, run, durableExecution.correlationId),
748
+ onRunFinished: (run) => emitPipelineRunFinished(this.host.events, run, durableExecution.correlationId),
749
+ onRunFailed: (error, run, failure) => {
745
750
  reportRunFailure(this.host, error, {
746
751
  projectId: this.host.id,
747
752
  attempt: job.attempt,
748
753
  runKind: "pipeline",
749
754
  run: {
750
- runId: run2.id,
751
- pipelineId: run2.pipelineId
755
+ runId: run.id,
756
+ pipelineId: run.pipelineId
752
757
  },
753
758
  failure
754
759
  });
@@ -806,4 +811,4 @@ export {
806
811
  PipelineWorker
807
812
  };
808
813
 
809
- //# debugId=DD983D45D23B0E1464756E2164756E21
814
+ //# debugId=F41F62F6D8367E5E64756E2164756E21
package/dist/index.js.map CHANGED
@@ -6,12 +6,12 @@
6
6
  "import type { DomainEventLog } from \"@sixb/core\"\nimport type {\n PipelineRunRecord,\n PipelineRunStatus,\n PipelineStepRunRecord,\n} from \"@sixb/core/storage\"\nimport type { PipelineJob, PipelineStepLifecycleContext, PipelineStepRunResult } from \"./types\"\n\nconst SOURCE = \"SixbPipelineWorker\"\n\nexport async function emitPipelineRunStarted(\n events: DomainEventLog | undefined,\n run: Pick<PipelineRunRecord, \"id\" | \"pipelineId\" | \"startedAt\">,\n correlationId: string\n): Promise<void> {\n if (!run.startedAt) {\n throw new Error(`[SixbPipelineWorker] Pipeline run '${run.id}' started without a timestamp.`)\n }\n await events?.emit(\n {\n events: [\n {\n type: \"pipeline.run.started\",\n payload: {\n pipelineId: run.pipelineId,\n runId: run.id,\n startedAt: run.startedAt.toISOString(),\n },\n },\n ],\n correlationId,\n },\n { source: SOURCE }\n )\n}\n\nexport async function emitPipelineRunStepStarted(\n events: DomainEventLog | undefined,\n step: Pick<\n PipelineStepRunRecord,\n \"id\" | \"pipelineRunId\" | \"pipelineId\" | \"stepId\" | \"datasetId\" | \"startedAt\"\n >,\n context: PipelineStepLifecycleContext,\n correlationId: string\n): Promise<void> {\n await events?.emit(\n {\n events: [\n {\n type: \"pipeline.run.step.started\",\n payload: {\n pipelineId: step.pipelineId,\n runId: step.pipelineRunId,\n stepRunId: step.id,\n stepId: step.stepId,\n stepIndex: context.stepIndex,\n totalSteps: context.totalSteps,\n datasetId: step.datasetId,\n startedAt: step.startedAt.toISOString(),\n },\n },\n ],\n correlationId,\n },\n { source: SOURCE }\n )\n}\n\nexport async function emitPipelineRunStepFinished(\n events: DomainEventLog | undefined,\n step: Pick<\n PipelineStepRunRecord,\n | \"id\"\n | \"pipelineRunId\"\n | \"pipelineId\"\n | \"stepId\"\n | \"datasetId\"\n | \"status\"\n | \"finishedAt\"\n | \"output\"\n | \"rowsWritten\"\n | \"error\"\n >,\n context: PipelineStepLifecycleContext,\n correlationId: string\n): Promise<void> {\n await events?.emit(\n {\n events: [\n {\n type: \"pipeline.run.step.finished\",\n payload: {\n pipelineId: step.pipelineId,\n runId: step.pipelineRunId,\n stepRunId: step.id,\n stepId: step.stepId,\n stepIndex: context.stepIndex,\n totalSteps: context.totalSteps,\n datasetId: step.datasetId,\n status: requireTerminalStatus(step.status, `Pipeline step run '${step.id}'`),\n finishedAt: requireFinishedAt(step.id, step.finishedAt).toISOString(),\n ...(step.output ? { versionId: step.output.versionId } : {}),\n ...(step.rowsWritten !== undefined ? { rowsWritten: step.rowsWritten } : {}),\n ...(step.error ? { error: step.error } : {}),\n },\n },\n ],\n correlationId,\n },\n { source: SOURCE }\n )\n}\n\nexport async function emitDatasetVersionCommitted(\n events: DomainEventLog | undefined,\n job: PipelineJob,\n step: PipelineStepRunResult,\n correlationId: string\n): Promise<void> {\n if (!step.versionCreated) return\n\n // Emit step outputs immediately so dataset event schedules can react before later steps finish.\n await events?.emit(\n {\n events: [\n {\n type: \"dataset.version.committed\" as const,\n payload: {\n datasetId: step.version.datasetId,\n versionId: step.version.versionId,\n createdAt: step.version.createdAt.toISOString(),\n producer: {\n kind: \"pipeline\" as const,\n id: job.pipelineId,\n runId: job.id,\n stepId: step.run.stepId,\n },\n },\n },\n ],\n correlationId,\n },\n { source: SOURCE }\n )\n}\n\nexport async function emitPipelineRunFinished(\n events: DomainEventLog | undefined,\n run: Pick<PipelineRunRecord, \"id\" | \"pipelineId\" | \"status\" | \"output\" | \"error\">,\n correlationId: string\n): Promise<void> {\n await events?.emit(\n {\n events: [{ type: \"pipeline.run.finished\", payload: buildPipelineRunFinishedPayload(run) }],\n correlationId,\n },\n { source: SOURCE }\n )\n}\n\nfunction buildPipelineRunFinishedPayload(\n run: Pick<PipelineRunRecord, \"id\" | \"pipelineId\" | \"status\" | \"output\" | \"error\">\n) {\n return {\n pipelineId: run.pipelineId,\n runId: run.id,\n status: requireTerminalStatus(run.status, `Pipeline run '${run.id}'`),\n ...(run.output\n ? {\n datasetId: run.output.datasetId,\n versionId: run.output.versionId,\n }\n : {}),\n ...(run.error ? { error: run.error } : {}),\n }\n}\n\nfunction requireFinishedAt(stepRunId: string, finishedAt: Date | undefined): Date {\n if (finishedAt) {\n return finishedAt\n }\n\n throw new Error(`[SixbPipelineWorker] Pipeline step run '${stepRunId}' has no finishedAt.`)\n}\n\nfunction requireTerminalStatus(\n status: PipelineRunStatus,\n context: string\n): Exclude<PipelineRunStatus, \"queued\" | \"running\"> {\n if (status === \"queued\" || status === \"running\") {\n throw new Error(`[SixbPipelineWorker] ${context} is still running.`)\n }\n\n return status\n}\n",
7
7
  "import { captureSixbFailure } from \"@sixb/core/internal/errors\"\nimport { resolveLoggingService } from \"@sixb/core/internal/logging\"\nimport type { DatasetVersion } from \"@sixb/core/lake-storage\"\nimport { PIPELINE_RUN_FAILURE_CODES, type PipelineRunRecord } from \"@sixb/core/storage\"\nimport {\n createPipelineBookkeepingError,\n requireFinishedAt,\n requirePipeline,\n statusForFailure,\n throwIfAborted,\n unwrapPipelineStepFailure,\n} from \"./errors\"\nimport { runStep } from \"./run-step\"\nimport type {\n PipelineRunFinishedHandler,\n PipelineRunResult,\n PipelineStepRunResult,\n RunPipelineJobInput,\n} from \"./types\"\n\nexport class PipelineRunAlreadyStartedError extends Error {\n override readonly name = \"PipelineRunAlreadyStartedError\"\n\n constructor(readonly run: PipelineRunRecord) {\n super(`[SixbPipelineWorker] Pipeline run '${run.id}' has already started.`)\n }\n}\n\nexport async function runPipelineJob(input: RunPipelineJobInput): Promise<PipelineRunResult> {\n const { runtime, run: durableRun } = input\n const job = { id: durableRun.id, pipelineId: durableRun.pipelineId }\n const signal = input.signal ?? new AbortController().signal\n if (durableRun.projectId !== runtime.id) {\n throw new Error(\n `[SixbPipelineWorker] Pipeline run '${durableRun.id}' belongs to project '${durableRun.projectId}', not '${runtime.id}'.`\n )\n }\n const logSession = resolveLoggingService(runtime.id, runtime.logging).startExecution({\n kind: \"pipeline\",\n id: job.id,\n })\n const steps: PipelineStepRunResult[] = []\n let startedRun: PipelineRunRecord | undefined\n let finalVersion: DatasetVersion | undefined\n let finished = false\n\n throwIfAborted(signal)\n\n try {\n try {\n startedRun = await runtime.pipelineRunsStorage.start({\n projectId: runtime.id,\n id: job.id,\n })\n } catch (error) {\n const existing = await runtime.pipelineRunsStorage.getById({\n projectId: runtime.id,\n id: job.id,\n })\n if (\n existing?.pipelineId === durableRun.pipelineId &&\n existing.executionId === durableRun.executionId\n ) {\n throw new PipelineRunAlreadyStartedError(existing)\n }\n throw error\n }\n await input.onRunStarted?.(startedRun)\n\n const pipeline = requirePipeline(runtime.pipelines.getById(job.pipelineId), job)\n\n for (const [stepIndex, node] of pipeline.graph.nodes.entries()) {\n const stepResult = await runStep({\n runtime,\n pipeline,\n step: node.step,\n stepIndex,\n job,\n signal,\n logSession,\n onStepStarted: input.onStepStarted,\n onStepFinished: input.onStepFinished,\n })\n\n steps.push(stepResult)\n finalVersion = stepResult.version\n // This is the durability boundary for per-step output events.\n await input.onStepCommitted?.(stepResult)\n }\n\n let run: PipelineRunRecord\n try {\n run = await runtime.pipelineRunsStorage.finish({\n projectId: runtime.id,\n id: job.id,\n status: \"succeeded\",\n output: finalVersion\n ? {\n datasetId: finalVersion.datasetId,\n versionId: finalVersion.versionId,\n }\n : undefined,\n })\n } catch (error) {\n if (finalVersion) {\n throw createPipelineBookkeepingError({\n pipelineId: pipeline.id,\n runId: job.id,\n version: finalVersion,\n cause: error,\n })\n }\n throw error\n }\n const finishedRun = {\n ...run,\n finishedAt: requireFinishedAt({\n pipelineId: pipeline.id,\n runId: job.id,\n finishedAt: run.finishedAt,\n }),\n }\n\n finished = true\n await notifyRunFinished(input.onRunFinished, finishedRun)\n return {\n run: finishedRun,\n steps,\n version: finalVersion,\n }\n } catch (error) {\n const reportedError = unwrapPipelineStepFailure(error)\n if (startedRun && !finished) {\n const status = statusForFailure(signal, error)\n try {\n const failure = captureSixbFailure(error, {\n allowedCodes: PIPELINE_RUN_FAILURE_CODES,\n defaultCode: status === \"cancelled\" ? \"runtime.cancelled\" : \"internal.unexpected\",\n details: { pipelineId: durableRun.pipelineId, runId: job.id },\n })\n const run = await runtime.pipelineRunsStorage.finish({\n projectId: runtime.id,\n id: job.id,\n status,\n error: failure,\n })\n if (status === \"failed\" && run.status === \"failed\") {\n input.onRunFailed?.(reportedError, run, failure)\n }\n await notifyRunFinished(input.onRunFinished, run)\n } catch {\n // The run did not transition to the requested terminal status.\n }\n }\n\n throw reportedError\n } finally {\n await logSession.flush()\n }\n}\n\nasync function notifyRunFinished(\n handler: PipelineRunFinishedHandler | undefined,\n run: PipelineRunRecord\n): Promise<void> {\n try {\n await handler?.(run)\n } catch (error) {\n // The built-in event log reports lost batches itself. Anything reaching here is a broken\n // invariant in a custom lifecycle handler and must not change an already durable outcome.\n console.error(\"[SixbPipelineWorker] Pipeline run lifecycle handler failed:\", error)\n }\n}\n",
8
8
  "import type { DatasetDefinition, PipelineDefinition } from \"@sixb/core\"\nimport { createSixbError, isSixbError, summarizeErrorMessage } from \"@sixb/core/internal/errors\"\nimport type { DatasetVersion } from \"@sixb/core/lake-storage\"\nimport type { PipelineRunStatus } from \"@sixb/core/storage\"\nimport type { PipelineJob } from \"./types\"\n\nexport function throwIfAborted(signal: AbortSignal): void {\n if (signal.aborted) {\n throw createAbortError()\n }\n}\n\nexport function statusForFailure(\n signal: AbortSignal,\n error: unknown\n): Extract<PipelineRunStatus, \"failed\" | \"cancelled\"> {\n return signal.aborted || isAbortError(error) ? \"cancelled\" : \"failed\"\n}\n\nexport function requireFinishedAt(input: {\n readonly pipelineId: string\n readonly runId: string\n readonly finishedAt: Date | undefined\n}): Date {\n if (input.finishedAt) {\n return input.finishedAt\n }\n\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline run '${input.runId}' finished without a finishedAt timestamp.`,\n { details: { pipelineId: input.pipelineId, runId: input.runId } }\n )\n}\n\nexport function createStepBookkeepingError(options: {\n readonly pipelineId: string\n readonly pipelineRunId: string\n readonly stepId: string\n readonly stepRunId: string\n readonly version: DatasetVersion\n readonly cause: unknown\n}): Error {\n // The dataset version is already durable; retrying the whole pipeline could duplicate appends.\n return createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline '${options.pipelineId}' step '${options.stepId}' committed dataset version '${options.version.versionId}', but failed to finalize step run '${options.stepRunId}'. The dataset commit may already have succeeded and the step run record may need repair.`,\n {\n cause: options.cause,\n details: {\n pipelineId: options.pipelineId,\n pipelineRunId: options.pipelineRunId,\n stepId: options.stepId,\n stepRunId: options.stepRunId,\n datasetId: options.version.datasetId,\n versionId: options.version.versionId,\n },\n }\n )\n}\n\nexport function createPipelineStepFailure(options: {\n readonly pipelineId: string\n readonly pipelineRunId: string\n readonly stepId: string\n readonly stepRunId?: string\n readonly cause: unknown\n}) {\n return createSixbError(\n \"pipeline.step_failed\",\n summarizeErrorMessage(options.cause, \"Pipeline step execution failed.\"),\n {\n cause: options.cause,\n details: {\n pipelineId: options.pipelineId,\n pipelineRunId: options.pipelineRunId,\n stepId: options.stepId,\n ...(options.stepRunId ? { stepRunId: options.stepRunId } : {}),\n },\n }\n )\n}\n\nexport function unwrapPipelineStepFailure(error: unknown): unknown {\n return isSixbError(error) && error.code === \"pipeline.step_failed\" && error.cause !== undefined\n ? error.cause\n : error\n}\n\nexport function createPipelineBookkeepingError(options: {\n readonly pipelineId: string\n readonly runId: string\n readonly version: DatasetVersion\n readonly cause: unknown\n}): Error {\n return createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline '${options.pipelineId}' committed final dataset version '${options.version.versionId}', but failed to finalize pipeline run '${options.runId}'. The dataset commit may already have succeeded and the pipeline run record may need repair.`,\n {\n cause: options.cause,\n details: {\n pipelineId: options.pipelineId,\n runId: options.runId,\n datasetId: options.version.datasetId,\n versionId: options.version.versionId,\n },\n }\n )\n}\n\nexport function requirePipeline(\n pipeline: PipelineDefinition | null,\n job: PipelineJob\n): PipelineDefinition {\n if (!pipeline) {\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Unknown pipeline '${job.pipelineId}'.`,\n { details: { pipelineId: job.pipelineId, runId: job.id } }\n )\n }\n\n return pipeline\n}\n\nexport function requireRegisteredDataset(options: {\n readonly dataset: DatasetDefinition | null\n readonly pipelineId: string\n readonly pipelineRunId: string\n readonly stepId: string\n readonly role: \"input\" | \"output\"\n readonly name?: string\n readonly datasetId: string\n}): DatasetDefinition {\n if (options.dataset) {\n return options.dataset\n }\n\n const namedRole = options.role === \"input\" ? `input '${options.name ?? \"unknown\"}'` : \"output\"\n\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline '${options.pipelineId}' step '${options.stepId}' ${namedRole} references unknown dataset '${options.datasetId}'.`,\n {\n details: {\n pipelineId: options.pipelineId,\n pipelineRunId: options.pipelineRunId,\n stepId: options.stepId,\n datasetId: options.datasetId,\n },\n }\n )\n}\n\nfunction createAbortError(): Error {\n const error = new Error(\"Worker runtime aborted.\")\n error.name = \"AbortError\"\n return error\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\"\n}\n",
9
- "import type { DatasetDefinition, PipelineDefinition, PipelineStepDefinition } from \"@sixb/core\"\nimport { captureSixbFailure } from \"@sixb/core/internal/errors\"\nimport type { DatasetVersion } from \"@sixb/core/lake-storage\"\nimport { PIPELINE_RUN_FAILURE_CODES, type PipelineStepRunRecord } from \"@sixb/core/storage\"\nimport {\n createPipelineStepFailure,\n createStepBookkeepingError,\n requireRegisteredDataset,\n statusForFailure,\n throwIfAborted,\n} from \"./errors\"\nimport { executeRunStep } from \"./execute-run-step\"\nimport { executeSqlStep } from \"./execute-sql-step\"\nimport { type ResolvedStepInput, resolveStepInputs } from \"./step-inputs\"\nimport type {\n PipelineJob,\n PipelineLogSession,\n PipelineStepFinishedHandler,\n PipelineStepRunResult,\n PipelineStepStartedHandler,\n PipelineWorkerContext,\n} from \"./types\"\n\ntype StepExecutionResult = {\n readonly version: DatasetVersion\n readonly versionCreated: boolean\n readonly rowsWritten?: number\n}\n\nexport async function runStep(input: {\n readonly runtime: PipelineWorkerContext\n readonly pipeline: PipelineDefinition\n readonly step: PipelineStepDefinition\n readonly stepIndex: number\n readonly job: PipelineJob\n readonly signal: AbortSignal\n readonly logSession: PipelineLogSession\n readonly onStepStarted?: PipelineStepStartedHandler\n readonly onStepFinished?: PipelineStepFinishedHandler\n}): Promise<PipelineStepRunResult> {\n const { runtime, pipeline, step, stepIndex, job, signal } = input\n const lifecycleContext = {\n stepIndex,\n totalSteps: pipeline.graph.nodes.length,\n }\n\n throwIfAborted(signal)\n let resolvedInputs: readonly ResolvedStepInput[]\n let outputDataset: DatasetDefinition\n try {\n resolvedInputs = await resolveStepInputs({\n runtime,\n pipeline,\n step,\n pipelineRunId: job.id,\n })\n outputDataset = requireRegisteredDataset({\n dataset: runtime.datasets.getById(step.output.id),\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n role: \"output\",\n datasetId: step.output.id,\n })\n\n await runtime.lakeStorage.createDataset(outputDataset)\n } catch (error) {\n if (statusForFailure(signal, error) === \"failed\") {\n throw createPipelineStepFailure({\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n cause: error,\n })\n }\n throw error\n }\n const inputRefs = resolvedInputs.map((resolved) => resolved.ref)\n\n const stepRunId = `${job.id}:step:${stepIndex + 1}:${step.id}`\n const startedStepRun = await runtime.pipelineRunsStorage.startStep({\n projectId: runtime.id,\n id: stepRunId,\n pipelineRunId: job.id,\n pipelineId: pipeline.id,\n stepId: step.id,\n datasetId: outputDataset.id,\n mode: step.mode,\n inputs: inputRefs,\n })\n await input.onStepStarted?.(startedStepRun, lifecycleContext)\n\n let committedVersion: DatasetVersion | undefined\n let rowsWritten: number | undefined\n\n try {\n const execution = await executeStep({\n runtime,\n pipeline,\n step,\n job,\n signal,\n logSession: input.logSession,\n outputDataset,\n resolvedInputs,\n })\n committedVersion = execution.version\n rowsWritten = execution.rowsWritten\n\n let stepRun: PipelineStepRunRecord\n try {\n stepRun = await runtime.pipelineRunsStorage.finishStep({\n projectId: runtime.id,\n id: stepRunId,\n status: \"succeeded\",\n output: {\n datasetId: committedVersion.datasetId,\n versionId: committedVersion.versionId,\n },\n rowsWritten,\n })\n } catch (error) {\n throw createStepBookkeepingError({\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n stepRunId,\n version: committedVersion,\n cause: error,\n })\n }\n await input.onStepFinished?.(stepRun, lifecycleContext)\n\n return {\n run: stepRun,\n version: committedVersion,\n versionCreated: execution.versionCreated,\n }\n } catch (error) {\n if (!committedVersion) {\n const status = statusForFailure(signal, error)\n const failureError =\n status === \"failed\"\n ? createPipelineStepFailure({\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n stepRunId,\n cause: error,\n })\n : error\n const failedStepRun = await runtime.pipelineRunsStorage\n .finishStep({\n projectId: runtime.id,\n id: stepRunId,\n status,\n rowsWritten,\n error: captureSixbFailure(failureError, {\n allowedCodes: PIPELINE_RUN_FAILURE_CODES,\n defaultCode: status === \"cancelled\" ? \"runtime.cancelled\" : \"internal.unexpected\",\n details: {\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n stepRunId,\n },\n }),\n })\n .catch(() => null)\n\n if (failedStepRun) {\n await input.onStepFinished?.(failedStepRun, lifecycleContext)\n }\n\n throw failureError\n }\n\n throw error\n }\n}\n\nasync function executeStep(input: {\n readonly runtime: PipelineWorkerContext\n readonly pipeline: PipelineDefinition\n readonly step: PipelineStepDefinition\n readonly job: PipelineJob\n readonly signal: AbortSignal\n readonly logSession: PipelineLogSession\n readonly outputDataset: DatasetDefinition\n readonly resolvedInputs: readonly ResolvedStepInput[]\n}): Promise<StepExecutionResult> {\n switch (input.step.executor.kind) {\n case \"run\":\n return executeRunStep(input)\n case \"sql\":\n return executeSqlStep(input)\n }\n}\n",
10
- "import type {\n DatasetDefinition,\n DatasetRow,\n PipelineDefinition,\n PipelineStepDefinition,\n PipelineStepRunContext,\n} from \"@sixb/core\"\nimport { createSixbError } from \"@sixb/core/internal/errors\"\nimport type { DatasetVersion } from \"@sixb/core/lake-storage\"\nimport { throwIfAborted } from \"./errors\"\nimport { createStepInputs, type ResolvedStepInput } from \"./step-inputs\"\nimport type { PipelineJob, PipelineLogSession, PipelineWorkerContext } from \"./types\"\n\nexport async function executeRunStep(input: {\n readonly runtime: PipelineWorkerContext\n readonly pipeline: PipelineDefinition\n readonly step: PipelineStepDefinition\n readonly job: PipelineJob\n readonly signal: AbortSignal\n readonly logSession: PipelineLogSession\n readonly outputDataset: DatasetDefinition\n readonly resolvedInputs: readonly ResolvedStepInput[]\n}): Promise<{\n readonly version: DatasetVersion\n readonly versionCreated: boolean\n readonly rowsWritten: number\n}> {\n const { runtime, pipeline, step, job, signal, outputDataset, resolvedInputs } = input\n\n if (step.executor.kind !== \"run\") {\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline '${pipeline.id}' step '${step.id}' uses SQL execution, which is not supported by the run step executor.`,\n {\n details: {\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n datasetId: outputDataset.id,\n },\n }\n )\n }\n\n const logger = input.logSession.withContext({ stepId: step.id })\n let rowsWritten = 0\n const write = await runtime.lakeStorage.beginWrite({\n dataset: outputDataset,\n mode: step.mode,\n inputs: resolvedInputs.map((resolved) => resolved.ref),\n producer: {\n kind: \"pipeline\",\n id: pipeline.id,\n runId: job.id,\n stepId: step.id,\n },\n })\n\n try {\n const context: PipelineStepRunContext = {\n projectId: runtime.id,\n pipelineId: pipeline.id,\n stepId: step.id,\n runId: job.id,\n signal,\n logger,\n inputs: createStepInputs(runtime.lakeStorage, resolvedInputs),\n output: {\n async writeRows(rows) {\n await write.writeRows(\n countRowsWritten(rows, signal, () => {\n rowsWritten += 1\n })\n )\n },\n },\n }\n\n await step.executor.handler(context)\n throwIfAborted(signal)\n\n const commit = await write.commit({\n commitMessage: `pipeline ${pipeline.id} step ${step.id} run ${job.id}`,\n })\n const { outcome, ...version } = commit\n\n return {\n version,\n versionCreated: outcome === \"created\",\n rowsWritten,\n }\n } catch (error) {\n await write.abort().catch(() => {})\n throw error\n }\n}\n\nasync function* countRowsWritten(\n rows: Iterable<DatasetRow> | AsyncIterable<DatasetRow>,\n signal: AbortSignal,\n onWritten: () => void\n): AsyncIterable<DatasetRow> {\n for await (const row of rows) {\n throwIfAborted(signal)\n yield row\n onWritten()\n }\n}\n",
9
+ "import type { DatasetDefinition, PipelineDefinition, PipelineStepDefinition } from \"@sixb/core\"\nimport { captureSixbFailure } from \"@sixb/core/internal/errors\"\nimport type { DatasetVersion } from \"@sixb/core/lake-storage\"\nimport { PIPELINE_RUN_FAILURE_CODES, type PipelineStepRunRecord } from \"@sixb/core/storage\"\nimport {\n createPipelineStepFailure,\n createStepBookkeepingError,\n requireRegisteredDataset,\n statusForFailure,\n throwIfAborted,\n} from \"./errors\"\nimport { executeRunStep } from \"./execute-run-step\"\nimport { executeSqlStep } from \"./execute-sql-step\"\nimport { type ResolvedStepInput, resolveStepInputs } from \"./step-inputs\"\nimport type {\n PipelineJob,\n PipelineLogSession,\n PipelineStepFinishedHandler,\n PipelineStepRunResult,\n PipelineStepStartedHandler,\n PipelineWorkerContext,\n} from \"./types\"\n\ntype StepExecutionResult = {\n readonly version: DatasetVersion\n readonly versionCreated: boolean\n readonly rowsWritten?: number\n}\n\nexport async function runStep(input: {\n readonly runtime: PipelineWorkerContext\n readonly pipeline: PipelineDefinition\n readonly step: PipelineStepDefinition\n readonly stepIndex: number\n readonly job: PipelineJob\n readonly signal: AbortSignal\n readonly logSession: PipelineLogSession\n readonly onStepStarted?: PipelineStepStartedHandler\n readonly onStepFinished?: PipelineStepFinishedHandler\n}): Promise<PipelineStepRunResult> {\n const { runtime, pipeline, step, stepIndex, job, signal } = input\n const lifecycleContext = {\n stepIndex,\n totalSteps: pipeline.graph.nodes.length,\n }\n\n throwIfAborted(signal)\n let resolvedInputs: readonly ResolvedStepInput[]\n let outputDataset: DatasetDefinition\n let expectedLatestVersionId: string | null\n try {\n outputDataset = requireRegisteredDataset({\n dataset: runtime.datasets.getById(step.output.id),\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n role: \"output\",\n datasetId: step.output.id,\n })\n\n await runtime.lakeStorage.createDataset(outputDataset)\n // Capture the output guard before any input is pinned. A later capture could legitimize\n // overwriting a concurrent run with results computed from older inputs.\n expectedLatestVersionId =\n (await runtime.lakeStorage.getLatestVersion(outputDataset.id))?.versionId ?? null\n resolvedInputs = await resolveStepInputs({\n runtime,\n pipeline,\n step,\n pipelineRunId: job.id,\n })\n } catch (error) {\n if (statusForFailure(signal, error) === \"failed\") {\n throw createPipelineStepFailure({\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n cause: error,\n })\n }\n throw error\n }\n const inputRefs = resolvedInputs.map((resolved) => resolved.ref)\n\n const stepRunId = `${job.id}:step:${stepIndex + 1}:${step.id}`\n const startedStepRun = await runtime.pipelineRunsStorage.startStep({\n projectId: runtime.id,\n id: stepRunId,\n pipelineRunId: job.id,\n pipelineId: pipeline.id,\n stepId: step.id,\n datasetId: outputDataset.id,\n mode: step.mode,\n inputs: inputRefs,\n })\n await input.onStepStarted?.(startedStepRun, lifecycleContext)\n\n let committedVersion: DatasetVersion | undefined\n let rowsWritten: number | undefined\n\n try {\n const execution = await executeStep({\n runtime,\n pipeline,\n step,\n job,\n signal,\n logSession: input.logSession,\n outputDataset,\n expectedLatestVersionId,\n resolvedInputs,\n })\n committedVersion = execution.version\n rowsWritten = execution.rowsWritten\n\n let stepRun: PipelineStepRunRecord\n try {\n stepRun = await runtime.pipelineRunsStorage.finishStep({\n projectId: runtime.id,\n id: stepRunId,\n status: \"succeeded\",\n output: {\n datasetId: committedVersion.datasetId,\n versionId: committedVersion.versionId,\n },\n rowsWritten,\n })\n } catch (error) {\n throw createStepBookkeepingError({\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n stepRunId,\n version: committedVersion,\n cause: error,\n })\n }\n await input.onStepFinished?.(stepRun, lifecycleContext)\n\n return {\n run: stepRun,\n version: committedVersion,\n versionCreated: execution.versionCreated,\n }\n } catch (error) {\n if (!committedVersion) {\n const status = statusForFailure(signal, error)\n const failureError =\n status === \"failed\"\n ? createPipelineStepFailure({\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n stepRunId,\n cause: error,\n })\n : error\n const failedStepRun = await runtime.pipelineRunsStorage\n .finishStep({\n projectId: runtime.id,\n id: stepRunId,\n status,\n rowsWritten,\n error: captureSixbFailure(failureError, {\n allowedCodes: PIPELINE_RUN_FAILURE_CODES,\n defaultCode: status === \"cancelled\" ? \"runtime.cancelled\" : \"internal.unexpected\",\n details: {\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n stepRunId,\n },\n }),\n })\n .catch(() => null)\n\n if (failedStepRun) {\n await input.onStepFinished?.(failedStepRun, lifecycleContext)\n }\n\n throw failureError\n }\n\n throw error\n }\n}\n\nasync function executeStep(input: {\n readonly runtime: PipelineWorkerContext\n readonly pipeline: PipelineDefinition\n readonly step: PipelineStepDefinition\n readonly job: PipelineJob\n readonly signal: AbortSignal\n readonly logSession: PipelineLogSession\n readonly outputDataset: DatasetDefinition\n readonly expectedLatestVersionId: string | null\n readonly resolvedInputs: readonly ResolvedStepInput[]\n}): Promise<StepExecutionResult> {\n switch (input.step.executor.kind) {\n case \"run\":\n return executeRunStep(input)\n case \"sql\":\n return executeSqlStep(input)\n }\n}\n",
10
+ "import type {\n DatasetDefinition,\n DatasetRow,\n PipelineDefinition,\n PipelineStepDefinition,\n PipelineStepRunContext,\n} from \"@sixb/core\"\nimport { createSixbError } from \"@sixb/core/internal/errors\"\nimport type { DatasetVersion } from \"@sixb/core/lake-storage\"\nimport { throwIfAborted } from \"./errors\"\nimport { createStepInputs, type ResolvedStepInput } from \"./step-inputs\"\nimport type { PipelineJob, PipelineLogSession, PipelineWorkerContext } from \"./types\"\n\nexport async function executeRunStep(input: {\n readonly runtime: PipelineWorkerContext\n readonly pipeline: PipelineDefinition\n readonly step: PipelineStepDefinition\n readonly job: PipelineJob\n readonly signal: AbortSignal\n readonly logSession: PipelineLogSession\n readonly outputDataset: DatasetDefinition\n readonly expectedLatestVersionId: string | null\n readonly resolvedInputs: readonly ResolvedStepInput[]\n}): Promise<{\n readonly version: DatasetVersion\n readonly versionCreated: boolean\n readonly rowsWritten: number\n}> {\n const { runtime, pipeline, step, job, signal, outputDataset, resolvedInputs } = input\n\n if (step.executor.kind !== \"run\") {\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline '${pipeline.id}' step '${step.id}' uses SQL execution, which is not supported by the run step executor.`,\n {\n details: {\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n datasetId: outputDataset.id,\n },\n }\n )\n }\n\n const logger = input.logSession.withContext({ stepId: step.id })\n let rowsWritten = 0\n const write = await runtime.lakeStorage.beginWrite({\n dataset: outputDataset,\n mode: step.mode,\n inputs: resolvedInputs.map((resolved) => resolved.ref),\n producer: {\n kind: \"pipeline\",\n id: pipeline.id,\n runId: job.id,\n stepId: step.id,\n },\n })\n\n try {\n const context: PipelineStepRunContext = {\n projectId: runtime.id,\n pipelineId: pipeline.id,\n stepId: step.id,\n runId: job.id,\n signal,\n logger,\n inputs: createStepInputs(runtime.lakeStorage, resolvedInputs),\n output: {\n async writeRows(rows) {\n await write.writeRows(\n countRowsWritten(rows, signal, () => {\n rowsWritten += 1\n })\n )\n },\n },\n }\n\n await step.executor.handler(context)\n throwIfAborted(signal)\n\n const commit = await write.commit({\n expectedLatestVersionId: input.expectedLatestVersionId,\n commitMessage: `pipeline ${pipeline.id} step ${step.id} run ${job.id}`,\n })\n const { outcome, ...version } = commit\n\n return {\n version,\n versionCreated: outcome === \"created\",\n rowsWritten,\n }\n } catch (error) {\n await write.abort().catch(() => {})\n throw error\n }\n}\n\nasync function* countRowsWritten(\n rows: Iterable<DatasetRow> | AsyncIterable<DatasetRow>,\n signal: AbortSignal,\n onWritten: () => void\n): AsyncIterable<DatasetRow> {\n for await (const row of rows) {\n throwIfAborted(signal)\n yield row\n onWritten()\n }\n}\n",
11
11
  "import type {\n DatasetDefinition,\n PipelineDefinition,\n PipelineStepDefinition,\n PipelineStepInput,\n PipelineStepRunContext,\n} from \"@sixb/core\"\nimport { createSixbError } from \"@sixb/core/internal/errors\"\nimport type {\n DatasetVersion,\n DatasetVersionRef,\n ReadDatasetRowsInput,\n} from \"@sixb/core/lake-storage\"\nimport { requireRegisteredDataset } from \"./errors\"\nimport type { PipelineWorkerContext } from \"./types\"\n\nexport interface ResolvedStepInput {\n readonly name: string\n readonly dataset: DatasetDefinition\n readonly version: DatasetVersion\n readonly ref: DatasetVersionRef\n}\n\nexport async function resolveStepInputs(input: {\n readonly runtime: PipelineWorkerContext\n readonly pipeline: PipelineDefinition\n readonly step: PipelineStepDefinition\n readonly pipelineRunId: string\n}): Promise<readonly ResolvedStepInput[]> {\n const { runtime, pipeline, step, pipelineRunId } = input\n const resolved: ResolvedStepInput[] = []\n\n for (const [name, declaredDataset] of Object.entries(step.inputs)) {\n const dataset = requireRegisteredDataset({\n dataset: runtime.datasets.getById(declaredDataset.id),\n pipelineId: pipeline.id,\n pipelineRunId,\n stepId: step.id,\n role: \"input\",\n name,\n datasetId: declaredDataset.id,\n })\n\n const version = await runtime.lakeStorage.getLatestVersion(dataset.id)\n if (!version) {\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline '${pipeline.id}' step '${step.id}' input '${name}' dataset '${dataset.id}' has no committed version.`,\n {\n details: {\n pipelineId: pipeline.id,\n pipelineRunId,\n stepId: step.id,\n datasetId: dataset.id,\n },\n }\n )\n }\n\n resolved.push({\n name,\n dataset,\n version,\n ref: {\n datasetId: version.datasetId,\n versionId: version.versionId,\n },\n })\n }\n\n return resolved\n}\n\nexport function createStepInputs(\n lakeStorage: PipelineWorkerContext[\"lakeStorage\"],\n resolved: readonly ResolvedStepInput[]\n): PipelineStepRunContext[\"inputs\"] {\n const inputs: Record<string, PipelineStepInput> = {}\n\n for (const input of resolved) {\n inputs[input.name] = {\n dataset: input.dataset,\n version: input.version,\n readRows(readInput: Omit<ReadDatasetRowsInput, \"datasetId\" | \"versionId\"> = {}) {\n // Step readers stay pinned even if newer versions commit while the handler runs.\n return lakeStorage.readRows({\n ...readInput,\n datasetId: input.dataset.id,\n versionId: input.version.versionId,\n })\n },\n }\n }\n\n return inputs\n}\n",
12
- "import type {\n DatasetDefinition,\n LakeStorage,\n LakeStorageWithSql,\n PipelineDefinition,\n PipelineStepDefinition,\n} from \"@sixb/core\"\nimport { createSixbError } from \"@sixb/core/internal/errors\"\nimport type {\n DatasetVersion,\n DatasetWriteMode,\n LakeSqlTransformCapabilities,\n} from \"@sixb/core/lake-storage\"\nimport { throwIfAborted } from \"./errors\"\nimport type { ResolvedStepInput } from \"./step-inputs\"\nimport type { PipelineJob, PipelineWorkerContext } from \"./types\"\n\nfunction hasSqlExecutor(lakeStorage: LakeStorage): lakeStorage is LakeStorageWithSql {\n const sql = \"sql\" in lakeStorage ? lakeStorage.sql : null\n\n return (\n typeof sql === \"object\" && sql !== null && \"execute\" in sql && typeof sql.execute === \"function\"\n )\n}\n\nfunction assertSqlModeSupported(input: {\n readonly capabilities: LakeSqlTransformCapabilities\n readonly dialect: string\n readonly mode: DatasetWriteMode\n readonly pipelineId: string\n readonly pipelineRunId: string\n readonly stepId: string\n readonly datasetId: string\n}): void {\n const supported =\n input.mode === \"append\"\n ? input.capabilities.supportsAppend\n : input.capabilities.supportsSnapshot\n if (supported) return\n\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline '${input.pipelineId}' step '${input.stepId}' writes in ` +\n `'${input.mode}' mode, which the ${input.dialect} SQL executor does not support.`,\n {\n details: {\n pipelineId: input.pipelineId,\n pipelineRunId: input.pipelineRunId,\n stepId: input.stepId,\n datasetId: input.datasetId,\n },\n }\n )\n}\n\nexport async function executeSqlStep(input: {\n readonly runtime: PipelineWorkerContext\n readonly pipeline: PipelineDefinition\n readonly step: PipelineStepDefinition\n readonly job: PipelineJob\n readonly signal: AbortSignal\n readonly outputDataset: DatasetDefinition\n readonly resolvedInputs: readonly ResolvedStepInput[]\n}): Promise<{\n readonly version: DatasetVersion\n readonly versionCreated: boolean\n readonly rowsWritten?: number\n}> {\n const { runtime, pipeline, step, job, signal, outputDataset, resolvedInputs } = input\n\n if (step.executor.kind !== \"sql\") {\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline '${pipeline.id}' step '${step.id}' uses run execution, which is not supported by the SQL step executor.`,\n {\n details: {\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n datasetId: outputDataset.id,\n },\n }\n )\n }\n\n if (!hasSqlExecutor(runtime.lakeStorage)) {\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline '${pipeline.id}' step '${step.id}' requires SQL transform support, but lake storage does not provide lakeStorage.sql.execute(...).`,\n {\n details: {\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n datasetId: outputDataset.id,\n },\n }\n )\n }\n\n // `LakeSqlExecutor.capabilities` is a required field on the contract that nothing read,\n // so a provider declaring `supportsAppend: false` was asked to be honest and then\n // ignored — the unsupported mode failed somewhere inside the provider instead, in\n // whatever words that provider happened to use.\n assertSqlModeSupported({\n capabilities: runtime.lakeStorage.sql.capabilities,\n dialect: runtime.lakeStorage.sql.dialect,\n mode: step.mode,\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n datasetId: outputDataset.id,\n })\n\n throwIfAborted(signal)\n\n const commit = await runtime.lakeStorage.sql.execute({\n sources: Object.fromEntries(\n resolvedInputs.map((input) => [\n input.name,\n {\n dataset: input.dataset,\n versionId: input.version.versionId,\n },\n ])\n ),\n sql: step.executor.sql,\n target: outputDataset,\n mode: step.mode,\n producer: {\n kind: \"pipeline\",\n id: pipeline.id,\n runId: job.id,\n stepId: step.id,\n },\n commitMessage: `pipeline ${pipeline.id} step ${step.id} run ${job.id}`,\n })\n\n throwIfAborted(signal)\n const { outcome, ...version } = commit\n\n return {\n version,\n versionCreated: outcome === \"created\",\n rowsWritten: version.rowCount,\n }\n}\n"
12
+ "import type {\n DatasetDefinition,\n LakeStorage,\n LakeStorageWithSql,\n PipelineDefinition,\n PipelineStepDefinition,\n} from \"@sixb/core\"\nimport { createSixbError } from \"@sixb/core/internal/errors\"\nimport type {\n DatasetVersion,\n DatasetWriteMode,\n LakeSqlTransformCapabilities,\n} from \"@sixb/core/lake-storage\"\nimport { throwIfAborted } from \"./errors\"\nimport type { ResolvedStepInput } from \"./step-inputs\"\nimport type { PipelineJob, PipelineWorkerContext } from \"./types\"\n\nfunction hasSqlExecutor(lakeStorage: LakeStorage): lakeStorage is LakeStorageWithSql {\n const sql = \"sql\" in lakeStorage ? lakeStorage.sql : null\n\n return (\n typeof sql === \"object\" && sql !== null && \"execute\" in sql && typeof sql.execute === \"function\"\n )\n}\n\nfunction assertSqlModeSupported(input: {\n readonly capabilities: LakeSqlTransformCapabilities\n readonly dialect: string\n readonly mode: DatasetWriteMode\n readonly pipelineId: string\n readonly pipelineRunId: string\n readonly stepId: string\n readonly datasetId: string\n}): void {\n const supported =\n input.mode === \"append\"\n ? input.capabilities.supportsAppend\n : input.capabilities.supportsSnapshot\n if (supported) return\n\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline '${input.pipelineId}' step '${input.stepId}' writes in ` +\n `'${input.mode}' mode, which the ${input.dialect} SQL executor does not support.`,\n {\n details: {\n pipelineId: input.pipelineId,\n pipelineRunId: input.pipelineRunId,\n stepId: input.stepId,\n datasetId: input.datasetId,\n },\n }\n )\n}\n\nexport async function executeSqlStep(input: {\n readonly runtime: PipelineWorkerContext\n readonly pipeline: PipelineDefinition\n readonly step: PipelineStepDefinition\n readonly job: PipelineJob\n readonly signal: AbortSignal\n readonly outputDataset: DatasetDefinition\n readonly expectedLatestVersionId: string | null\n readonly resolvedInputs: readonly ResolvedStepInput[]\n}): Promise<{\n readonly version: DatasetVersion\n readonly versionCreated: boolean\n readonly rowsWritten?: number\n}> {\n const { runtime, pipeline, step, job, signal, outputDataset, resolvedInputs } = input\n\n if (step.executor.kind !== \"sql\") {\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline '${pipeline.id}' step '${step.id}' uses run execution, which is not supported by the SQL step executor.`,\n {\n details: {\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n datasetId: outputDataset.id,\n },\n }\n )\n }\n\n if (!hasSqlExecutor(runtime.lakeStorage)) {\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbPipelineWorker] Pipeline '${pipeline.id}' step '${step.id}' requires SQL transform support, but lake storage does not provide lakeStorage.sql.execute(...).`,\n {\n details: {\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n datasetId: outputDataset.id,\n },\n }\n )\n }\n\n // `LakeSqlExecutor.capabilities` is a required field on the contract that nothing read,\n // so a provider declaring `supportsAppend: false` was asked to be honest and then\n // ignored — the unsupported mode failed somewhere inside the provider instead, in\n // whatever words that provider happened to use.\n assertSqlModeSupported({\n capabilities: runtime.lakeStorage.sql.capabilities,\n dialect: runtime.lakeStorage.sql.dialect,\n mode: step.mode,\n pipelineId: pipeline.id,\n pipelineRunId: job.id,\n stepId: step.id,\n datasetId: outputDataset.id,\n })\n\n throwIfAborted(signal)\n\n const commit = await runtime.lakeStorage.sql.execute({\n sources: Object.fromEntries(\n resolvedInputs.map((input) => [\n input.name,\n {\n dataset: input.dataset,\n versionId: input.version.versionId,\n },\n ])\n ),\n sql: step.executor.sql,\n target: outputDataset,\n expectedLatestVersionId: input.expectedLatestVersionId,\n mode: step.mode,\n producer: {\n kind: \"pipeline\",\n id: pipeline.id,\n runId: job.id,\n stepId: step.id,\n },\n commitMessage: `pipeline ${pipeline.id} step ${step.id} run ${job.id}`,\n })\n\n throwIfAborted(signal)\n const { outcome, ...version } = commit\n\n return {\n version,\n versionCreated: outcome === \"created\",\n rowsWritten: version.rowCount,\n }\n}\n"
13
13
  ],
14
- "mappings": "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",
15
- "debugId": "DD983D45D23B0E1464756E2164756E21",
14
+ "mappings": "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",
15
+ "debugId": "F41F62F6D8367E5E64756E2164756E21",
16
16
  "names": []
17
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-step.d.ts","sourceRoot":"","sources":["../src/run-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAc/F,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,2BAA2B,EAC3B,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAQhB,wBAAsB,OAAO,CAAC,KAAK,EAAE;IACnC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAA;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,0BAA0B,CAAA;IACnD,QAAQ,CAAC,cAAc,CAAC,EAAE,2BAA2B,CAAA;CACtD,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA4IjC"}
1
+ {"version":3,"file":"run-step.d.ts","sourceRoot":"","sources":["../src/run-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAc/F,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,2BAA2B,EAC3B,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAQhB,wBAAsB,OAAO,CAAC,KAAK,EAAE;IACnC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAA;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,0BAA0B,CAAA;IACnD,QAAQ,CAAC,cAAc,CAAC,EAAE,2BAA2B,CAAA;CACtD,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAkJjC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sixb/pipeline-worker",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "Worker that runs Sixb pipelines",
5
5
  "keywords": [
6
6
  "sixb",
@@ -35,16 +35,16 @@
35
35
  "prepack": "bun run build"
36
36
  },
37
37
  "peerDependencies": {
38
- "@sixb/core": "0.1.7"
38
+ "@sixb/core": "0.1.9"
39
39
  },
40
40
  "devDependencies": {
41
- "@sixb/core": "0.1.7",
41
+ "@sixb/core": "0.1.9",
42
42
  "@types/bun": "latest",
43
43
  "typescript": "^5.7.0"
44
44
  },
45
45
  "license": "MIT",
46
46
  "engines": {
47
- "bun": ">=1.3.0"
47
+ "bun": ">=1.4.2"
48
48
  },
49
49
  "publishConfig": {
50
50
  "access": "public"
@@ -19,6 +19,7 @@ export async function executeRunStep(input: {
19
19
  readonly signal: AbortSignal
20
20
  readonly logSession: PipelineLogSession
21
21
  readonly outputDataset: DatasetDefinition
22
+ readonly expectedLatestVersionId: string | null
22
23
  readonly resolvedInputs: readonly ResolvedStepInput[]
23
24
  }): Promise<{
24
25
  readonly version: DatasetVersion
@@ -80,6 +81,7 @@ export async function executeRunStep(input: {
80
81
  throwIfAborted(signal)
81
82
 
82
83
  const commit = await write.commit({
84
+ expectedLatestVersionId: input.expectedLatestVersionId,
83
85
  commitMessage: `pipeline ${pipeline.id} step ${step.id} run ${job.id}`,
84
86
  })
85
87
  const { outcome, ...version } = commit
@@ -60,6 +60,7 @@ export async function executeSqlStep(input: {
60
60
  readonly job: PipelineJob
61
61
  readonly signal: AbortSignal
62
62
  readonly outputDataset: DatasetDefinition
63
+ readonly expectedLatestVersionId: string | null
63
64
  readonly resolvedInputs: readonly ResolvedStepInput[]
64
65
  }): Promise<{
65
66
  readonly version: DatasetVersion
@@ -126,6 +127,7 @@ export async function executeSqlStep(input: {
126
127
  ),
127
128
  sql: step.executor.sql,
128
129
  target: outputDataset,
130
+ expectedLatestVersionId: input.expectedLatestVersionId,
129
131
  mode: step.mode,
130
132
  producer: {
131
133
  kind: "pipeline",
package/src/run-step.ts CHANGED
@@ -47,13 +47,8 @@ export async function runStep(input: {
47
47
  throwIfAborted(signal)
48
48
  let resolvedInputs: readonly ResolvedStepInput[]
49
49
  let outputDataset: DatasetDefinition
50
+ let expectedLatestVersionId: string | null
50
51
  try {
51
- resolvedInputs = await resolveStepInputs({
52
- runtime,
53
- pipeline,
54
- step,
55
- pipelineRunId: job.id,
56
- })
57
52
  outputDataset = requireRegisteredDataset({
58
53
  dataset: runtime.datasets.getById(step.output.id),
59
54
  pipelineId: pipeline.id,
@@ -64,6 +59,16 @@ export async function runStep(input: {
64
59
  })
65
60
 
66
61
  await runtime.lakeStorage.createDataset(outputDataset)
62
+ // Capture the output guard before any input is pinned. A later capture could legitimize
63
+ // overwriting a concurrent run with results computed from older inputs.
64
+ expectedLatestVersionId =
65
+ (await runtime.lakeStorage.getLatestVersion(outputDataset.id))?.versionId ?? null
66
+ resolvedInputs = await resolveStepInputs({
67
+ runtime,
68
+ pipeline,
69
+ step,
70
+ pipelineRunId: job.id,
71
+ })
67
72
  } catch (error) {
68
73
  if (statusForFailure(signal, error) === "failed") {
69
74
  throw createPipelineStepFailure({
@@ -102,6 +107,7 @@ export async function runStep(input: {
102
107
  signal,
103
108
  logSession: input.logSession,
104
109
  outputDataset,
110
+ expectedLatestVersionId,
105
111
  resolvedInputs,
106
112
  })
107
113
  committedVersion = execution.version
@@ -187,6 +193,7 @@ async function executeStep(input: {
187
193
  readonly signal: AbortSignal
188
194
  readonly logSession: PipelineLogSession
189
195
  readonly outputDataset: DatasetDefinition
196
+ readonly expectedLatestVersionId: string | null
190
197
  readonly resolvedInputs: readonly ResolvedStepInput[]
191
198
  }): Promise<StepExecutionResult> {
192
199
  switch (input.step.executor.kind) {