@adonis-agora/durable 0.49.0 → 0.50.0
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/CHANGELOG.md +261 -0
- package/README.md +53 -22
- package/dist/assets/spa/assets/index-DupjrK7N.js +16 -0
- package/dist/assets/spa/assets/index-DupjrK7N.js.map +1 -0
- package/dist/assets/spa/index.html +1 -1
- package/dist/commands/durable_worker.d.ts.map +1 -1
- package/dist/commands/durable_worker.js +9 -8
- package/dist/commands/durable_worker.js.map +1 -1
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +1 -0
- package/dist/configure.js.map +1 -1
- package/dist/providers/dashboard_provider.d.ts +2 -0
- package/dist/providers/dashboard_provider.d.ts.map +1 -1
- package/dist/providers/dashboard_provider.js +50 -6
- package/dist/providers/dashboard_provider.js.map +1 -1
- package/dist/providers/durable_provider.d.ts.map +1 -1
- package/dist/providers/durable_provider.js +143 -34
- package/dist/providers/durable_provider.js.map +1 -1
- package/dist/src/admission-redis/redis-admission-backend.d.ts.map +1 -1
- package/dist/src/admission-redis/redis-admission-backend.js +3 -1
- package/dist/src/admission-redis/redis-admission-backend.js.map +1 -1
- package/dist/src/ambient-step.d.ts +24 -0
- package/dist/src/ambient-step.d.ts.map +1 -0
- package/dist/src/ambient-step.js +42 -0
- package/dist/src/ambient-step.js.map +1 -0
- package/dist/src/base-workflow.d.ts +10 -1
- package/dist/src/base-workflow.d.ts.map +1 -1
- package/dist/src/base-workflow.js.map +1 -1
- package/dist/src/codec-state-store.d.ts +28 -2
- package/dist/src/codec-state-store.d.ts.map +1 -1
- package/dist/src/codec-state-store.js +61 -3
- package/dist/src/codec-state-store.js.map +1 -1
- package/dist/src/commands/worker.d.ts +4 -1
- package/dist/src/commands/worker.d.ts.map +1 -1
- package/dist/src/commands/worker.js +27 -3
- package/dist/src/commands/worker.js.map +1 -1
- package/dist/src/config_types.d.ts +6 -0
- package/dist/src/config_types.d.ts.map +1 -1
- package/dist/src/control-plane-redis/redis-control-plane.d.ts.map +1 -1
- package/dist/src/control-plane-redis/redis-control-plane.js +22 -6
- package/dist/src/control-plane-redis/redis-control-plane.js.map +1 -1
- package/dist/src/control-planes/factory.d.ts +6 -0
- package/dist/src/control-planes/factory.d.ts.map +1 -1
- package/dist/src/control-planes/factory.js +1 -0
- package/dist/src/control-planes/factory.js.map +1 -1
- package/dist/src/dashboard/gateway-adapter.d.ts +15 -5
- package/dist/src/dashboard/gateway-adapter.d.ts.map +1 -1
- package/dist/src/dashboard/gateway-adapter.js +71 -7
- package/dist/src/dashboard/gateway-adapter.js.map +1 -1
- package/dist/src/dashboard/handlers.d.ts +53 -1
- package/dist/src/dashboard/handlers.d.ts.map +1 -1
- package/dist/src/dashboard/handlers.js +200 -20
- package/dist/src/dashboard/handlers.js.map +1 -1
- package/dist/src/dashboard/index.d.ts +2 -2
- package/dist/src/dashboard/index.d.ts.map +1 -1
- package/dist/src/dashboard/index.js +2 -2
- package/dist/src/dashboard/index.js.map +1 -1
- package/dist/src/dashboard/openapi.d.ts.map +1 -1
- package/dist/src/dashboard/openapi.js +71 -1
- package/dist/src/dashboard/openapi.js.map +1 -1
- package/dist/src/define_config.d.ts +122 -8
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/diagnostics-bridge.d.ts +16 -3
- package/dist/src/diagnostics-bridge.d.ts.map +1 -1
- package/dist/src/diagnostics-bridge.js +9 -3
- package/dist/src/diagnostics-bridge.js.map +1 -1
- package/dist/src/discovery-roots.d.ts +92 -0
- package/dist/src/discovery-roots.d.ts.map +1 -0
- package/dist/src/discovery-roots.js +150 -0
- package/dist/src/discovery-roots.js.map +1 -0
- package/dist/src/engine.d.ts +418 -20
- package/dist/src/engine.d.ts.map +1 -1
- package/dist/src/engine.js +1523 -159
- package/dist/src/engine.js.map +1 -1
- package/dist/src/entities.d.ts +36 -1
- package/dist/src/entities.d.ts.map +1 -1
- package/dist/src/entities.js +65 -4
- package/dist/src/entities.js.map +1 -1
- package/dist/src/errors.d.ts +36 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +44 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/event-trigger-bridge.d.ts +8 -0
- package/dist/src/event-trigger-bridge.d.ts.map +1 -1
- package/dist/src/event-trigger-bridge.js +24 -3
- package/dist/src/event-trigger-bridge.js.map +1 -1
- package/dist/src/handshake/announced.d.ts +27 -0
- package/dist/src/handshake/announced.d.ts.map +1 -1
- package/dist/src/handshake/announced.js +62 -0
- package/dist/src/handshake/announced.js.map +1 -1
- package/dist/src/handshake/directory.d.ts +92 -0
- package/dist/src/handshake/directory.d.ts.map +1 -0
- package/dist/src/handshake/directory.js +139 -0
- package/dist/src/handshake/directory.js.map +1 -0
- package/dist/src/hooks/barrel-sources.d.ts +28 -0
- package/dist/src/hooks/barrel-sources.d.ts.map +1 -0
- package/dist/src/hooks/barrel-sources.js +92 -0
- package/dist/src/hooks/barrel-sources.js.map +1 -0
- package/dist/src/hooks/steps.d.ts +12 -3
- package/dist/src/hooks/steps.d.ts.map +1 -1
- package/dist/src/hooks/steps.js +7 -11
- package/dist/src/hooks/steps.js.map +1 -1
- package/dist/src/hooks/workflows.d.ts +12 -3
- package/dist/src/hooks/workflows.d.ts.map +1 -1
- package/dist/src/hooks/workflows.js +7 -13
- package/dist/src/hooks/workflows.js.map +1 -1
- package/dist/src/index.d.ts +12 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/interfaces.d.ts +309 -21
- package/dist/src/interfaces.d.ts.map +1 -1
- package/dist/src/interfaces.js +10 -0
- package/dist/src/interfaces.js.map +1 -1
- package/dist/src/metrics.d.ts.map +1 -1
- package/dist/src/metrics.js +5 -0
- package/dist/src/metrics.js.map +1 -1
- package/dist/src/namespaces.d.ts +17 -0
- package/dist/src/namespaces.d.ts.map +1 -0
- package/dist/src/namespaces.js +24 -0
- package/dist/src/namespaces.js.map +1 -0
- package/dist/src/otel/durable-metrics.d.ts.map +1 -1
- package/dist/src/otel/durable-metrics.js +5 -0
- package/dist/src/otel/durable-metrics.js.map +1 -1
- package/dist/src/otel/durable-otel.d.ts.map +1 -1
- package/dist/src/otel/durable-otel.js +5 -0
- package/dist/src/otel/durable-otel.js.map +1 -1
- package/dist/src/pollers.d.ts +10 -1
- package/dist/src/pollers.d.ts.map +1 -1
- package/dist/src/pollers.js +15 -5
- package/dist/src/pollers.js.map +1 -1
- package/dist/src/protocol.d.ts +12 -0
- package/dist/src/protocol.d.ts.map +1 -1
- package/dist/src/protocol.js +27 -1
- package/dist/src/protocol.js.map +1 -1
- package/dist/src/remote-event.d.ts +6 -0
- package/dist/src/remote-event.d.ts.map +1 -0
- package/dist/src/remote-event.js +19 -0
- package/dist/src/remote-event.js.map +1 -0
- package/dist/src/remote-workflow-executor.d.ts +34 -12
- package/dist/src/remote-workflow-executor.d.ts.map +1 -1
- package/dist/src/remote-workflow-executor.js +42 -40
- package/dist/src/remote-workflow-executor.js.map +1 -1
- package/dist/src/run-detail-summary.d.ts +90 -3
- package/dist/src/run-detail-summary.d.ts.map +1 -1
- package/dist/src/run-detail-summary.js +360 -2
- package/dist/src/run-detail-summary.js.map +1 -1
- package/dist/src/run-facets.d.ts +48 -0
- package/dist/src/run-facets.d.ts.map +1 -0
- package/dist/src/run-facets.js +100 -0
- package/dist/src/run-facets.js.map +1 -0
- package/dist/src/run-gateway/interface.d.ts +27 -1
- package/dist/src/run-gateway/interface.d.ts.map +1 -1
- package/dist/src/run-gateway/proxy-run-gateway.d.ts +32 -4
- package/dist/src/run-gateway/proxy-run-gateway.d.ts.map +1 -1
- package/dist/src/run-gateway/proxy-run-gateway.js +101 -5
- package/dist/src/run-gateway/proxy-run-gateway.js.map +1 -1
- package/dist/src/run-gateway/run-request-responder.d.ts +18 -5
- package/dist/src/run-gateway/run-request-responder.d.ts.map +1 -1
- package/dist/src/run-gateway/run-request-responder.js +155 -32
- package/dist/src/run-gateway/run-request-responder.js.map +1 -1
- package/dist/src/run-gateway/store-run-gateway.d.ts +23 -1
- package/dist/src/run-gateway/store-run-gateway.d.ts.map +1 -1
- package/dist/src/run-gateway/store-run-gateway.js +38 -0
- package/dist/src/run-gateway/store-run-gateway.js.map +1 -1
- package/dist/src/search-attributes-schema.d.ts +44 -0
- package/dist/src/search-attributes-schema.d.ts.map +1 -0
- package/dist/src/search-attributes-schema.js +51 -0
- package/dist/src/search-attributes-schema.js.map +1 -0
- package/dist/src/singleton-admission.d.ts +75 -0
- package/dist/src/singleton-admission.d.ts.map +1 -0
- package/dist/src/singleton-admission.js +156 -0
- package/dist/src/singleton-admission.js.map +1 -0
- package/dist/src/singleton-gate.d.ts +23 -8
- package/dist/src/singleton-gate.d.ts.map +1 -1
- package/dist/src/singleton-gate.js +59 -12
- package/dist/src/singleton-gate.js.map +1 -1
- package/dist/src/standard-schema.d.ts +83 -0
- package/dist/src/standard-schema.d.ts.map +1 -0
- package/dist/src/standard-schema.js +31 -0
- package/dist/src/standard-schema.js.map +1 -0
- package/dist/src/step-discovery.d.ts +21 -11
- package/dist/src/step-discovery.d.ts.map +1 -1
- package/dist/src/step-discovery.js +86 -45
- package/dist/src/step-discovery.js.map +1 -1
- package/dist/src/step-ref.d.ts +38 -12
- package/dist/src/step-ref.d.ts.map +1 -1
- package/dist/src/step-ref.js +5 -13
- package/dist/src/step-ref.js.map +1 -1
- package/dist/src/stores/factory.d.ts +6 -0
- package/dist/src/stores/factory.d.ts.map +1 -1
- package/dist/src/stores/factory.js +4 -1
- package/dist/src/stores/factory.js.map +1 -1
- package/dist/src/stores/lucid-helpers.d.ts +2 -0
- package/dist/src/stores/lucid-helpers.d.ts.map +1 -1
- package/dist/src/stores/lucid-helpers.js +7 -0
- package/dist/src/stores/lucid-helpers.js.map +1 -1
- package/dist/src/stores/lucid-mappers.d.ts +25 -0
- package/dist/src/stores/lucid-mappers.d.ts.map +1 -1
- package/dist/src/stores/lucid-mappers.js +81 -18
- package/dist/src/stores/lucid-mappers.js.map +1 -1
- package/dist/src/stores/lucid-schema.d.ts +59 -1
- package/dist/src/stores/lucid-schema.d.ts.map +1 -1
- package/dist/src/stores/lucid-schema.js +271 -25
- package/dist/src/stores/lucid-schema.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +61 -2
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +346 -41
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/telescope/dashboard.d.ts.map +1 -1
- package/dist/src/telescope/dashboard.js +30 -1
- package/dist/src/telescope/dashboard.js.map +1 -1
- package/dist/src/telescope/data-providers.d.ts +19 -1
- package/dist/src/telescope/data-providers.d.ts.map +1 -1
- package/dist/src/telescope/data-providers.js +119 -3
- package/dist/src/telescope/data-providers.js.map +1 -1
- package/dist/src/telescope/extension.d.ts.map +1 -1
- package/dist/src/telescope/extension.js +2 -1
- package/dist/src/telescope/extension.js.map +1 -1
- package/dist/src/telescope/index.d.ts +1 -1
- package/dist/src/telescope/index.d.ts.map +1 -1
- package/dist/src/telescope/index.js +1 -1
- package/dist/src/telescope/index.js.map +1 -1
- package/dist/src/testing/in-memory-state-store.d.ts +44 -15
- package/dist/src/testing/in-memory-state-store.d.ts.map +1 -1
- package/dist/src/testing/in-memory-state-store.js +204 -41
- package/dist/src/testing/in-memory-state-store.js.map +1 -1
- package/dist/src/testing-kit/checkpoint-aggregation-contract.d.ts +16 -0
- package/dist/src/testing-kit/checkpoint-aggregation-contract.d.ts.map +1 -0
- package/dist/src/testing-kit/checkpoint-aggregation-contract.js +228 -0
- package/dist/src/testing-kit/checkpoint-aggregation-contract.js.map +1 -0
- package/dist/src/testing-kit/state-store-conformance.d.ts.map +1 -1
- package/dist/src/testing-kit/state-store-conformance.js +355 -3
- package/dist/src/testing-kit/state-store-conformance.js.map +1 -1
- package/dist/src/transport-pool.d.ts +15 -1
- package/dist/src/transport-pool.d.ts.map +1 -1
- package/dist/src/transport-pool.js +50 -4
- package/dist/src/transport-pool.js.map +1 -1
- package/dist/src/transports/adaptive-concurrency.d.ts +168 -0
- package/dist/src/transports/adaptive-concurrency.d.ts.map +1 -0
- package/dist/src/transports/adaptive-concurrency.js +353 -0
- package/dist/src/transports/adaptive-concurrency.js.map +1 -0
- package/dist/src/transports/bullmq/adaptive-concurrency.d.ts +1 -143
- package/dist/src/transports/bullmq/adaptive-concurrency.d.ts.map +1 -1
- package/dist/src/transports/bullmq/adaptive-concurrency.js +3 -311
- package/dist/src/transports/bullmq/adaptive-concurrency.js.map +1 -1
- package/dist/src/transports/bullmq/bullmq-transport.d.ts +49 -1
- package/dist/src/transports/bullmq/bullmq-transport.d.ts.map +1 -1
- package/dist/src/transports/bullmq/bullmq-transport.js +330 -38
- package/dist/src/transports/bullmq/bullmq-transport.js.map +1 -1
- package/dist/src/transports/bullmq/deps.d.ts +18 -2
- package/dist/src/transports/bullmq/deps.d.ts.map +1 -1
- package/dist/src/transports/bullmq/deps.js +44 -2
- package/dist/src/transports/bullmq/deps.js.map +1 -1
- package/dist/src/transports/db-helpers.d.ts +39 -0
- package/dist/src/transports/db-helpers.d.ts.map +1 -1
- package/dist/src/transports/db-helpers.js +73 -0
- package/dist/src/transports/db-helpers.js.map +1 -1
- package/dist/src/transports/db-remote.d.ts +53 -0
- package/dist/src/transports/db-remote.d.ts.map +1 -0
- package/dist/src/transports/db-remote.js +147 -0
- package/dist/src/transports/db-remote.js.map +1 -0
- package/dist/src/transports/db-schema.d.ts +44 -1
- package/dist/src/transports/db-schema.d.ts.map +1 -1
- package/dist/src/transports/db-schema.js +227 -88
- package/dist/src/transports/db-schema.js.map +1 -1
- package/dist/src/transports/db.d.ts +189 -6
- package/dist/src/transports/db.d.ts.map +1 -1
- package/dist/src/transports/db.js +1291 -137
- package/dist/src/transports/db.js.map +1 -1
- package/dist/src/transports/event-emitter.d.ts +8 -0
- package/dist/src/transports/event-emitter.d.ts.map +1 -1
- package/dist/src/transports/event-emitter.js +36 -3
- package/dist/src/transports/event-emitter.js.map +1 -1
- package/dist/src/transports/factory.d.ts +110 -5
- package/dist/src/transports/factory.d.ts.map +1 -1
- package/dist/src/transports/factory.js +56 -9
- package/dist/src/transports/factory.js.map +1 -1
- package/dist/src/transports/queue-mock-adapter.d.ts +7 -2
- package/dist/src/transports/queue-mock-adapter.d.ts.map +1 -1
- package/dist/src/transports/queue-mock-adapter.js +18 -2
- package/dist/src/transports/queue-mock-adapter.js.map +1 -1
- package/dist/src/transports/queue-remote.d.ts +146 -0
- package/dist/src/transports/queue-remote.d.ts.map +1 -0
- package/dist/src/transports/queue-remote.js +398 -0
- package/dist/src/transports/queue-remote.js.map +1 -0
- package/dist/src/transports/queue.d.ts +159 -6
- package/dist/src/transports/queue.d.ts.map +1 -1
- package/dist/src/transports/queue.js +747 -37
- package/dist/src/transports/queue.js.map +1 -1
- package/dist/src/transports/task-failure.d.ts +31 -0
- package/dist/src/transports/task-failure.d.ts.map +1 -0
- package/dist/src/transports/task-failure.js +50 -0
- package/dist/src/transports/task-failure.js.map +1 -0
- package/dist/src/workflow-als.d.ts +1 -1
- package/dist/src/workflow-als.d.ts.map +1 -1
- package/dist/src/workflow-ctx.d.ts +10 -0
- package/dist/src/workflow-ctx.d.ts.map +1 -1
- package/dist/src/workflow-ctx.js +97 -15
- package/dist/src/workflow-ctx.js.map +1 -1
- package/dist/src/workflow-discovery.d.ts +32 -41
- package/dist/src/workflow-discovery.d.ts.map +1 -1
- package/dist/src/workflow-discovery.js +65 -88
- package/dist/src/workflow-discovery.js.map +1 -1
- package/dist/src/workflow-ref.d.ts +24 -0
- package/dist/src/workflow-ref.d.ts.map +1 -1
- package/dist/src/workflow-ref.js.map +1 -1
- package/dist/stubs/config/durable.stub +6 -0
- package/dist/stubs/config/durable_dashboard.stub +7 -3
- package/dist/stubs/database/migrations/create_durable_tables.stub +2 -1
- package/dist/stubs/database/migrations/create_durable_transport_messages.stub +43 -0
- package/dist/stubs/database/migrations/create_durable_transport_tables.stub +12 -9
- package/dist/stubs/database/migrations/create_durable_transport_worker_keys.stub +1 -1
- package/dist/stubs/make/workflow/main.stub +1 -1
- package/package.json +6 -4
- package/skills/durable-cluster/SKILL.md +80 -11
- package/skills/durable-determinism/SKILL.md +11 -5
- package/skills/durable-reliability/SKILL.md +77 -37
- package/skills/durable-setup/SKILL.md +51 -22
- package/skills/durable-transports-stores/SKILL.md +130 -19
- package/skills/durable-workflows/SKILL.md +71 -18
- package/dist/assets/spa/assets/index-DdB9zxuX.js +0 -16
- package/dist/assets/spa/assets/index-DdB9zxuX.js.map +0 -1
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import type { Database } from '@adonisjs/lucid/database';
|
|
2
2
|
import type { WorkerDescriptor } from '../handshake/descriptor.js';
|
|
3
|
-
import { type ControlMessage, type ControlPlane, type Heartbeat, type RemoteTask, type StepResult, type Transport } from '../interfaces.js';
|
|
3
|
+
import { type ControlMessage, type ControlPlane, type GroupHealth, type Heartbeat, type RemoteTask, type RunReply, type RunRequest, type StartRunMessage, type StepResult, type TenantEvent, type Transport, type WorkflowDecision, type WorkflowStepEvent, type WorkflowTask } from '../interfaces.js';
|
|
4
4
|
import { type StepHandler } from '../protocol.js';
|
|
5
5
|
import type { DescriptorRedis } from '../worker-runtime/registry.js';
|
|
6
|
+
import type { WorkflowTurnHandler } from '../workflow-turn.js';
|
|
7
|
+
import { type ConcurrencyOption } from './adaptive-concurrency.js';
|
|
8
|
+
/**
|
|
9
|
+
* The `priority` column value for the engine's dispatch `priority` (higher = more urgent): rounded and
|
|
10
|
+
* clamped to the column's range, and `0` — "normal" — when absent, which is where the queue
|
|
11
|
+
* transport's broker mapping puts an unprioritised job too.
|
|
12
|
+
*/
|
|
13
|
+
export declare function toDbPriority(priority?: number): number;
|
|
6
14
|
export interface DbTransportOptions {
|
|
7
15
|
/**
|
|
8
16
|
* The Lucid `Database` to read/write. Use the app's own `db` service (no broker, no extra
|
|
@@ -37,8 +45,57 @@ export interface DbTransportOptions {
|
|
|
37
45
|
pollIntervalMs?: number;
|
|
38
46
|
/** How long a claimed-but-unfinished row is owned before it's reclaimable (crash recovery). Default 30s. */
|
|
39
47
|
leaseMs?: number;
|
|
40
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Max rows claimed per poll by the results, heartbeat and control loops. Default 20. The task loop
|
|
50
|
+
* claims only as many rows as it has free {@link concurrency} slots (capped by this), so a worker
|
|
51
|
+
* never hoards tasks an idle sibling could run.
|
|
52
|
+
*/
|
|
41
53
|
batchSize?: number;
|
|
54
|
+
/**
|
|
55
|
+
* How many task rows this worker runs at once. Default 1. One poll loop serves every handler name and
|
|
56
|
+
* keeps up to this many rows in flight — more slots add no polling — claiming only as many rows per
|
|
57
|
+
* poll as there are free slots, and renewing every held claim.
|
|
58
|
+
*
|
|
59
|
+
* `'adaptive'`, or `{ mode: 'adaptive', min, max, start, tickMs, ramCeilingPct, cpuCeilingPct }`,
|
|
60
|
+
* lets the {@link AdaptiveController} the BullMQ and queue transports use move the limit at runtime
|
|
61
|
+
* (from step latency, errors/stalls, RSS and optionally CPU). Either way the limit, in-flight count,
|
|
62
|
+
* RSS, CPU, throughput and p95 ride this worker's liveness key (see {@link DbTransport.groupHealth}).
|
|
63
|
+
*/
|
|
64
|
+
concurrency?: ConcurrencyOption;
|
|
65
|
+
/** How many step results the engine side settles at once. Default 1. */
|
|
66
|
+
resultConcurrency?: number;
|
|
67
|
+
/**
|
|
68
|
+
* Idle backoff for the task, heartbeat and control loops, as a multiple of {@link pollIntervalMs}:
|
|
69
|
+
* after consecutive empty polls the sleep doubles up to `idleBackoffMax × pollIntervalMs`, and any
|
|
70
|
+
* poll that finds a row resets it. Default 4 (an idle loop polls every 800ms instead of 200ms); `1`
|
|
71
|
+
* disables it. The results loop never backs off: a result is on the critical path of every step.
|
|
72
|
+
*/
|
|
73
|
+
idleBackoffMax?: number;
|
|
74
|
+
/**
|
|
75
|
+
* How many times a task row's lapsed claim may be taken over (its worker stopped renewing — crashed,
|
|
76
|
+
* or blocked its event loop past {@link leaseMs}) before the row is treated as poison: deleted, and a
|
|
77
|
+
* RETRYABLE failed result published for its step so the engine's durable retry decides (re-dispatch
|
|
78
|
+
* while attempts remain, then fail the step). Default 3, like the queue transport. Needs the tasks
|
|
79
|
+
* table's `reclaims` column (added by `autoCreate`); without it reclaims are not counted.
|
|
80
|
+
*/
|
|
81
|
+
maxStalledCount?: number;
|
|
82
|
+
/**
|
|
83
|
+
* How often (ms) a worker refreshes the liveness key of each step name it serves. Default 10000;
|
|
84
|
+
* each key lives at least 35s (three intervals when longer), so a worker that dies drops out of
|
|
85
|
+
* {@link DbTransport.groupHealth} within that.
|
|
86
|
+
*/
|
|
87
|
+
workerHeartbeatIntervalMs?: number;
|
|
88
|
+
/**
|
|
89
|
+
* Where a transport failure is reported — a throwing poll, a lost claim, a failed liveness write.
|
|
90
|
+
* Default `console.error`.
|
|
91
|
+
*/
|
|
92
|
+
onError?: (err: unknown) => void;
|
|
93
|
+
/**
|
|
94
|
+
* How long (ms) `close()`/`stop()` waits for in-flight work — running tasks, a result batch being
|
|
95
|
+
* settled — before handing every claim still held back to the table, uncounted, so another worker
|
|
96
|
+
* picks it up at once. Default 5000.
|
|
97
|
+
*/
|
|
98
|
+
closeTimeoutMs?: number;
|
|
42
99
|
/** Create the transport tables on first use if missing. Default true. */
|
|
43
100
|
autoCreate?: boolean;
|
|
44
101
|
/**
|
|
@@ -49,6 +106,19 @@ export interface DbTransportOptions {
|
|
|
49
106
|
workerKeysCacheMs?: number;
|
|
50
107
|
/** Stable id for this process (stamped on heartbeats / control `from` / `claimed_by`). Default random. */
|
|
51
108
|
instanceId?: string;
|
|
109
|
+
/**
|
|
110
|
+
* Store-less protocol and remote workflows: TTL (ms) of the keys an instance writes to say it is
|
|
111
|
+
* consuming its addressed rows (run replies, tenant events, decisions) and which tenants' events it
|
|
112
|
+
* wants, re-written every third of it. A publisher addresses rows only to live subscribers, and the
|
|
113
|
+
* janitor deletes rows addressed to an instance whose key expired. Default 30000.
|
|
114
|
+
*/
|
|
115
|
+
inboxTtlMs?: number;
|
|
116
|
+
/** How long a publisher reuses its read of a tenant's live event subscribers (ms). A subscription
|
|
117
|
+
* made within this window of an event may miss it. Default 1000; `0` reads on every event. */
|
|
118
|
+
tenantSubscribersCacheMs?: number;
|
|
119
|
+
/** How often (ms) an instance that addressed rows deletes those whose recipient is gone (a dead pod,
|
|
120
|
+
* an engine that crashed awaiting a decision). Default 30000; `0` disables the janitor. */
|
|
121
|
+
inboxSweepIntervalMs?: number;
|
|
52
122
|
}
|
|
53
123
|
/**
|
|
54
124
|
* A poll-based, DB-table-backed {@link Transport} (and best-effort {@link ControlPlane}) over
|
|
@@ -67,6 +137,12 @@ export interface DbTransportOptions {
|
|
|
67
137
|
* {@link ControlPlane} here is single-consumer (one row → one poller), correct for a single engine
|
|
68
138
|
* instance but NOT a true broadcast.
|
|
69
139
|
*
|
|
140
|
+
* It also carries remote workflow turns (`dispatchWorkflowTask` / `handleWorkflow` / `onDecision`,
|
|
141
|
+
* streamed step events) and the store-less tenant-pod protocol (start-run, run-request, run replies,
|
|
142
|
+
* tenant events), so a `tenant` pod can reach a `control-plane` over the database alone. Those ride the
|
|
143
|
+
* `durable_transport_messages` table: run replies go to the requester only, tenant events to every
|
|
144
|
+
* live subscriber of the tenant, decisions to the engine that dispatched the turn — see `db-remote.ts`.
|
|
145
|
+
*
|
|
70
146
|
* Run one instance engine-side (`onResult` + `dispatch`) and one per worker process (`handle()` for
|
|
71
147
|
* its group). Call {@link start} to begin the engine-side pollers; `handle()` auto-starts the task
|
|
72
148
|
* loop. The wire payloads are the documented `RemoteTask`/`StepResult` JSON.
|
|
@@ -91,19 +167,120 @@ export declare class DbTransport implements Transport, ControlPlane {
|
|
|
91
167
|
*/
|
|
92
168
|
useNamespace(namespace: string): void;
|
|
93
169
|
dispatch(task: RemoteTask): Promise<void>;
|
|
170
|
+
/**
|
|
171
|
+
* Park every consumer loop registered from now on ({@link handle}, {@link onResult},
|
|
172
|
+
* {@link onHeartbeat}, {@link onControl}) until {@link startConsumers}. Task, result, heartbeat and
|
|
173
|
+
* control rows are claimed by ONE consumer each, so a process not built to be a worker — a
|
|
174
|
+
* `node ace` command, a REPL — would otherwise claim rows it then dies holding (re-delivered only
|
|
175
|
+
* after the lease expires) and steal results addressed to the long-lived engine. The same gate as
|
|
176
|
+
* the `queue` and `bullmq` transports; the provider calls it per the `consumers` config.
|
|
177
|
+
*/
|
|
178
|
+
deferConsumers(): void;
|
|
179
|
+
/** Start every loop parked by {@link deferConsumers} and stop deferring (`durable:work` calls it via
|
|
180
|
+
* `engine.startConsumers()`). Idempotent; a no-op when consumption was never deferred. */
|
|
181
|
+
startConsumers(): void;
|
|
94
182
|
/**
|
|
95
183
|
* Register a step handler (worker side). Records this name's routing token
|
|
96
184
|
* (`tenantGroup(sanitizeQueueToken(name), partition)`) as served and starts the shared task poll
|
|
97
185
|
* loop on the first call — it claims task rows for EVERY served token (matching the token the
|
|
98
|
-
* engine dispatches by), runs each through {@link runStepHandler}, and writes the result.
|
|
186
|
+
* engine dispatches by), runs each through {@link runStepHandler}, and writes the result. The loop
|
|
187
|
+
* keeps up to {@link DbTransportOptions.concurrency} rows in flight, and each served token gets a
|
|
188
|
+
* liveness key once the loop consumes (a deferred, producer-only process advertises nothing).
|
|
99
189
|
*/
|
|
100
190
|
handle(name: string, fn: StepHandler): void;
|
|
191
|
+
/**
|
|
192
|
+
* Register a WORKFLOW turn consumer (worker side). Shares the task loop — and the routing token —
|
|
193
|
+
* of a step of the same name: {@link dispatchWorkflowTask} writes a task row of kind `workflow`, which
|
|
194
|
+
* runs `turn(task)` in a slot like any step, and its {@link WorkflowDecision} is written to the
|
|
195
|
+
* messages table, addressed to the engine instance that dispatched the turn. Re-registering swaps
|
|
196
|
+
* the turn fn.
|
|
197
|
+
*/
|
|
198
|
+
handleWorkflow(name: string, turn: WorkflowTurnHandler): void;
|
|
101
199
|
/** Worker side: publish a liveness heartbeat for an in-flight long step. */
|
|
102
200
|
heartbeat(beat: Heartbeat): Promise<void>;
|
|
201
|
+
/** Engine side: settle step results, up to {@link DbTransportOptions.resultConcurrency} at once. The
|
|
202
|
+
* results loop never backs off when idle — a result is on the critical path of every step. */
|
|
103
203
|
onResult(handler: (result: StepResult) => Promise<void>): void;
|
|
104
204
|
onHeartbeat(handler: (beat: Heartbeat) => Promise<void>): void;
|
|
105
205
|
publishControl(msg: ControlMessage): Promise<void>;
|
|
106
206
|
onControl(handler: (msg: ControlMessage) => void): void;
|
|
207
|
+
/**
|
|
208
|
+
* One janitor round: delete the addressed rows older than the inbox TTL whose recipient has no live
|
|
209
|
+
* inbox key — a requester or subscriber that died, an engine that crashed awaiting a decision. Rows
|
|
210
|
+
* younger than the TTL are never touched, so an instance that is just starting (or whose key write is
|
|
211
|
+
* a refresh late) keeps its rows. Reads everything from the database, so it needs no memory of what
|
|
212
|
+
* was addressed — any instance that addressed a row runs it, and a restart forgets nothing.
|
|
213
|
+
*/
|
|
214
|
+
sweepInboxes(): Promise<void>;
|
|
215
|
+
/**
|
|
216
|
+
* engine → workflow worker: a {@link WorkflowTask} as a task row of kind `workflow` on the workflow's
|
|
217
|
+
* routing token, where a {@link handleWorkflow} consumer claims it (with the token's steps, by
|
|
218
|
+
* priority). Stamped with this instance as the decision's recipient when it consumes decisions, so
|
|
219
|
+
* the decision comes back to the engine that dispatched the turn (any replica could apply it — the
|
|
220
|
+
* engine applies decisions durably by run id — but the dispatcher is the one known to be live).
|
|
221
|
+
* Idempotent per `taskId`. Throws when the schema lacks the tasks `kind` column or the messages table.
|
|
222
|
+
*/
|
|
223
|
+
dispatchWorkflowTask(task: WorkflowTask): Promise<void>;
|
|
224
|
+
/**
|
|
225
|
+
* engine ← workflow worker: consume {@link WorkflowDecision}s. ONE loop per transport; every handler
|
|
226
|
+
* sees every decision (the engine applies one by run id, dropping any its run no longer awaits). It claims the
|
|
227
|
+
* decisions addressed to this instance — consumed even while consumers are deferred, as nobody else
|
|
228
|
+
* may take them — and, once consuming, the unaddressed ones (a worker that did not know whom to
|
|
229
|
+
* reply to). Never backs off: a decision is on the critical path of every remote workflow turn.
|
|
230
|
+
*/
|
|
231
|
+
onDecision(handler: (decision: WorkflowDecision) => Promise<void>): void;
|
|
232
|
+
/** workflow worker → engine: a local step's lifecycle, for ONE engine instance to checkpoint. A
|
|
233
|
+
* deployment without the messages table drops it (reported once): it is observability only. */
|
|
234
|
+
dispatchStepEvent(event: WorkflowStepEvent): Promise<void>;
|
|
235
|
+
/** engine ← workflow worker: consume streamed step events. Idempotent — a second call is a no-op. */
|
|
236
|
+
onStepEvent(handler: (event: WorkflowStepEvent) => Promise<void>): void;
|
|
237
|
+
/** tenant → control plane: a {@link StartRunMessage} for any control plane, with this instance as
|
|
238
|
+
* the reply's recipient. Throws when the messages table is missing. */
|
|
239
|
+
dispatchStartRun(msg: StartRunMessage): Promise<void>;
|
|
240
|
+
/** control plane ← tenant: consume {@link StartRunMessage}s. Idempotent — a second call is a no-op. */
|
|
241
|
+
onStartRun(handler: (msg: StartRunMessage) => Promise<void>): void;
|
|
242
|
+
/** tenant → control plane: a {@link RunRequest} for any control plane, with this instance as the
|
|
243
|
+
* reply's recipient. Throws when the messages table is missing. */
|
|
244
|
+
dispatchRunRequest(msg: RunRequest): Promise<void>;
|
|
245
|
+
/** control plane ← tenant: consume {@link RunRequest}s. Idempotent — a second call is a no-op. */
|
|
246
|
+
onRunRequest(handler: (msg: RunRequest) => Promise<void>): void;
|
|
247
|
+
/**
|
|
248
|
+
* control plane → tenant: a correlated {@link RunReply}, addressed to the instance that sent the
|
|
249
|
+
* request. Only the instance handling that request knows the requester, so this must run while it
|
|
250
|
+
* is handled — which is what the responder does. A reply with no known requester is dropped and
|
|
251
|
+
* reported, never broadcast.
|
|
252
|
+
*/
|
|
253
|
+
publishRunReply(reply: RunReply): Promise<void>;
|
|
254
|
+
/**
|
|
255
|
+
* tenant ← control plane: consume the replies addressed to this instance. Idempotent — a second call
|
|
256
|
+
* is a no-op (one gateway per transport matches every reply by id). Consumed even while consumers are
|
|
257
|
+
* deferred: nobody else may take them.
|
|
258
|
+
*/
|
|
259
|
+
onRunReply(handler: (reply: RunReply) => void): void;
|
|
260
|
+
/**
|
|
261
|
+
* control plane → tenant: one row of the {@link TenantEvent} per instance with a live subscription to
|
|
262
|
+
* `evt.tenant` (none: nothing is written), in one INSERT. Publishes are serialized, so each subscriber
|
|
263
|
+
* receives one publisher's events in publish order.
|
|
264
|
+
*/
|
|
265
|
+
publishTenantEvent(evt: TenantEvent): Promise<void>;
|
|
266
|
+
/**
|
|
267
|
+
* tenant ← control plane: subscribe to `tenant`'s events. Writes this instance's subscriber key
|
|
268
|
+
* (kept live every third of {@link DbTransportOptions.inboxTtlMs}) and consumes the events addressed
|
|
269
|
+
* to it — never deferred, nobody else may take them. Returns an unsubscribe fn that detaches only
|
|
270
|
+
* this handler; the last one removes the subscription.
|
|
271
|
+
*/
|
|
272
|
+
onTenantEvent(tenant: string, handler: (evt: TenantEvent) => void): () => void;
|
|
273
|
+
/**
|
|
274
|
+
* Per-group worker health, for `engine.workerHealth()` and the dashboard/Telescope worker panels.
|
|
275
|
+
*
|
|
276
|
+
* - `depth` is every task row of `group` in this namespace — pending AND claimed (running, or held
|
|
277
|
+
* by a worker that died and not yet reclaimed): the DB can count both, so it is closer to BullMQ's
|
|
278
|
+
* waiting+active than the queue transport's pending-only count.
|
|
279
|
+
* - `liveWorkers` are the unexpired `${P}-worker-heartbeat:<group>:<instance>` keys in the
|
|
280
|
+
* worker-key table, each with the worker's {@link WorkerStatus} when it carries one (this
|
|
281
|
+
* transport's own beats do; a `WorkerRuntime`'s compact beat reads as liveness only).
|
|
282
|
+
*/
|
|
283
|
+
groupHealth(group: string): Promise<GroupHealth>;
|
|
107
284
|
/** The writer a worker runtime's registry advertises its descriptor and heartbeat through. */
|
|
108
285
|
createDescriptorRedis(): DescriptorRedis;
|
|
109
286
|
/** The live worker descriptors advertised on `token`. */
|
|
@@ -116,9 +293,15 @@ export declare class DbTransport implements Transport, ControlPlane {
|
|
|
116
293
|
* if you prefer an explicit start. Returns once the schema is ready.
|
|
117
294
|
*/
|
|
118
295
|
start(): Promise<void>;
|
|
119
|
-
/**
|
|
120
|
-
*
|
|
121
|
-
*
|
|
296
|
+
/**
|
|
297
|
+
* Stop every poll loop and wait — bounded by {@link DbTransportOptions.closeTimeoutMs}, 5s by
|
|
298
|
+
* default — for in-flight work: the tasks in a handler get to finish and write their result, and a
|
|
299
|
+
* result batch being settled gets to finish. Whatever is still unfinished then is HANDED BACK: its
|
|
300
|
+
* claims are cleared (only where still ours) so another worker picks the rows up at once, instead of
|
|
301
|
+
* after the lease — and uncounted, so a deploy never pushes a long step toward the poison bound. A
|
|
302
|
+
* handler still running here may finish after another worker re-ran its step; its result is
|
|
303
|
+
* dropped. Does not close the shared `Database`.
|
|
304
|
+
*/
|
|
122
305
|
stop(): Promise<void>;
|
|
123
306
|
/** Stop the pollers (alias of {@link stop} for the `Transport.close` contract). */
|
|
124
307
|
close(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/transports/db.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAKzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/transports/db.ts"],"names":[],"mappings":"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"}
|